我正在尝试启动一个接受4个不同端口中的连接的第三方服务:
x-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: x-deployment
labels:
app: x
...
ports:
- containerPort: 8000 # HttpGraphQLServer
- containerPort: 8001 # WebSocketServer
- containerPort: 8020 # JsonRpcServer
- containerPort: 8030 # HttpIndexingServer
livenessProbe:
tcpSocket:
port: 8020
x-service.yaml
apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
name: x-rpc-config
spec:
healthCheck:
checkIntervalSec: 7
timeoutSec: 3
healthyThreshold: 2
unhealthyThreshold: 2
type: HTTP2
port: 8020
---
apiVersion: v1
kind: Service
metadata:
name: x-service
annotations:
beta.cloud.google.com/backend-config: '{"default": "x-rpc-config"}'
spec:
selector:
app: x
ports:
- name: graphql
port: 8000
targetPort: 8000
- name: subscription
port: 8001
targetPort: 8001
- name: indexing
port: 8030
targetPort: 8030
- name: jrpc
port: 8020
targetPort: 8020
type: NodePort
ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: backend-ingress
annotations:
kubernetes.io/ingress.global-static-ip-name: backend-dev-ip-address
networking.gke.io/managed-certificates: backend-certificate
spec:
rules:
- host: x.dev.domain.io
http:
paths:
- path: /rpc
backend:
serviceName: x-service
servicePort: 8020
- path: /idx
backend:
serviceName: x-service
servicePort: 8030
- path: /ws
backend:
serviceName: x-service
servicePort: 8001
- path: /*
backend:
serviceName: x-service
servicePort: 8000
默认情况下,GKE LoadBalancer在HTTP:80上运行运行状况检查,如果我在没有BackendConfig(x-service.yaml
)的情况下启动了后端服务(x-rpc-config
),则只能检测到2健康的后端服务,都具有HTTP端口:8000和8030)。但是,后端服务侦听端口:8020(RPC)和8030(WS)被认为不正常。我相信它是由于协议类型而发生的,所以我创建了BackendConfig(x-rpc-config
)来运行TPC运行状况检查,而使用HTTP2协议为端口8020 -这是livenessProbe指向的地方。 >
已正确创建Pod和服务,但是Load Balancer仍无法将它们检测为运行状况良好的服务。控制台仅显示以下警告:
某些后端服务处于不健康状态
目标是打开端口8020(RPC),但也保持8000(HTTP)工作。可能吗?我是否需要另一种类型的负载均衡器还是仅仅是配置问题?
我找不到同一服务下具有不同协议的多个端口的HealthCheck配置的任何示例。可能是反模式吗?
谢谢。
答案 0 :(得分:1)
解决方案
我没有使用Ingress
(默认情况下会在GCP上启动HTTP/HTTPs Load Balancer
),而是将Service
更改为使用自定义{ {1}}运行状况检查配置。默认情况下,此配置将在GCP上加速LoadBalancer
。例如:
HTTP2
下一步是为TCP LB启用SSL。我看到GCP具有SSL Proxy LB,也许可以解决它。只是需要找出正确的配置,我在他们的文档中找不到它。