无法访问 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(节点端口)。
确保允许传入流量如下:
从 Internet 到 TCP 端口 8080 上的负载平衡器。
从负载均衡器到 TCP 端口 31005 上的所有 Kubernetes 节点。
我使用 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(节点端口)。
确保允许传入流量如下:
从 Internet 到 TCP 端口 8080 上的负载平衡器。
从负载均衡器到 TCP 端口 31005 上的所有 Kubernetes 节点。