所以答案看起来既简单又令人困惑:NEG 是作为正确注释的服务的结果创建的,但该服务随后未被使用。NEG 将使用 Pod 的 IP 地址定义(这仅适用于启用 IP 别名的集群)。对我来说,任何根据服务规范设置负载均衡器和后端服务的尝试都失败了。如果您将服务视为发布工具,它将起作用,但不要尝试重新映射端口。
所以你应该:
- 根据需要使用端口设置 Pod/Deployment
- 使用注解定义服务,但保持端口相等:
apiVersion: v1
kind: Service
metadata:
name: hello-kube
annotations:
cloud.google.com/neg: '{"exposed_ports": {"80":{}}}'
spec:
type: ClusterIP
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
selector:
app: hello-kube
这将为您提供一个 NEG,您可以将其添加到后端服务,但如果您没有创建正确的运行状况检查,您仍然可能会混淆。其实最简单的方法是:
gcloud compute health-checks create http http-basic-check --use-serving-port
这将为您提供一个通用的 HTTP 健康检查,这取决于 NEG/Instance Group 来指定端口。然后像这样创建后端服务:
gcloud compute backend-services create magic-backend --protocol HTTP --health-checks http-basic-check --global
您可以立即将此后端服务添加到您的 LoadBalancer,并且不会改变。需要根据您的服务部署添加/删除 NEG。NEG 将自动获取 Pod 更新(扩展、迁移等)。您可以使用“AutoNEG 控制器”(请参阅 https://github.com/GoogleCloudPlatform/gke-autoneg-controller)自动将 NEG 添加/删除到后端服务。在上面的示例中,这意味着您需要添加注释(在安装控制器之后):
apiVersion: v1
kind: Service
metadata:
name: hello-kube
annotations:
cloud.google.com/neg: '{"exposed_ports": {"80":{}}}'
anthos.cft.dev/autoneg: '{"name":"magic-backend", "max_rate_per_endpoint":1000}'
spec:
type: ClusterIP
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
selector:
app: hello-kube