Я пытаюсь обновить 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 указывает на Сервис. Служба указывает на набор модулей, имеющих несколько меток. Развертывание определяет эти ярлыки на модулях. Вот список того, что нужно устранять:
Убедитесь, что селектор меток на вашем сервисе совпадает с метками на модулях, которые создает ваше развертывание. В противном случае модули, созданные при развертывании, не будут выбраны для службы, и ваш Ingress не будет ни на что указывать.
Подтвердите, что Сервис представлен как NodePort
. В противном случае внешний балансировщик нагрузки от Google не сможет проникнуть внутрь вашего кластера.
Убедитесь, что модули работают / исправны. Развертывание может быть обновлено, но модули неработоспособны или находятся в цикле сбоя. Важно, чтобы приложение ответило 200
код состояния для GET /
.
Создайте правило брандмауэра для проверок работоспособности:
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, но это может занять некоторое время, в зависимости от параметров проверки работоспособности.