2
votes

Certificat auto-signé Traefik v2.0 sur Kubernetes

J'utilise Traefik ( v2.0 ) comme passerelle d'entrée pour mon cluster EKS. L'entrée Traefik fonctionne bien.
Maintenant, je dois ajouter la prise en charge de https pour mon entrée à l'aide d'un certificat auto-signé. Pour cela, j'ai:

  • Créé un IngressRoute de http à https redirectio -> Cela fonctionne très bien
  • J'ai créé un secret ayant la clé et le certificat de mon certificat auto-signé
kubectl create secret tls tlssecret --key="eks.tls.key" --cert="eks.tls.crt"
  • Ajout du secret tls à mon déploiement IngressRoute:
  • apiVersion: traefik.containo.us/v1alpha1 kind: métadonnées IngressRoute: nom: pulseingressroutetls namespace: pulse spec: entryPoints: - websecure tls: secretName: pulsetlssecret
    routes: - match: PathPrefix ( /auth ) ...

Après ce déploiement, lorsque je parcoure l'url d'entrée, il me présente toujours le TRAEFIK DEFAULT CERT, pas mon certificat auto-signé.

S'il vous plaît laissez-moi savoir ce que je fais de mal ici? Y a-t-il une autre façon de le faire?


0 commentaires

3 Réponses :


3
votes

Essayez de monter le secret sur votre conteneur pour qu'il soit identifié par le service traefik. De plus, configurez IngressRoute avec la configuration ci-dessous.

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

J'espère que cela t'aides.


0 commentaires

2
votes

Enfin, cela a fonctionné comme ci-dessous:

traefik-conf.yml:

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

J'ai changé de contrôleur d'entrée comme ci-dessous:

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

Voies d'entrée:

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


0 commentaires

0
votes

La solution acceptée de NumeroUno fonctionne réellement, mais j'ai quelques remarques mineures:

  • certFile: /ssl/tls.pem doit être certFile: /ssl/tls.crt
  • selon la création initiale du secret, le nom du secret est tlssecret , pas de traefik-cert .

0 commentaires