Мне удалось использовать Managedcertificate
с ресурсом GKE Ingress
.
Позвольте мне подробнее остановиться на этом:
Шаги для воспроизведения:
- Создать IP-адрес с помощью
gcloud
- Обновление записи DNS
- Создание развертывания
- Создание службы
- Создание сертификата
- Создание ресурса Ingress
Создайте IP-адрес с помощью gcloud
. Вызовите нижеприведенную команду для создания стати c IP-адрес:
$ gcloud compute addresses create example-address --global
Проверьте вновь созданный IP-адрес с помощью следующей команды:
$ gcloud compute addresses describe example-address --global
Обновите запись DNS
Go до GCP
-> Network Services
-> Cloud DNS
.
Измените свою зону с помощью A record
с тем же адресом, который был создан выше.
Подождите, пока оно не будет применено.
Проверьте с помощью $ nslookup DOMAIN.NAME
, указывает ли запись на соответствующий адрес.
Создайте развертывание
Ниже приведен пример развертывания, которое ответит на traffi c:
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello
spec:
selector:
matchLabels:
app: hello
version: 1.0.0
replicas: 3
template:
metadata:
labels:
app: hello
version: 1.0.0
spec:
containers:
- name: hello
image: "gcr.io/google-samples/hello-app:1.0"
env:
- name: "PORT"
value: "50001"
Примените его с помощью команды $ kubectl apply -f FILE_NAME.yaml
Вы можете изменить это развертывание в соответствии с вашим приложением, но помните о портах, на которые будет реагировать ваше приложение.
Создать службу
Использовать NodePort
так же, как в приведенной ссылке:
apiVersion: v1
kind: Service
metadata:
name: hello-service
spec:
type: NodePort
selector:
app: hello
version: 1.0.0
ports:
- name: hello-port
protocol: TCP
port: 50001
targetPort: 50001
Применить его с помощью команды $ kubectl apply -f FILE_NAME.yaml
Создание сертификата
Как показано в руководстве, вы можете использовать приведенный ниже пример для создания ManagedCertificate
:
apiVersion: networking.gke.io/v1beta1
kind: ManagedCertificate
metadata:
name: example-certificate
spec:
domains:
- DOMAIN.NAME
Применить его с помощью команды $ kubectl apply -f FILE_NAME.yaml
Статус FAILED_NOT_VISIBLE
указывает, что подготовка домена не удалась для домена из-за проблемы с DNS или конфигурации балансировки нагрузки. Убедитесь, что DNS настроен так, что домен сертификата разрешается в IP-адрес балансировщика нагрузки. - Документация Google Cloud
На создание этого сертификата должна повлиять запись DNS, которую вы предоставили ранее.
Создание ресурса Ingress
Ниже приведен пример ресурса Ingress
, который будет использовать ManagedCertificate
:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
kubernetes.io/ingress.global-static-ip-name: example-address
networking.gke.io/managed-certificates: example-certificate
spec:
rules:
- host: DOMAIN.NAME
http:
paths:
- path: /
backend:
serviceName: hello-service
servicePort: hello-port
Применить его с помощью команды $ kubectl apply -f FILE_NAME.yaml
Потребовалось около 20-25 минут, чтобы все заработало.