В инструкции описано, как выпустить самоподписанный сертификат в кластере Managed Kubernetes с помощью cert-manager для тестового домена и использовать такой сертификат для приложения, развернутого в кластере Managed Kubernetes.
Создайте кластер Managed Kubernetes и группу узлов.
В кластер установите плагины cert-manager и Ingress Nginx.
Проверьте, что cert-manager установлен корректно:
kubectl get pods -n cert-manager
Все поды должны быть в статусе «Running».
Проверьте, что внешний IP назначен:
kubectl get service -n ingress
Добавьте запись в /etc/hosts на вашей машине:
<external-ip-ingress-nginx> <test-domain>
Где:
<external-ip-ingress-nginx> — внешний IP вашего ingress-nginx-контроллера;
<test-domain> — тестовый домен.
Создайте файл cloudru-issuer-selfsigned.yaml и сохраните следующий манифест:
apiVersion: cert-manager.io/v1kind: Issuermetadata:name: cloudru-selfsigned-issuerspec:selfSigned: {}
В терминале или PowerShell выполните команду:
kubectl apply -f cloudru-issuer-selfsigned.yaml
Результат:
issuer.cert-manager.io/cloudru-selfsigned-issuer created
Создайте файл cloudru-certificate.yaml и сохраните следующий манифест:
apiVersion: cert-manager.io/v1kind: Certificatemetadata:name: nginx-demo-certspec:secretName: nginx-demo-tlscommonName: <test-domain>dnsNames:- <test-domain>issuerRef:name: cloudru-selfsigned-issuerkind: IssuerprivateKey:rotationPolicy: Always
Где <test-domain> — тестовый домен, для которого будет выпущен сертификат.
В терминале или PowerShell выполните команду:
kubectl apply -f cloudru-certificate.yaml
Результат:
certificate.cert-manager.io/nginx-demo-cert created
Создайте файл cloudru-nginx-app.yaml и сохраните следующий манифест:
apiVersion: apps/v1kind: Deploymentmetadata:name: cloudru-nginx-demolabels:app: cloudru-nginx-demospec:replicas: 1selector:matchLabels:app: cloudru-nginx-demotemplate:metadata:labels:app: cloudru-nginx-demospec:containers:- name: nginximage: emk8s.cr.cloud.ru/nginxports:- containerPort: 80---apiVersion: v1kind: Servicemetadata:name: cloudru-nginx-demospec:selector:app: cloudru-nginx-demoports:- port: 80targetPort: 80
В терминале или PowerShell выполните команду:
kubectl apply -f cloudru-nginx-app.yaml
Результат:
deployment.apps/cloudru-nginx-demo createdservice/cloudru-nginx-demo created
Создайте файл cloudru-nginx-ingress.yaml и сохраните следующий манифест:
apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: cloudru-nginx-ingressspec:ingressClassName: nginxtls:- hosts:- <test-domain>secretName: nginx-demo-tlsrules:- host: <test-domain>http:paths:- path: /pathType: Prefixbackend:service:name: cloudru-nginx-demoport:number: 80
Где <test-domain> — тестовый домен, для которого будет выпущен сертификат.
В терминале или PowerShell выполните команду:
kubectl apply -f cloudru-nginx-ingress.yaml
Убедитесь, что создан секрет:
kubectl get secret nginx-demo-tls
Результат:
NAME TYPE DATA AGEnginx-demo-tls kubernetes.io/tls 3 3m15s
Проверьте статус сертификата:
kubectl get certificate nginx-demo-cert
Результат:
NAME READY SECRET AGEnginx-demo-cert True nginx-demo-tls 4m54s
В браузере зайдите по адресу https://<your-domain>. Должна отобразится начальная страница веб-сервера nginx.
Просмотрите сведения о выпущенном самоподписанном сертификате.