Как исправить нездоровые бэкенд-сервисы? - PullRequest
2 голосов
/ 06 мая 2019

У меня есть кластер kubernetes, размещенный в Google Cloud, несколько развертываний + сервисы и вход (gce).Службы, развертывания и модули работают и работают, однако вход указывает на нездоровый статус почти для всех серверных служб (ingress.kubernetes.io/backends): кажется, он создает N + 1 серверных служб (N = количество служб или развертываний)и только один здоров.

Существуют датчики жизнеспособности и готовности, и они работают нормально (службы указывают состояние готовности и исправности и 0 перезапусков).Добавлен обработчик root со статусом 200 OK (on / path).Тип услуг - NodePort.Порт и целевой порт - 443. Сертификат TLS работает и подключен к входу.

Я ожидаю, что все службы должны быть исправны.

Ниже приведен пример конфигурации YAML

apiVersion: apps/v1
kind: Deployment
metadata:
  name: dummy-service
  labels:
    app: dummy-app
spec:
  selector:
    matchLabels:
      app: dummy-app
  template:
    metadata:
      labels:
        app: dummy-app
    spec:
      containers:
      - name: dummy-service
        image: xx.gcr.io/dummy-project/dummy-service:latest
        resources:
          limits:
            memory: "128Mi"
            cpu: "100m"
        ports:
        - containerPort: 443
        livenessProbe:
          httpGet:
            path: /health
            port: 443
          initialDelaySeconds: 90
          periodSeconds: 60
        readinessProbe:
          httpGet:
            path: /health
            port: 443
          initialDelaySeconds: 90
          periodSeconds: 60
        env:
        - name: ASPNETCORE_ENVIRONMENT
          value: Production
        - name: ASPNETCORE_URLS
          value: https://*:443;http://*:80
        - name: ASPNETCORE_Kestrel__Certificates__Default__Password
          value: ""
        - name: ASPNETCORE_Kestrel__Certificates__Default__Path
          value: dummy_tls_certificate.pfx

# There are several deployments with the same configuration
# Only name different

---

apiVersion: v1
kind: Service
metadata:
  name: dummy-service
spec:
  selector:
    app: dummy-app
  ports:
  - port: 443
  type: NodePort

# There are several services with the same configuration
# Only name different

---

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: www
  annotations:
    external-dns.alpha.kubernetes.io/hostname: "my-dummy-hostname.com"
    ingress.kubernetes.io/add-base-url: "true"
    kubernetes.io/ingress.class: "gce"
    kubernetes.io/ingress.global-static-ip-name: "dummy-static-ip-address-name"
spec:
  tls:
  - hosts:
    - my-dummy-hostname.com
    secretName: dummy-tls-secret
  rules:
  - host: my-dummy-hostname.com
    http:
      paths:
      - path: /api/dummy
        backend:
          serviceName: dummy-service
          servicePort: 443
      # Example of other service
      - path: /api/yet_another_dummy
        backend:
          serviceName: yet-another-dummy-service
          servicePort: 443

1 Ответ

1 голос
/ 14 мая 2019

Кажется, что-то странное было с TLS, серверная служба пытается проверить работоспособность из «контекста локального хоста», и сертификат подписывается для конкретного доменного имени.Также мне пришлось изменить servicePort на 80, чтобы он работал (HTTPS-соединение все еще существует).

...