Я новичок в вещах K8s, и теперь столкнулся с проблемой, что я не могу настроить проверку работоспособности на входе/балансировщике нагрузки Google Cloud. В man-центре hazelcast есть проверка работоспособности на порту 8081, но рабочий порт — 8080. Когда я развертываю приложение в GKE, проверки работоспособности выполняются на рабочем nodePort, который ссылается на рабочий порт (8080). В документации здесь и здесь сказано, что мне нужно добавить пользовательский BackendConfig и настроить в сервисе проверку работоспособности nodePort, которая ссылается на порт проверки работоспособности приложения (8081). Я так и сделал, но это не отменяет проверку работоспособности по умолчанию на рабочем порту. Так что это не удается.
Это мои файлы yaml:
hazelcast-mc-backend-config.yaml
apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
name: hazelcast-mc-backend-config
spec:
healthCheck:
checkIntervalSec: 60
timeoutSec: 60
healthyThreshold: 1
unhealthyThreshold: 10
type: HTTP2
requestPath: /hazelcast-mc/health
port: 31111
timeoutSec: 86400
connectionDraining:
drainingTimeoutSec: 30
customRequestHeaders:
headers:
- "X-Client-Region:{client_region}"
- "X-Client-City:{client_city}"
- "X-Origin-Request-Header:{origin_request_header}"
- "X-TLS-Version:{tls_version}"
hazelcast-mc-service.yaml
apiVersion: v1
kind: Service
metadata:
annotations:
cloud.google.com/backend-config: '{"ports": {"8081":"hazelcast-mc-backend-config"}}'
cloud.google.com/app-protocols: '{"hazelcast-management-center":"HTTP2"}'
name: hazelcast-management-center
spec:
ports:
- name: hazelcast-management-center
port: 443
targetPort: 8080
- name: hazelcast-management-center-health
port: 8081
targetPort: 8081
nodePort: 31111
selector:
app: hazelcast-management-center
tier: backend
type: NodePort
hazelcast-mc-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: hazelcast-management-center
labels:
app: hazelcast-management-center
tier: backend
spec:
replicas: 1
selector:
matchLabels:
app: hazelcast-management-center
strategy:
rollingUpdate:
maxSurge: 3
maxUnavailable: 50%
type: RollingUpdate
template:
metadata:
labels:
app: hazelcast-management-center
tier: backend
spec:
containers:
- name: hazelcast-management-center
image: hazelcast/management-center:5.1.3
imagePullPolicy: "Always"
securityContext:
runAsUser: 2 # non-root user
allowPrivilegeEscalation: false
resources:
requests:
memory: 128Mi
cpu: 20m
limits:
memory: 256Mi
cpu: 200m
env:
- name: MC_ADMIN_USER
value: admin
- name: MC_ADMIN_PASSWORD
value: random
- name: MC_CONTEXT_PATH
value: /hazelcast-mc
- name: MC_HEALTH_CHECK_ENABLE
value: "true"
ports:
- name: mancenter
containerPort: 8080
- name: health
containerPort: 8081
livenessProbe:
httpGet:
path: /hazelcast-mc/health
port: 8081
initialDelaySeconds: 45
periodSeconds: 10
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 10
readinessProbe:
httpGet:
path: /hazelcast-mc/health
port: 8081
initialDelaySeconds: 45
periodSeconds: 10
timeoutSeconds: 1
successThreshold: 1
failureThreshold: 3
Что я сделал не так ?





Проблема была решена путем настройки Backendconfig в качестве конфигурации по умолчанию для службы. Проверка работоспособности для внешнего балансировщика нагрузки использует nodePort, поэтому мне пришлось указать его.
apiVersion: v1
kind: Service
metadata:
annotations:
cloud.google.com/backend-config: '{"default": "hazelcast-mc-backend-config"}'
name: hazelcast-management-center
spec:
ports:
- name: hazelcast-management-center
port: 80
targetPort: 8080
- name: hazelcast-management-health
port: 8081
targetPort: 8081
nodePort: 31111
selector:
app: hazelcast-management-center
tier: backend
type: NodePort