[英]Connecting External Service to GCP GKE Kubernetes Cluster with Google's External HTTP(S) Load Balancer
[英]GCP HTTP(S) load balancer ignoring GKE readinessProbe specification
我已经看过这个问题了; AFAIK 我正在那里的答案中做所有事情。
使用 GKE,我为 kubernetes 集群部署了一个基于 GCP HTTP(S) 负载均衡器的入口,该集群包含两个几乎相同的部署:同一应用程序的生产和开发实例。
我在每个 pod 模板上设置了一个专用端口,用于负载均衡器的运行状况检查,这样它们就不会受到来自主 HTTP 端口上根路径的重定向的影响。 但是,运行状况检查始终失败。
从这些文档中,我在部署中添加了一个readinessProbe
参数,负载均衡器似乎完全忽略了该参数。
我已经使用以下(在单独的终端中)验证了:p-ready
(9292;专用运行状况检查端口)上的服务器是否正常运行:
➜ kubectl port-forward deployment/d-an-server p-ready
➜ curl http://localhost:9292/ -D -
HTTP/1.1 200 OK
content-length: 0
date: Wed, 26 Feb 2020 01:21:55 GMT
我错过了什么?
关于以下配置的一些说明:
${...}
变量由构建脚本作为部署的一部分填充。s-an-server-dev
) 几乎是第一个服务(使用它自己的部署)的完全重复,只是在名称和标签上带有-dev
后缀。apiVersion: "apps/v1"
kind: "Deployment"
metadata:
name: "d-an-server"
namespace: "default"
labels:
app: "a-an-server"
spec:
replicas: 1
selector:
matchLabels:
app: "a-an-server"
template:
metadata:
labels:
app: "a-an-server"
spec:
containers:
- name: "c-an-server-app"
image: "gcr.io/${PROJECT_ID}/an-server-app:${SHORT_SHA}"
ports:
- name: "p-http"
containerPort: 8080
- name: "p-ready"
containerPort: 9292
readinessProbe:
httpGet:
path: "/"
port: "p-ready"
initialDelaySeconds: 30
apiVersion: "v1"
kind: "Service"
metadata:
name: "s-an-server"
namespace: "default"
spec:
ports:
- port: 8080
targetPort: "p-http"
protocol: "TCP"
name: "sp-http"
selector:
app: "a-an-server"
type: "NodePort"
apiVersion: "networking.k8s.io/v1beta1"
kind: "Ingress"
metadata:
name: "primary-ingress"
annotations:
kubernetes.io/ingress.global-static-ip-name: "primary-static-ipv4"
networking.gke.io/managed-certificates: "appname-production-cert,appname-development-cert"
spec:
rules:
- host: "appname.example.com"
http:
paths:
- backend:
serviceName: "s-an-server"
servicePort: "sp-http"
- host: "dev.appname.example.com"
http:
paths:
- backend:
serviceName: "s-an-server-dev"
servicePort: "sp-http-dev"
我认为这里发生的事情是 GKE 入口根本没有被告知端口 9292。你指的是入口中的sp-http
,它指的是端口 8080。
您需要确保以下内容:
1.服务的targetPort字段必须指向pod端口的containerPort值或名称。
2.readiness探针必须暴露在与Ingress中指定的servicePort相匹配的端口上。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.