問題が発生しています:
Container Native Load Balancing (CNLB) を使用しようとすると、IIS コンテナーで実行されている .Net アプリの正常性チェックが成功する。
VPC ネイティブ クラスタを使用して GKE の Ingress リソース定義によって作成されたネットワーク エンドポイント グループ(NEG)があります。
NodePort を公開するか、タイプ LoadBalancer のサービスを作成して CNLB を回避すると、サイトは問題なく解決されます。
説明からのすべてのポッドの状態は良好に見えます: ポッドの準備
実行時にネットワーク エンドポイントが表示されますdescribe endpoints
:準備完了アドレス
これは、ロード バランサによって生成されるヘルス チェックです: GCP ヘルス チェック
同じ VPC 内の他のコンテナーまたは VM からこれらのエンドポイントをヒットすると、/health.htm は 200 で応答します。これは同じ名前空間内のコンテナーからのものですが、クラスター内ではなく同じ Linux VM でこれを再現しました。 VPC:エンドポイントが応答する
しかし、それにもかかわらず、ヘルス チェックは NEG のポッドが異常であると報告しています:異常なエンドポイント
Stackdriver ログは、リクエストがタイムアウトしていることを確認しますが、エンドポイントが他のインスタンスに応答しているが LB には応答していない理由はわかりません: Stackdriver Health Check Log
そして、GKE が、LB からポッドへのトラフィックを許可する正しいファイアウォール ルールのように見えるものを作成したことを確認しました。
ここに私が取り組んでいる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
このサイトでは複数のルートを実際に必要としないため、イングレスは非常に基本的なものですが、私たちが抱えている問題がここにあるのではないかと疑っています.
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
どんな提案でも大歓迎です。私はこれに2日間立ち往生しましたが、それは明らかだと確信していますが、問題がわかりません。