次の構成でイングレスを使用して、GKE で consul ui のロードバランサーを作成しています
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: public-apis
spec:
rules:
- host: consul.example.com
http:
paths:
- path: /ui/
pathType: Prefix
backend:
serviceName: hashicorp-consul-ui
servicePort: http
このサービスhashicorp-consul-ui
は、タイプが clusterIP のサービスです。
また、次の backendConfig を作成しています
apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
name: consul-ui-backendconfig
spec:
healthCheck:
type: HTTP
requestPath: /v1/health/state/failed
port: 80
次の注釈を clusterIP サービスに追加していますhashicorp-consul-ui
'cloud.google.com/backend-config': '{"ports": {"80":"consul-ui-backendconfig"}}'
この backendConfig は、イングレスによって作成されたバックエンド サービスのヘルス チェックを作成します。このエンドポイントは 200 を返します。ただし、ヘルス チェックは失敗し、イングレスは異常な状態になります。
healthCheck でログを有効にしましたが、NEG で次のログを取得しています
healthCheckProbeResult: {
detailedHealthState: "TIMEOUT"
healthCheckProtocol: "HTTP"
healthState: "UNHEALTHY"
ipAddress: "10.24.1.30"
previousDetailedHealthState: "UNKNOWN"
previousHealthState: "UNHEALTHY"
probeCompletionTimestamp: "2021-02-14T03:31:43.337063261Z"
probeRequest: "/v1/health/state/failed"
probeResultText: "HTTP response: , Error: Connection refused"
probeSourceIp: "35.191.9.211"
responseLatency: "0.001265s"
targetIp: "10.24.1.30"
targetPort: 80
}
また、なぜこのログを 1 回だけ取得したのかわからないのですが、これらのログを定期的に取得するべきではないでしょうか?
また、この healthCheck の問題を修正する方法について誰か教えてもらえますか?