我遇到了一个问题:
尝试使用容器本机负载平衡 (CNLB) 时,对在 IIS 容器中运行的 .Net 应用程序进行运行状况检查以成功。
我有一个由 GKE 中的入口资源定义和 VPC 原生集群创建的网络端点组 (NEG)。
当我通过暴露 NodePort 或提供 LoadBalancer 类型的服务来规避 CNLB 时,该站点可以毫无问题地解决。
描述中的所有吊舱条件看起来都不错: 吊舱准备就绪
运行时出现网络端点describe endpoints
:就绪地址
这是负载均衡器生成的运行状况检查:GCP 运行状况检查
当从同一 VPC 中的其他容器或虚拟机访问这些端点时,/health.htm 以 200 响应。这是来自同一命名空间中的一个容器,尽管我已经使用 Linux 虚拟机复制了这一点,但不是在集群中,而是在同一个VPC:端点响应
但尽管如此,健康检查报告我的 NEG 中的 pod 不健康:不健康的端点
stackdriver 日志确认请求超时,但我不确定为什么端点响应其他实例而不响应 LB:Stackdriver Health Check Log
我确认 GKE 创建了看起来像正确的防火墙规则,应该允许从 LB 到 Pod 的流量:防火墙
这是我正在使用的 YAML:
部署:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: subdomain.domain.tld
name: subdomain-domain-tld
namespace: subdomain-domain-tld
spec:
replicas: 3
selector:
matchLabels:
app: subdomain.domain.tld
template:
metadata:
labels:
app: subdomain.domain.tld
spec:
containers:
- image: gcr.io/ourrepo/ourimage
name: subdomain-domain-tld
ports:
- containerPort: 80
readinessProbe:
httpGet:
path: /health.htm
port: 80
initialDelaySeconds: 60
periodSeconds: 60
timeoutSeconds: 10
volumeMounts:
- mountPath: C:\some-secrets
name: some-secrets
nodeSelector:
kubernetes.io/os: windows
volumes:
- name: some-secrets
secret:
secretName: some-secrets
服务:
apiVersion: v1
kind: Service
metadata:
labels:
app: subdomain.domain.tld
name: subdomain-domain-tld-service
namespace: subdomain-domain-tld
spec:
ports:
- port: 80
targetPort: 80
selector:
app: subdomain.domain.tld
type: NodePort
Ingress 是非常基本的,因为我们在这个站点上不需要多条路由,但是,我怀疑我们在这里遇到的任何问题。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: gce
labels:
app: subdomain.domain.tld
name: subdomain-domain-tld-ingress
namespace: subdomain-domain-tld
spec:
backend:
serviceName: subdomain-domain-tld-service
servicePort: 80
最后一些相关的细节是我尝试了本文档中的步骤并且它有效,但它与我的情况不同,因为它没有使用 Windows Containers 或 Readiness Probes:https ://cloud.google.com/kubernetes-engine/docs/how -to/container-native-load-balancing#using-pod-readiness-feedback
任何建议将不胜感激。我已经花了两天的时间来解决这个问题,我确信这很明显,但我就是看不到问题所在。