Kubernetes 入口烧瓶应用程序

Posted

技术标签:

【中文标题】Kubernetes 入口烧瓶应用程序【英文标题】:Kubernetes Ingress Flask Application 【发布时间】:2021-05-18 05:55:08 【问题描述】:

我有一个使用 minikube 部署到 kubernetes 的简单演示 Flask 应用程序。我可以使用服务访问该应用程序。但我无法使用 ingress 进行连接。

Services.yaml

apiVersion: v1
kind: Service
metadata:
  name: services-app-service
spec:
  selector:
    app: services-app
  type: ClusterIP             
  ports:
    - protocol: TCP
      port: 5000              # External connection
      targetPort: 5000        # Internal connection

D:Path>kubectl get svc
NAME                   TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
db                     ClusterIP   None          <none>        3306/TCP   120m
kubernetes             ClusterIP   10.20.30.1    <none>        443/TCP    3h38m
services-app-service   ClusterIP   10.20.30.40   <none>        5000/TCP   18m

我可以使用 minikube 访问该应用。

D:Path>minikube service services-app-service --url
* service default/services-app-service has no node port
* Starting tunnel for service services-app-service.
|-----------|----------------------|-------------|------------------------|
| NAMESPACE |         NAME         | TARGET PORT |          URL           |
|-----------|----------------------|-------------|------------------------|
| default   | services-app-service |             | http://127.0.0.1:50759 |
|-----------|----------------------|-------------|------------------------|
http://127.0.0.1:50759
! Because you are using a Docker driver on windows, the terminal needs to be open to run it.

Ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: services-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - host: mydemo.info
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: services-app-service
                port:
                  number: 5000

D:Path>kubectl get ing
NAME               CLASS    HOSTS         ADDRESS        PORTS   AGE
services-ingress   <none>   mydemo.info   192.168.40.1   80      15m

通过入口访问应用程序是否需要任何其他配置?

【问题讨论】:

【参考方案1】:

我一直在寻找年龄。我确认这在 MacOS 上也不起作用。

使用minikube tunnel 是我找到的唯一方法。

【讨论】:

【参考方案2】:

ingressingress-dns 插件目前仅在 Linux 上受支持。目前在 Windows 上不支持。 MoreInfo

在 Windows 上不支持

minikube 版本:v1.16.0 minikube 版本:v1.17.1

【讨论】:

这令人失望 - 为什么这在文档中没有更明显?感谢您的努力 Rakesh!【参考方案3】:

问题是您需要使用主机头 mydemo.info 访问它,该 Ingress 规范才能正常工作。您还需要确认已安装 Ingress Controller,通常是新用户的 ingress-nginx,但有很多选项。然后你会寻找 Ingress Controllers NodePort 或 LoadBalancer 服务并通过它访问。

【讨论】:

谢谢。但我已经尝试使用主机头并获得相同的curl: (7) Failed to connect to ........... port 80: Timed out 并安装了入口控制器。我正在遵循kubernetes.io/docs/tasks/access-application-cluster/… 的指示 除非你安装了 MetalLB 或类似的,它不会在端口 80 上。查看你的入口控制器的服务定义。 我尝试了文档中提到的相同步骤。并尝试使用文档中提到的相同示例,但这也不起作用。我相信这与serverfault.com/questions/1052349/…有关

以上是关于Kubernetes 入口烧瓶应用程序的主要内容,如果未能解决你的问题,请参考以下文章

kubernetes 不健康的入口后端

将 Kubernetes 入口与两个服务和内部 Web API 路由一起使用

Kubernetes 入口 |无法解析主机名

将 java_opts 传递给 Kubernetes 中的 Spring Boot 应用程序

rfc7231#section-6.5.1 关于 Kubernetes 上 dotnet 核心入口控制器 api 访问的问题

Kubernetes pod 中的 Docker 容器无法通信