首页 > 解决方案 > GKE SSL 代理 NEG 运行状况检查不适用于基于 TCP 的服务

问题描述

我有一个StatefulSetejabberd3副本。我使用以下声明将它们暴露给 GCP NEG:

apiVersion: v1
kind: Service
metadata:
name: ejabberd
annotations:
  cloud.google.com/neg: '{"exposed_ports": {"5222":{"name": "ejabberd-xmpp-production-neg"}, "5443":{"name": "ejabberd-http-production-neg"}}}'
spec:
  type: ClusterIP
  clusterIP: None
  selector:
    app: ejabberd
  ports:
    - protocol: TCP
      name: xmpp
      port: 5222
      targetPort: 5222
    - protocol: TCP
      name: http
      port: 5443
      targetPort: 5443

运行状况检查是端口 5443 上的 HTTP 端点,它在 path 处返回 HTTP 200 (OK) 状态代码/

问题是,当我创建SSL 代理时,健康检查总是失败,但是当我 ssh 进入 Pod 并执行时,$ curl localhost:5443/我得到了成功响应。TCP 健康检查也不起作用。

标签: google-cloud-platformgoogle-kubernetes-enginegcp-load-balancer

解决方案


该问题是由云负载均衡器无法访问端口引起的。我通过创建允许负载均衡器访问指定端口的防火墙规则来修复它。

这是通过运行以下命令实现的:

gcloud compute firewall-rules create fw-allow-health-check-and-proxy \
  --network=NETWORK_NAME \
  --action=allow \
  --direction=ingress \
  --target-tags=GKE_NODE_NETWORK_TAGS \
  --source-ranges=130.211.0.0/22,35.191.0.0/16 \
  --rules=tcp:5443,tcp:5222

可以在此处找到更多信息将外部 HTTP(S) 负载平衡器附加到独立 NEG


推荐阅读