首页 > 解决方案 > 入口控制器不显示外部 IP

问题描述

我一直在尝试在 Google Kubernetes 引擎上创建一个 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

接下来我能做什么?

标签: google-cloud-platformcloudgoogle-kubernetes-enginenginx-ingress

解决方案


看起来问题与您的有关annotations,特别是与此有关:

kubernetes.io/ingress.class: addon-http-application-routing

ingress.class您尝试使用的是特定于Azure AKS的东西,因此绝对不能在GKE Cluster上使用它。

请注意,kubernetes.io/ingress.class如果您希望使用默认的GKE Ingress 控制器- ingress-gce,则可以完全省略注释。

我在我的 GKE 集群上测试了它,没有上面提到的注释它工作得很好。

至于您的具体设置,我注意到另一个问题,即您nodeapp[1-3]svc Services属于一种类型ClusterIP,它们必须是NodePortor 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"

概括:

  1. 使用正确的,ingress.class即完全省略此注释,将使用默认入口控制器。
  2. 确保您的后端通过NodePort而不是ClusterIP.

推荐阅读