GKE SSL 代理 NEG 运行状况检查不适用于基于 TCP 的服务

问题描述

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

3

运行状况检查是端口 5443 处的 HTTP 端点,它在路径 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 处返回 HTTP 200 (OK) 状态代码

问题是,当我创建 SSL Proxy 时,运行状况检查总是失败,但是当我通过 ssh 进入 pod 并执行 / 时,我得到了成功响应。 TCP 运行状况检查也不起作用。

解决方法

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

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

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

可以在此处找到更多信息Attaching an external HTTP(S) load balancer to standalone NEGs

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...