无法访问 GKE LoadBalancer 外部 IP 地址

GKE LoadBalancer External IP address cannot be reached

我使用 Ansible 将我的容器化应用程序部署到 google kubernetes 引擎。

我使用部署为应用程序创建了一个 pod,我还将 containerPort 指定为 8080。这似乎工作正常。

- name: Create k8s pod for nginx
  kubernetes.core.k8s:
    state: present
    definition:
      apiVersion: v1
      kind: Deployment
      metadata:
        name: "{{ app }}"
        namespace: "{{ namespace }}"
        labels:
          app: "{{ app }}"
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: "{{ app }}"
        template:
          metadata:
            labels:
              app: "{{ app }}"
          spec:
            containers:
              - name: hello-dashboard
                image: "{{ image_name }}"
                # This app listens on port 8080 for web traffic by default.
                ports:
                  - containerPort: 8080
                env:
                  - name: PORT
                    value: "8080"

跟踪部署

kubectl get deployments --namespace=nginx

显示部署已就绪且可用

NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   1/1     1            1           34m

正在检查部署创建的 pods

kubectl get pods --namespace=nginx

这也表明 pod 已创建

NAME                    READY   STATUS    RESTARTS   AGE
nginx-cb894bfc5-trnrk   1/1     Running   0          33m

现在,当我检查 LoadBalancer 服务时

kubectl get services --namespace=nginx

该服务也已创建并分配了一个外部 IP

NAME    TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)        AGE
nginx   LoadBalancer   10.99.240.181   35.242.130.109   80:31005/TCP   33m

但问题是我无法使用 LoadBalancer 的外部 IP 访问部署的应用程序,浏览器告诉我它无法访问。

我认为容器中的应用程序 运行 port_no 等端口与服务 (service.yaml) 端口和目标端口配置不匹配

这很可能是您的 Kubernetes 服务或部署的问题。 GKE 将自动提供映射到服务资源的端口所需的防火墙规则。

确保您在 Service and mapped it to a valid port on your Deployment's Pods. Also note, that the firewall 上公开了正确的端口,因为它是接受来自负载均衡器的流量的端口 31005(节点端口)。

确保允许传入流量如下:

  1. 从 Internet 到 TCP 端口 8080 上的负载平衡器。

  2. 从负载均衡器到 TCP 端口 31005 上的所有 Kubernetes 节点。