Самоподписанный сертификат Traefik v2.0 на Kubernetes

Я использую Traefik (v2.0) как входной шлюз для моего кластера EKS. Входящий трафик Traefik работает нормально.
Теперь мне нужно добавить поддержку https для входящего трафика с использованием самоподписанного сертификата. Для этого у меня есть:

  • Создан IngressRoute с http на https redirectio - ›Это отлично работает
  • Создал секрет с ключом и сертификатом моего самозаверяющего сертификата
kubectl create secret tls tlssecret --key="eks.tls.key" --cert="eks.tls.crt"
  • Добавлен секрет tls в мое развертывание IngressRoute:
  • apiVersion: traefik.containo.us/v1alpha1 kind: IngressRoute metadata: name: pulseingressroutetls namespace: pulse spec: entryPoints: - websecure tls: secretName: pulsetlssecret
    routes: - match: PathPrefix (/auth) ...

После этого развертывания, когда я просматриваю входящий URL-адрес, он все еще представляет мне TRAEFIK DEFAULT CERT, а не мой самозаверяющий сертификат.

Пожалуйста, дайте мне знать, что я здесь делаю не так? Есть ли другой способ сделать это?


person NumeroUno    schedule 07.07.2020    source источник


Ответы (3)


Попробуйте установить секрет на свой контейнер, чтобы его опознала служба traefik. Кроме того, настройте IngressRoute с помощью конфигурации ниже.

tls:
  certificates:
    - certFile: /path/to/domain.cert
      keyFile: /path/to/domain.key

Надеюсь это поможет.

person Vamshi Siddarth    schedule 08.07.2020

Наконец, это сработало, как показано ниже:

traefik-conf.yml:

apiVersion: v1
kind: ConfigMap
metadata:
  name: traefik-conf
  namespace: pulse
data:
  traefik.yml: |
    api:
      dashboard: true
      insecure: true
    global:
      checkNewVersion: false
      sendAnonymousUsage: false
    ping: {}
    entryPoints:
      websecure:
        address: ":443"
      web:
        address: ":80"
    providers:
      kubernetesCRD: {}
      file:
        filename: /etc/traefik/traefik.yml
        watch: true
    tls:
      stores:
        default:
          defaultCertificate:
            certFile: /ssl/tls.pem
            keyFile: /ssl/tls.key
      options:
        default:
          minVersion: VersionTLS12
          sniStrict: false
      certificates:
        - certFile: /ssl/tls.pem
          keyFile: /ssl/tls.key

Я изменил контроллер входящего трафика, как показано ниже:

spec:
      serviceAccountName: traefik-ingress-controller
      containers:
        - name: traefik
          image: traefik:v2.0
          volumeMounts:
            - name: config
              mountPath: /etc/traefik/traefik.yml
              subPath: traefik.yml
            - name: ssl
              mountPath: /ssl           
          ports:
            - name: web
              containerPort: 80
            - name: websecure
              containerPort: 443
            - name: admin
              containerPort: 8080
      volumes:
      - name: ssl
        secret:
          secretName: traefik-cert
      - name: config
        configMap:
          name: traefik-conf

Маршруты входа:

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: pulseingressroutetls
  namespace: pulse
spec:
  entryPoints:
    - websecure 
  tls:
    secretname: traefik-cert
  routes:
...
person NumeroUno    schedule 09.07.2020

Принятое решение от NumeroUno действительно работает, но у меня есть пара мелких замечаний:

  • certFile: /ssl/tls.pem должно быть certFile: /ssl/tls.crt
  • согласно первоначальному созданию секрета имя секрета - tlssecret, а не traefik-cert.
person Rhadamon    schedule 24.11.2020