Evolution
Тема интерфейса

Выпустить самоподписанный сертификат с помощью cert-manager

В инструкции описано, как выпустить самоподписанный сертификат в кластере Managed Kubernetes с помощью cert-manager для тестового домена и использовать такой сертификат для приложения, развернутого в кластере Managed Kubernetes.

Перед началом работы

  1. В кластер установите плагины cert-manager и Ingress Nginx.

  2. Проверьте, что cert-manager установлен корректно:

    kubectl get pods -n cert-manager

    Все поды должны быть в статусе «Running».

  3. Проверьте, что внешний IP назначен:

    kubectl get service -n ingress
  4. Добавьте запись в /etc/hosts на вашей машине:

    <external-ip-ingress-nginx> <test-domain>

    Где:

    • <external-ip-ingress-nginx> — внешний IP вашего ingress-nginx-контроллера;

    • <test-domain> — тестовый домен.

Шаг 1. Создайте Issuer типа self-signed

  1. Создайте файл cloudru-issuer-selfsigned.yaml и сохраните следующий манифест:

    apiVersion: cert-manager.io/v1
    kind: Issuer
    metadata:
    name: cloudru-selfsigned-issuer
    spec:
    selfSigned: {}
  2. В терминале или PowerShell выполните команду:

    kubectl apply -f cloudru-issuer-selfsigned.yaml

    Результат:

    issuer.cert-manager.io/cloudru-selfsigned-issuer created

Шаг 2. Создайте сертификат

  1. Создайте файл cloudru-certificate.yaml и сохраните следующий манифест:

    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
    name: nginx-demo-cert
    spec:
    secretName: nginx-demo-tls
    commonName: <test-domain>
    dnsNames:
    - <test-domain>
    issuerRef:
    name: cloudru-selfsigned-issuer
    kind: Issuer
    privateKey:
    rotationPolicy: Always

    Где <test-domain> — тестовый домен, для которого будет выпущен сертификат.

  2. В терминале или PowerShell выполните команду:

    kubectl apply -f cloudru-certificate.yaml

    Результат:

    certificate.cert-manager.io/nginx-demo-cert created

Шаг 3. Создайте Deployment и Service для nginx

  1. Создайте файл cloudru-nginx-app.yaml и сохраните следующий манифест:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: cloudru-nginx-demo
    labels:
    app: cloudru-nginx-demo
    spec:
    replicas: 1
    selector:
    matchLabels:
    app: cloudru-nginx-demo
    template:
    metadata:
    labels:
    app: cloudru-nginx-demo
    spec:
    containers:
    - name: nginx
    image: emk8s.cr.cloud.ru/nginx
    ports:
    - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
    name: cloudru-nginx-demo
    spec:
    selector:
    app: cloudru-nginx-demo
    ports:
    - port: 80
    targetPort: 80
  2. В терминале или PowerShell выполните команду:

    kubectl apply -f cloudru-nginx-app.yaml

    Результат:

    deployment.apps/cloudru-nginx-demo created
    service/cloudru-nginx-demo created

Шаг 4. Создайте Ingress для nginx с самоподписанным сертификатом

  1. Создайте файл cloudru-nginx-ingress.yaml и сохраните следующий манифест:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
    name: cloudru-nginx-ingress
    spec:
    ingressClassName: nginx
    tls:
    - hosts:
    - <test-domain>
    secretName: nginx-demo-tls
    rules:
    - host: <test-domain>
    http:
    paths:
    - path: /
    pathType: Prefix
    backend:
    service:
    name: cloudru-nginx-demo
    port:
    number: 80

    Где <test-domain> — тестовый домен, для которого будет выпущен сертификат.

  2. В терминале или PowerShell выполните команду:

    kubectl apply -f cloudru-nginx-ingress.yaml

Шаг 5. Проверьте работу

  1. Убедитесь, что создан секрет:

    kubectl get secret nginx-demo-tls

    Результат:

    NAME TYPE DATA AGE
    nginx-demo-tls kubernetes.io/tls 3 3m15s
  2. Проверьте статус сертификата:

    kubectl get certificate nginx-demo-cert

    Результат:

    NAME READY SECRET AGE
    nginx-demo-cert True nginx-demo-tls 4m54s
  3. В браузере зайдите по адресу https://<your-domain>. Должна отобразится начальная страница веб-сервера nginx.

    Просмотрите сведения о выпущенном самоподписанном сертификате.