入口控制器不显示外部IP

时间:2020-06-15 06:29:37

标签: google-cloud-platform cloud google-kubernetes-engine nginx-ingress

我一直试图在Google kubernetes Engine上创建kubernetes集群。我的Pod成功运行,但是问题出在入口控制器上。入口控制程序未显示用于访问该应用程序的外部IP。

enter image description here

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

接下来我该怎么办?

1 个答案:

答案 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

摘要:

  1. 使用正确的loadbalancer-controller error while evaluating the ingress spec: service "default/nodeapp1svc" is type "ClusterIP", expected "NodePort" or "LoadBalancer" ,即完全省略此注释,将使用默认的入口控制器。
  2. 确保您的后端通过ingress.class而不是NodePort公开。