in Architetture Software, Informatica

Kubernetes – Certificato SSL

Reading Time: 2 minutes

La pubblicazione di un servizio web, necessita di una connessione sicura tramite SSL. In un post precedente è stato introdotto il concetto di ingress, che consente di accedere dall’esterno ai servizi. L’ingress utilizza uno o piu services per poter accedere al pods sottostante (o ai pods).

kubernetes ingress

In questo post vedremo com’è possibile aggiungere un certificato all’ingress, in modo da poter utilizzare connessioni sicure tramite SSL.Nell’esempio viene descritta la modalità di deploy manuale in un cluster kubernetes.

Prerequisito è quello di avere i file contententi la key e il cert da utilizzare. Nel nostro caso avremo il file server.key e server.cert.

Per prima cosa è necessario creare un secrets all’interno di kubernetes.

$> kubectl create secret tls tls-secret --key server.key --cert server.crt

Il comando precedente ha creato un nuovo secrets chiamato tls-secret, e lo ha reso disponibile all’interno del cluster.

A questo punto è necessario modificare l’ingress in modo da includere tls-secret al suo interno:

kind: Ingress
metadata:
  name: IngressDemo
  annotations:
    kubernetes.io/ingress.class: "nginx"
    external-dns.alpha.kubernetes.io/target: "<#DNS_NAME_OF_LOAD_BALANCER>"
spec:
  tls:
  - secretName: tls-secret
  rules:
  - host: <#HOSTNAME>
    http:
      paths:
      - path: /
        backend:
          serviceName: <#SERVICE_NAME>
          servicePort: http

Il riferimento al secret che dovrà essere utilizzato si trova all’interno di spec e precisamente sotto alla voce tls.

Ovviamente <#DNS_NAME_OF_LOAD_BALANCER>, <#HOSTNAME> e <#SERVICE_NAME> dovranno essere sostituite rispettivamente con il dns name del load balancer (potrebbe essere assegnato dinamicamente dal provider cloud al momento dell’esecuzione dell’ingress), l’hostname del server ed il nome del service al quale l’ingress sta puntando.

Il solito comando

$> kubectl apply -f ingress.yaml

per applicare le modifiche all’ingress ed il server risponderà con il certificato.