Поскольку вы используете входной контроллер самого GKE, при создании ресурса Ingress он инициирует создание ресурса Balancer в облачной платформе Google.Обычно SSL-завершение является обязанностью входящего контроллера, поэтому за выполнение SSL-завершения отвечает балансировщик нагрузки GCP.
Это означает, что cert-manager не будет работать в вашем случае, так как сертификаты будут жить вневашего кластера, и трафик будет уже завершен SSL до того, как он попадет в ваш кластер.
К счастью, GCP имеет поддержку самообеспечиваемого SSL (Let's Encrypt).Чтобы воспользоваться этим, вам необходимо выполнить следующие шаги:
Перейти на экран балансировки нагрузки на GCP, переключиться в расширенный вид и перейти на вкладку Сертификаты (или просто нажать здесь ).
Создайте новый сертификат SSL, выбрав «Создать сертификат, управляемый Google».В поле домена укажите точный домен, для которого требуется сертификат SSL.Это должно выглядеть так:
Перейдите на экран
Внешние IP-адреса и зарезервируйте новый статический IP-адрес.Выберите тип, который будет глобальным (на момент написания входной контроллер GCP поддерживает только глобальные IP-адреса).Должно выглядеть так:
Возьмите статический IP-адрес, который вы зарезервировали (в данном примере это
34.95.84.106
)
Перейдите к регистратору вашего домена,и добавьте запись типа A
для вашего домена (запись в SSL-сертификате), чтобы указать статический IP-адрес, который вы выделили.В этом примере это будет my-app.example.com -> 34.95.84.106
.
Наконец, вам нужно отредактировать вход, чтобы поместить 2 аннотации, поэтому он будет подсказывать Ingress Controller Google Cloud использовать зарезервированный статический IP-адрес и созданный вами сертификат.См. Приведенный ниже пример входа:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-ingress-app
annotations:
ingress.gcp.kubernetes.io/pre-shared-cert: my-ssl-certificate # the name of the SSL certificate resource you created
kubernetes.io/ingress.global-static-ip-name: my-static-ip # the name of the static ip resource you created
kubernetes.io/ingress.allow-http: "false" # if you want to block plain http
spec:
rules:
- host: my-app.example.com
http:
paths:
- path: /*
backend:
serviceName: web-balancer-service
servicePort: 8080
Примените его и убедитесь, что изменения отражены, перейдя на экран «Балансировщики нагрузки» в GCP.
Важные примечания:
Если уже существует входной балансировщик нагрузки GCP, созданный входным сервером, изменения, внесенные вами (аннотациями), не будут отражены в существующем балансировщике нагрузки .Поэтому удалите существующий вход, убедитесь, что существующий балансировщик нагрузки исчезает, и создайте вход с правильными аннотациями, чтобы балансировщик нагрузки был настроен правильно.
Для обеспечения Let's Encryptдля работы, ваша запись DNS должна быть на месте.Он проверяет владельца домена с помощью DNS перед выдачей сертификата.Кроме того, первоначальная подготовка может занять некоторое время (до получаса).