Kubernetes Ingress Flask 应用程序
Kubernetes Ingress Flask Application
我有一个使用 minikube 部署到 kubernetes 的简单演示 Flask 应用程序。我能够使用服务访问该应用程序。但是我无法使用入口连接。
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
是否需要任何额外的配置才能通过入口访问应用程序?
问题是您需要使用 mydemo.info
的主机头访问它才能使 Ingress 规范正常工作。您还需要确认安装了 Ingress Controller,对于新用户通常是 ingress-nginx,但有很多选项。然后你会寻找 Ingress Controllers NodePort 或 LoadBalancer 服务并通过它访问。
ingress 和 ingress-dns 插件目前仅在 Linux[= 上受支持26=]。目前 windows 不支持。
MoreInfo
不支持 Windows:
- minikube 版本:v1.16.0
- minikube 版本:v1.17.1
我找了很久。我确认这在 MacOS 上也不起作用。
使用 minikube tunnel
是我找到的唯一方法。
我有一个使用 minikube 部署到 kubernetes 的简单演示 Flask 应用程序。我能够使用服务访问该应用程序。但是我无法使用入口连接。
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
是否需要任何额外的配置才能通过入口访问应用程序?
问题是您需要使用 mydemo.info
的主机头访问它才能使 Ingress 规范正常工作。您还需要确认安装了 Ingress Controller,对于新用户通常是 ingress-nginx,但有很多选项。然后你会寻找 Ingress Controllers NodePort 或 LoadBalancer 服务并通过它访问。
ingress 和 ingress-dns 插件目前仅在 Linux[= 上受支持26=]。目前 windows 不支持。 MoreInfo
不支持 Windows:
- minikube 版本:v1.16.0
- minikube 版本:v1.17.1
我找了很久。我确认这在 MacOS 上也不起作用。
使用 minikube tunnel
是我找到的唯一方法。