web-dev-qa-db-fra.com

Comment obtenir SSL sur une application Kubernetes?

J'ai déployé une application météorite simple sur kubernetes. J'ai associé une adresse IP externe au serveur, afin qu'elle soit accessible à partir du cluster. Maintenant, je vais l'exposer à Internet et le sécuriser (en utilisant le protocole HTTPS). Quelqu'un peut-il donner des instructions simples pour cette section?

13
fay

À mon avis kube-lego est la meilleure solution pour GKE. Voyez pourquoi:

  • Utilise Let's Encrypt comme CA
  • Inscription et renouvellements entièrement automatisés
  • Configuration minimale dans un seul objet ConfigMap
  • Fonctionne avec nginx-ingress-controller (voir exemple )
  • Fonctionne avec équilibreur de charge HTTP de GKE (voir exemple )
  • Plusieurs domaines entièrement pris en charge, y compris l'hébergement virtuel de plusieurs sites https sur une IP (avec prise en charge SNI du contrôleur nginx-ingress)

Exemple de configuration (c'est tout!):

kind: ConfigMap
apiVersion: v1
metadata:
  name: kube-lego
  namespace: kube-lego
data:
  lego.email: "your@email"
  lego.url: "https://acme-v01.api.letsencrypt.org/directory"

Exemple d'entrée (vous pouvez en créer plusieurs):

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: site1
  annotations:
    # remove next line if not using nginx-ingress-controller
    kubernetes.io/ingress.class: "nginx"
    # next line enable kube-lego for this Ingress
    kubernetes.io/tls-acme: "true"
spec:
  tls:
  - hosts:
    - site1.com
    - www.site1.com
    - site2.com
    - www.site2.com
    secretName: site12-tls
  rules:
    ...
14
Janos Lenart

Il existe plusieurs façons de configurer un point de terminaison SSL, mais votre solution doit résoudre 2 problèmes: Tout d'abord, vous devez obtenir un certificat et une clé valides. Deuxièmement, vous devez configurer un point de terminaison SSL dans votre infrastructure.

Jetez un oeil à k8s contrôleur d'entrée . Vous pouvez fournir à un contrôleur d'entrée un certificat/secret de clé provenant de k8s secret store pour configurer un point de terminaison ssl. Bien sûr, cela nécessite que vous ayez déjà un certificat et une clé valides.

Vous pouvez jeter un œil aux solutions spécifiques à k8 pour émettre et utiliser des certificats comme Kubernetes Letsencrypt Controller , mais je ne les ai jamais utilisées et je ne peux pas dire à quel point elles fonctionnent.

Voici quelques idées générales pour émettre et utiliser des certificats SSL:

1. Obtenir un certificat et une clé SSL valides

[~ # ~] aws [~ # ~]

Si vous utilisez AWS, la façon la plus simple à laquelle je peux penser est de configurer un ELB, qui peut émettre automatiquement le certificat SSL pour vous.

LetsEncrypt

Vous pouvez également consulter LetsEncrypt pour émettre des certificats gratuits pour votre domaine. Ce qui est bien, c'est que vous pouvez automatiser votre processus d'émission de certificats.

[~ # ~] ca [~ # ~]

Bien sûr, vous pouvez toujours suivre la voie traditionnelle et émettre un certificat d'un fournisseur de confiance.

2. Configuration du point de terminaison ssl

[~ # ~] aws [~ # ~]

Encore une fois, si vous avez un ELB, il fait déjà office de point final et vous avez terminé. Bien sûr, votre connexion client <-> ELB est cryptée, mais le cluster ELB <-> k8s n'est pas crypté.

contrôleur d'entrée k8s

Comme mentionné ci-dessus, selon la version k8 que vous utilisez, vous pouvez également configurer un TLS contrôleur d'entrée .

Service proxy k8s

Une autre option consiste à configurer un service à l'intérieur de votre cluster k8s, ce qui met fin à la connexion ssl et proxy le trafic vers votre application météore non crypté. Vous pouvez utiliser nginx comme proxy pour cela. Dans ce cas, je vous suggère de stocker la clé de votre certificat à l'intérieur k8s secret store et de le monter à l'intérieur du conteneur nginx. [~ # ~] jamais [~ # ~] expédier un conteneur contenant des secrets tels que des clés de certificat stockées à l'intérieur! Bien sûr, vous devez toujours envoyer votre trafic crypté vers un nœud k8s - encore une fois, il existe plusieurs façons d'y parvenir ... Le plus simple serait de modifier votre entrée DNS pour pointer vers les nœuds k8s, mais idéalement, vous utiliseriez un TCP LB.

9
fishi0x01