Защитите приложение с помощью Traefik SSL Letsencrypt в Kubernetes

Вопрос или проблема

Я только начал изучать Kubernetes. Я создал аккаунт в DigitalOcean и запустил кластер Kubernetes. Затем я попытался следовать этой статье https://www.digitalocean.com/community/tutorials/how-to-secure-your-site-in-kubernetes-with-cert-manager-traefik-and-let-s-encrypt. Но у меня есть некоторые вопросы о том, как это работает.
Сейчас моя ситуация следующая:

kubectl get pods,services,deployments
NAME                                   
pod/app-frontend      
pod/app-backend       
pod/cm-acme-http-solver-qh8ms          
pod/company-service    
pod/edge-service      
pod/location-service  
pod/traefik           
pod/traefik-deployment 
pod/user-service      

NAME                                TYPE           EXTERNAL-IP       PORT(S)                   
service/app-frontend                LoadBalancer   app-ext-ip        3000:32459/TCP            
service/app-backend                 ClusterIP      <none>            5432/TCP                  
service/cm-acme-http-solver-fcgpr   NodePort       <none>            8089:30577/TCP            
service/company-service             ClusterIP      <none>            9003/TCP                  
service/edge-service                ClusterIP      <none>            9000/TCP                  
service/kubernetes                  ClusterIP      <none>            443/TCP                   
service/location-service            ClusterIP      <none>            9002/TCP                  
service/traefik                     LoadBalancer   traefik-ext-ip    80:32591/TCP,443:30716/TCP
service/traefik-dashboard-service   LoadBalancer   tr-dash-ext-ip    8080:31431/TCP            
service/traefik-web-service         LoadBalancer   tr-ws-ext-ip      80:31211/TCP              
service/user-service                ClusterIP      <none>            9001/TCP                  

NAME                              
deployment.apps/app-frontend     
deployment.apps/app-backend     
deployment.apps/company-service   
deployment.apps/edge-service      
deployment.apps/location-service  
deployment.apps/traefik           
deployment.apps/traefik-deployment
deployment.apps/user-service  

Таким образом, у меня работает Traefik, но он не выполняет функции прокси, app-frontend работает, но не по https, сертификаты, выданные Let’s Encrypt, нигде не используются. Например:

kubectl get issuer -o wide
NAME             READY   STATUS 
challenge-http   True    Учетная запись ACME была зарегистрирована на сервере ACME
kubectl get certificateRequest -o wide
NAME                          APPROVED   DENIED   READY   ISSUER           REQUESTOR                                         STATUS                                                                                                 AGE
    tls-app-ingress   True                False   challenge-http   system:serviceaccount:cert-manager:cert-manager   Ожидание выдачи сертификата от заказа default/tls-app-ingress-http: "в ожидании"
kubectl get certificates
NAME                    READY   SECRET                  AGE
tls-app-ingress-http   False   tls-area-ingress-http   166m

И, конечно, поскольку я обучаюсь с нуля, все находится в стандартной среде. Как мне сказать Kubernetes использовать Traefik в качестве прокси и добраться до app-frontend через https? Я не обижусь, если вы ответите мне с какой-либо документацией для чтения, просто укажите правильное направление.

Ответ или решение

Защита приложения с использованием SSL через Traefik и Let’s Encrypt в Kubernetes

Ваша задача по настройке Traefik для работы с сертификатами Let’s Encrypt в Kubernetes является важной для обеспечения безопасности вашего приложения. Давайте подробно рассмотрим, как настроить Traefik, чтобы он служил прокси-сервером для вашего приложения app-frontend с поддержкой HTTPS.

1. Установка Traefik с поддержкой Let’s Encrypt

Для начала убедитесь, что у вас установлен Traefik и Cert-Manager, поскольку они являются основными компонентами для автоматизации получения и управления SSL-сертификатами. Многие пользователи сталкиваются с трудностями из-за недостатка настройки или конфигурации.

2. Конфигурация Ingress

Traefik обрабатывает входящий HTTP(S) трафик через ресурсы Ingress. Вам нужно создать ресурс Ingress для вашего приложения app-frontend. Пример конфигурации может выглядеть следующим образом:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: app-frontend-ingress
  annotations:
    cert-manager.io/cluster-issuer: "challenge-http"
    traefik.ingress.kubernetes.io/router.entrypoints: "websecure"
spec:
  tls:
    - hosts:
        - your-domain.com  # замените на ваш домен
      secretName: tls-app-ingress-http
  rules:
    - host: your-domain.com  # замените на ваш домен
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: app-frontend
                port:
                  number: 3000

Обратите внимание на следующие ключевые моменты:

  • cert-manager.io/cluster-issuer: указывает на ваш Issuer, который будет использоваться для получения сертификата.
  • spec.tls: указывает имя секрета, который будет создан для хранения сертификата.

3. Проверка состояния сертификатов

Убедитесь, что ваш Issuer настроен правильно и сертификаты выданы корректно. Вам нужно будет выполнить следующую команду, чтобы проверить состояние сертификатов:

kubectl get certificates

Если сертификаты не готовы, это может указывать на проблемы с настройками Ingress или Cert-Manager. В частности, убедитесь, что ваш домен указывает на IP-адрес вашего LoadBalancer.

4. Настройка DNS

Убедитесь, что ваш домен правильно настроен с помощью DNS. Для получения сертификата от Let’s Encrypt необходимо, чтобы ваш домен указывал на Traefik LoadBalancer. Вы можете использовать команду kubectl get svc для получения внешнего IP-адреса вашего сервиса Traefik.

5. Добавление правил маршрутизации

После настройки Ingress для вашего приложения app-frontend, включите дополнительные правила маршрутизации, чтобы оптимизировать провайдинг трафика через Traefik к другим вашим сервисам, если это необходимо.

Это всего лишь основные шаги для установки и настройки защиты вашего приложения с помощью Traefik и Let’s Encrypt в Kubernetes. Однако, как начинает большинство пользователей, может потребоваться время для решения возникающих вопросов.

Полезные ссылки для обучения

Рекомендуется обратить внимание на следующие ресурсы для более глубокого понимания:

Заключение

Сложности, с которыми вы сталкиваетесь, нормальны для новичка в Kubernetes. Следуйте этому руководству, выполняйте проверки на каждом этапе и изучайте дополнительную документацию. Если у вас возникнут дополнительные вопросы, не стесняйтесь спрашивать. Теперь у вас есть четкое направление для реализации SSL через Traefik!

Оцените материал
Добавить комментарий

Капча загружается...