5 votes

Activation de SSL sur les kubernates dans GCE

Je suis en train d'activer le HTTPS pour nos clusters kubernates dans GCE. J'essaie d'utiliser kubernates Entrée

J'ai le cert et la clé privée, et j'ai créé un secret avec ces éléments en annexe (ssl-secret) :

apiVersion: v1
kind: Secret
metadata:
  name: ssl-secret
type: Opaque
data:
  tls.crt: LS0tLS...
  tls.key: Mc0c4t...

J'ai également un Ingress qui utilise le secret (ssl-ingress) :

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ssl-ingress
spec:
  backend:
    serviceName: client # Name of the service
    servicePort: my-https-port # Fetched from annotations
  tls:
  - hosts:
    - test.domain.se # My domain address
    secretName: ssl-secret # Name of my previously created secret

Enfin, j'essaie de les appliquer à mon cluster avec la configuration suivante :

apiVersion: v1
kind: Service
metadata:
  name: client
  annotations:
    service.alpha.kubernetes.io/app-protocols: '{"my-https-port":"HTTPS"}'   # Must map port-name to HTTPS for the GCP ingress controller
  labels:
    app: client-pods
spec:
  type: NodePort
  ports:
    - port: 12345 #To my understanding, not used
      targetPort: client-https
      protocol: TCP
      name: my-https-port
  selector:
    name: client-pods

Mon objectif est donc qu'avec cette configuration, je puisse atteindre test.domain.se sur https://test.domain.se . Mais il s'arrête tout simplement, alors que http://test.domain.se fonctionne parfaitement.

En décrivant l'Ingress, j'obtiens ce qui suit :

Name:                   ssl-ingress
Namespace:              default
Address:                35.186.253.27
Default backend:        client:my-https-port ()
TLS:
  ssl-secret terminates test.domain.se
Rules:

  Host  Path    Backends
  ----  ----    --------
  *     *       client:my-https-port ()
Annotations:
  static-ip:            k8s-fw-default-ssl-ingress--59114a8fc664f628
  target-proxy:         k8s-tp-default-ssl-ingress--59114a8fc664f628
  url-map:              k8s-um-default-ssl-ingress--59114a8fc664f628
  backends:             {"k8s-be-31894--59114a8fc664f628":"UNHEALTHY"}
  forwarding-rule:      k8s-fw-default-ssl-ingress--59114a8fc664f628
Events:
  FirstSeen     LastSeen        Count   From                    SubObjectPath   Type            Reason  Message
  ---------     --------        -----   ----                    -------------   --------        ------  -------
  7m            7m              1       loadbalancer-controller                 Normal          ADD default/ssl-ingress
  6m            6m              1       loadbalancer-controller                 Normal          CREATE  ip: 35.186.253.27
  6m            2m              18      loadbalancer-controller                 Warning         GCE googleapi: Error 400: The SSL key could not be parsed.
  6m            2m              18      loadbalancer-controller                 Warning         Service failed to identify user specified default backend, couldn't find nodeport for default/client, using system default

Mes questions sont donc les suivantes :

Avertissement GCE googleapi : Erreur 400 : La clé SSL n'a pas pu être analysée.

1 : Il semble qu'Ingress ait besoin de la phrase de passe de la clé privée. Comment ajouter une phrase de passe au secret (la clé a une phrase de passe connue, mais comment en informer le secret) ?

Warning Service failed to identify user specified default backend, couldn't find nodeport for default/client, using system default

2 : Il prétend qu'il n'a pas pu trouver nodeport pour default/client. Le client du service cible est déjà en cours d'exécution, mais il semble que l'entrée ajoute default/ avant le nom du service. Pourquoi et comment dois-je spécifier le service client ?

0voto

Alamgir Qazi Points 118

J'ai eu le même problème. Voici ce que j'ai fait

1) convertir la clé privée en clé privée RSA

openssl rsa -in private.key -out private_rsa.key

2) création d'un secret via la ligne de commande

kubectl create secret tls ingress-ssl --key private_rsa.key --cert certificate.crt

et d'utiliser ce secret dans mon Ingress.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X