我一直试图在Google kubernetes Engine上创建kubernetes集群。我的Pod成功运行,但是问题出在入口控制器上。入口控制程序未显示用于访问该应用程序的外部IP。
nginx入口控制器的YAML文件如下所示:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: http-ingress
labels:
app: ingress
annotations:
kubernetes.io/ingress.class: addon-http-application-routing
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: nodeapp1svc
servicePort: 80
- path: /app1
backend:
serviceName: nodeapp2svc
servicePort: 80
- path: /app2
backend:
serviceName: nodeapp2svc
servicePort: 80
接下来我该怎么办?
答案 0 :(得分:1)
问题似乎与您的annotations
有关,尤其是与此有关:
kubernetes.io/ingress.class: addon-http-application-routing
您要使用的ingress.class
是 Azure AKS 所特有的,因此绝对不能在 GKE群集上使用它。
请注意,如果要使用默认的 GKE入口控制器-ingress-gce,则可以完全省略kubernetes.io/ingress.class
注释。
我在GKE集群上对其进行了测试,并且没有上面提到的注释,就可以正常工作。
关于您的特定设置,我注意到了另一个问题,即您的nodeapp[1-3]svc
Services
类型为ClusterIP
,它们必须为NodePort
或{{ 1}}。
如果您运行:
LoadBalancer
并查看kubectl describe ingress http-ingress
部分,您可能会遇到以下错误消息:
events
摘要:
loadbalancer-controller error while evaluating the ingress spec: service "default/nodeapp1svc" is type "ClusterIP", expected "NodePort" or "LoadBalancer"
,即完全省略此注释,将使用默认的入口控制器。ingress.class
而不是NodePort
公开。