Let's encrypt
cert-manager
cert-manager 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: trueInstalacja
Notatka
W momencie pisania tej dokumentacji aktualna wersja cert-managera to v1.20.2. W przypadku stawiania nowego klastra warto wybrać najnowszą:
dokumentacja instalacji
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.20.2/cert-manager.yamlcert-manager instaluje się w namespace cert-manager.
NAME READY STATUS RESTARTS AGE
cert-manager-69c7fcbf78-hdvl4 1/1 Running 0 3h4m
cert-manager-cainjector-69f8c8cdbf-rcfjq 1/1 Running 0 3h4m
cert-manager-webhook-84fd89df64-z9gtp 1/1 Running 0 3h4mCluster issuer
Podczas instalacji aplikacji w klastrze jednocześnie uruchamia się pod cluster-issuer, który wystawia wygenerowany w imieniu aplikacji CSR (Certificate Signing 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 klastrze. Dzieje się to automatycznie. Po wykonanym zadaniu pod cert-managera kończy działanie.

DNS
W obecnej architekturze, do poprawnego działania cert-managera należy zastosować wewnętrzną strefę DNS example.com, która odpowiada wewnętrznym adresem IP dla subdomen.
Aby działało generowanie certyfikatów SSL, trzeba zainstalować na klastrze zasób ClusterIssuer.
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: traefikMiddleware
Komponent Middleware jest używany do automatycznego ustawiania przekierowania HTTP → HTTPS.
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: redirect-https
namespace: default
spec:
redirectScheme:
scheme: https
permanent: trueWdrożenie przez Flux
Dzięki temu, że klaster ma uruchomionego Fluxa, wystarczy utworzyć katalog apps/certmanager z oboma manifestami: ClusterIssuer oraz Middleware. Po opublikowaniu plików w repozytorium Flux wykona automatycznie wdrożenie.
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@kubernetescrdDzięki tej konfiguracji Traefik komunikuje się z cluster-issuerem, żeby zażądać wystawienia certyfikatu, a także konfiguruje przekierowanie na HTTPS dla aplikacji za pomocą komponentu Middleware.
HelmChart
Ta konfiguracja jest automatycznie generowana przez helmchart, jeśli zostanie włączona opcja ssl: true w konfiguracji ingress.
