В инструкции описано, как выпустить самоподписанный сертификат в кластере 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> — тестовый домен.
Шаг 1. Создайте Issuer типа self-signed
Создайте файл 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
Шаг 2. Создайте сертификат
Создайте файл 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
Шаг 3. Создайте Deployment и Service для nginx
Создайте файл 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
Шаг 4. Создайте Ingress для nginx с самоподписанным сертификатом
Создайте файл 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
Шаг 5. Проверьте работу
Убедитесь, что создан секрет:
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.
Просмотрите сведения о выпущенном самоподписанном сертификате.
- Перед началом работы
- Шаг 1. Создайте Issuer типа self-signed
- Шаг 2. Создайте сертификат
- Шаг 3. Создайте Deployment и Service для nginx
- Шаг 4. Создайте Ingress для nginx с самоподписанным сертификатом
- Шаг 5. Проверьте работу