Skip to main content

Let's encrypt

kkrolikowskiLess than 1 minuteGuidekubernetes

Certmanager

Certmanager jest odpowiedzialny za instalację certyfikatów SSL dla aplikacji, które mają skonfigurowaną obsługę SSL. Zainstalowane certyfikaty znajdują się w namespace default, tam gdzie uruchomione są aplikacje.

ingress:
  enabled: true
  ssl: true


 

Instalacja

kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.11.0/cert-manager.yaml

Certnamager instaluje się w namespace cert-manager.

Cluster issuer

W trakcie uruchamiania aplikacji w klastrze, jednocześnie uruchamia się pod cluster-issuer, który wystawia wygenerowany w imieniu aplikacji CSR (Certificate Sign Request). Jest on wystawiony pod adresem http://aplikacja.domena.com/.well-known/. Let's encrypt pobiera z tego adresu CSR, następnie podpisuje go i udostępnia do pobrania. Cert manager instaluje podpisany certyfikat w clustrze.

Lets encrypt infrastructure
Lets encrypt infrastructure

DNS

W obecnej architekturze, do poprawnego działania certmanagera musiałem zastosować wewnętrzną strefę dns example.com, która odpowiada wewnętrznym adresem ip dla subdomen.

Konfiguracja ClusterIssuera

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt
  namespace: default
spec:
  acme:
    email: admin@domena.com
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      name: letsencrypt
    solvers:
      - http01:
          ingress:
            class: traefik

Middleware

Komponent Middleware jest używany do automatycznego ustawiania przekierowania HTTP -> HTTPS

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: redirect-https
  namespace: default
spec:
  redirectScheme:
    scheme: https
    permanent: true

Traefik

Poniższa konfiguracja dotyczy traefika, który działa jako ingress controller w klastrze kubernetes.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: app-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: traefik
    cert-manager.io/cluster-issuer: letsencrypt
    traefik.ingress.kubernetes.io/router.middlewares: default-redirect-https@kubernetescrd

Dzięki tej konfiguracji traefik komunikuje się z cluster-issuerem, żeby zarządać wystawienia certyfikatu a także konfiguruje redirect na https dla aplikacji za pomocą middleware'a.