Назад | Перейти на главную страницу

Kubernetes: обновление образа развертывания с помощью TLS Ingress-ресурса

Я пытаюсь обновить image для моего развертывания. К этому я выполняю kubectl edit deployment web и меняю spec.template.spec.containers.image недвижимость от:

gcr.io/my-project-id-1234/app:v1

Кому:

gcr.io/my-project-id-1234/app:v2

Из журналов я знаю, что обновления развертывания в порядке. У меня проблема с входом TLS; вот моя конфигурация:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: tls-ingress
spec:
  tls:
    - secretName: tls-secrets
  backend:
    serviceName: web
    servicePort: 80

И вот результат kubectl describe ing web до обновления:

$ kubectl describe ing                                                                                                                                                          
Name:                   tls-ingress
Namespace:              default
Address:                105.78.154.212
Default backend:        web:80 (10.0.2.3:8000)
TLS:
  tls-secrets terminates 
Rules:
  Host  Path    Backends
  ----  ----    --------
Annotations:
  backends:                     {"k8s-be-32171":"HEALTHY"}
  forwarding-rule:              k8s-fw-default-tls-ingress
  https-forwarding-rule:        k8s-fws-default-tls-ingress
  https-target-proxy:           k8s-tps-default-tls-ingress
  static-ip:                    k8s-fw-default-tls-ingress
  target-proxy:                 k8s-tp-default-tls-ingress
  url-map:                      k8s-um-default-tls-ingress

До обновления все работает исправно. Но вскоре трафик перестает успешно направляться в мой кластер. Описание входа теперь возвращается:

Name:                   tls-ingress
Namespace:              default
Address:                105.78.154.212
Default backend:        web:80 (10.0.2.3:8000)
TLS:
  tls-secrets terminates 
Rules:
  Host  Path    Backends
  ----  ----    --------
Annotations:
  static-ip:                    k8s-fw-default-tls-ingress
  target-proxy:                 k8s-tp-default-tls-ingress
  url-map:                      k8s-um-default-tls-ingress
  backends:                     {"k8s-be-32171":"UNHEALTHY"}
  forwarding-rule:              k8s-fw-default-tls-ingress
  https-forwarding-rule:        k8s-fws-default-tls-ingress
  https-target-proxy:           k8s-tps-default-tls-ingress

Как правильно обновить Ingress при таком обновлении развертывания?

Ingress указывает на Сервис. Служба указывает на набор модулей, имеющих несколько меток. Развертывание определяет эти ярлыки на модулях. Вот список того, что нужно устранять:

  1. Убедитесь, что селектор меток на вашем сервисе совпадает с метками на модулях, которые создает ваше развертывание. В противном случае модули, созданные при развертывании, не будут выбраны для службы, и ваш Ingress не будет ни на что указывать.

  2. Подтвердите, что Сервис представлен как NodePort. В противном случае внешний балансировщик нагрузки от Google не сможет проникнуть внутрь вашего кластера.

  3. Убедитесь, что модули работают / исправны. Развертывание может быть обновлено, но модули неработоспособны или находятся в цикле сбоя. Важно, чтобы приложение ответило 200 код состояния для GET /.

  4. Создайте правило брандмауэра для проверок работоспособности:

    gcloud compute firewall-rules create allow-130-211-0-0-22 \
      --source-ranges 130.211.0.0/22 \
      --allow tcp:30000-32767
    

Входной сигнал сообщает {"k8s-be-32171": "UNHEALTHY"}, что указывает на то, что проверка работоспособности на серверной службе не удалась.

Убедитесь, что модули приложений запущены и работают, проверьте с помощью

kubectl get pods <pod-name>

и

kubectl get deployment <deplyment-name>

Если модули приложений готовы и работают, вход должен автоматически подключаться к новым модулям rs, но это может занять некоторое время, в зависимости от параметров проверки работоспособности.