我有一个带有服务的简单“ Hello world”部署:
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: 8080
selector:
app: hello-kube
部署工作正常,并且创建了NEG,但是当我在Web控制台中签入时,实际端点(正确使用虚拟Pod IP地址)显示为不正常。当我使用交互式“ ubuntu”吊舱检查时,我可以卷曲而不会出现问题。另外,如果我尝试在网络中使用VM(与群集处于同一VPC),则会出现“ Hello world!”。
我确实添加了防火墙规则以允许运行状况检查,但是该规则自然会提及群集节点的标记,或者类似“此网络上的所有节点”之类的内容。但是,别名IP是否也在网络上?是因为我无法添加允许网络流量访问虚拟IP的规则而导致健康检查失败?
此刻我无法让NEG为我工作...有人有想法吗?
伯特·拉弗曼
答案 0 :(得分:1)
因此,答案显得既简单又令人困惑:NEG是由于正确注释服务而创建的,但随后未使用该服务。将使用Pod的IP地址定义NEG(这仅适用于启用了IP别名的群集)。对我而言,根据服务规范设置负载平衡器和后端服务的任何尝试均失败。如果您将该服务视为发布的载体,那么它将起作用,但不要尝试重新映射端口。
所以您应该:
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 /实例组来指定端口。然后像这样创建后端服务:
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