【问题标题】:GKE LoadBalancer External IP address cannot be reached无法访问 GKE LoadBalancer 外部 IP 地址
【发布时间】:2021-10-14 02:19:27
【问题描述】:

我使用 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

检查部署创建的 pod

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 访问已部署的应用程序,浏览器告诉我无法访问它。

【问题讨论】:

  • 似乎firewall rules 应用不正确。检查您的防火墙规则,并确保将防火墙应用于端口 31005(nodePort),因为这是接受来自负载均衡器的流量的端口。

标签: ansible google-kubernetes-engine gke-networking


【解决方案1】:

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

确保您在 Service 上公开了正确的端口,并将其映射到 Deployment 的 Pod 上的有效端口。另请注意,所需的 firewall 用于端口 31005(nodePort),因为这是接受来自负载平衡器的流量的端口。

确保您允许传入流量如下:

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

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

【讨论】:

    【解决方案2】:

    我认为端口存在一些不匹配,例如在容器内运行 port_no 的应用程序与服务(service.yaml)端口和目标端口配置

    【讨论】:

      猜你喜欢
      • 2021-01-10
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 2018-09-29
      • 2021-01-10
      • 1970-01-01
      • 2020-04-23
      • 2014-08-22
      相关资源
      最近更新 更多