Cert-Manager automatizuje poskytování certifikátů v clusterech Kubernetes. Poskytuje sadu vlastních zdrojů pro vydávání certifikátů a jejich připojení ke službám.
Jedním z nejčastějších případů použití je zabezpečení webových aplikací a API pomocí SSL certifikátů od Let’s Encrypt. Zde je návod, jak přidat Cert-Manager do svého clusteru, nastavit vydavatele certifikátu Let's Encrypt a získat certifikát pro Pody vystavené prostřednictvím Ingress.
Instalace Cert-Manager
Cert-Manager se nejsnáze instaluje pomocí Helm. Helm je správce balíčků Kubernetes, který vám umožňuje přidávat aplikace do vašeho clusteru pomocí úložišť předem sestavených grafů. Ujistěte se, že máte Helm nainstalovaný a nastavený s připojením ke clusteru Kubernetes.
Začněte přidáním úložiště Jetstack do vaší instalace Helm. Jetstack původně vyvinul Cert-Manager, než byl darován CNCF.
helm repo add jetstack https://charts.jetstack.io helm repo update
Nyní nainstalujte Cert-Manager do svého clusteru:
helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --version v1.5.3 --set installCRDs=true
Nahraďte výše uvedené číslo verze nejnovější verzí uvedenou v dokumentaci Cert-Manager.
Příkaz nainstaluje Cert-Manager do nového jmenného prostoru Kubernetes s názvem cert-manager
. installCRDs
nastavení přidá během instalace vlastní zdroje Kubernetes Cert-Manager. Toto funguje pouze s Helmem verze 3.2 a novějším – pokud používáte starší verzi, musíte ručně přidat definice zdrojů pomocí Kubectl:
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.3/cert-manager.crds.yaml
Přidání pluginu Kubectl
Cert-Manager má zásuvný modul Kubectl, který zjednodušuje některé běžné úkoly správy. Umožňuje vám také zkontrolovat, zda je Cert-Manager spuštěn a připraven obsluhovat požadavky.
Nainstalujte plugin stažením jeho archivu a jeho rozbalením do správného adresáře:
curl -L -o kubectl-cert-manager.tar.gz https://github.com/jetstack/cert-manager/releases/latest/download/kubectl-cert_manager-linux-amd64.tar.gz tar xzf kubectl-cert-manager.tar.gz sudo mv kubectl-cert_manager /usr/local/bin
Nyní pomocí pluginu zkontrolujte, zda vaše instalace Cert-Manageru funguje:
kubectl cert-manager check api
Měli byste vidět následující výstup:
The cert-manager API is ready
Nyní jste připraveni přidat vydavatele, abyste získali certifikáty od Let’s Encrypt.
Vytvoření vydavatele certifikátu
Vydavatelé a vydavatelé clusteru jsou prostředky, které dodávají certifikáty vašemu clusteru. Dosud vytvořená základní instalace Cert-Manageru není schopna vydávat certifikáty. Přidání vydavatele, který je nakonfigurován pro používání Let's Encrypt, vám umožní dynamicky získávat nové certifikáty pro služby ve vašem clusteru.
Vytvořte soubor YAML ve svém pracovním adresáři a pojmenujte jej issuer.yml
. Přidejte následující obsah:
apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: letsencrypt-staging spec: acme: server: https://acme-staging-v02.api.letsencrypt.org/directory email: example@example.com privateKeySecretRef: name: letsencrypt-staging solvers: - http01: ingress: class: nginx
E-mailovou adresu musíte nahradit svým vlastním kontaktním e-mailem. To bude součástí vašich certifikátů. Let’s Encrypt vám také může poslat e-mail na adresu, pokud vám bude chtít zasílat upozornění na vaše certifikáty.
Vytváříme ClusterIssuer
protože jsou dostupné všem zdrojům ve vašem clusteru, bez ohledu na jmenný prostor. Standardní Issuer
je zdroj se jmenným prostorem, který může dodávat certifikáty pouze v rámci vlastního jmenného prostoru.
Naše konfigurace vydavatele dává pokyn Cert-Manager získat certifikáty z přípravného serveru Let's Encrypt. Při nastavování integrace je dobré používat pracovní prostředí, abyste se vyhnuli narážce na přísné limity produkční rychlosti Let’s Encrypt.
Použijte kubectl
pro přidání vydavatele do vašeho clusteru:
kubectl create -f issuer.yml
Získání certifikátu
Nyní můžete použít svého vydavatele k získání certifikátu pro službu vystavenou prostřednictvím zdroje Ingress. Cert-Manager automaticky monitoruje zdroje Ingress a vytváří certifikáty pomocí konfigurace v jejich tls
pole. Stačí přidat anotaci s názvem vydavatele nebo vydavatele clusteru, kterého chcete použít.
apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: replicas: 1 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-app image: wordpress:latest ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: my-app ports: port: 80 --- apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: my-ingress annotations: kubernetes.io/ingress.class: nginx cert-manager.io/cluster-issuer: letsencrypt-staging spec: rules: - host: example.com http: paths: - path: / backend: serviceName: my-service servicePort: 80 tls: - hosts: - example.com
Tento soubor YAML definuje pod, službu a vstup odhalující službu. Předpokládá použití nginx-ingress
jako Ingress controller. Pod běží WordPress kontejner, který bude přístupný přes HTTPS na example.com
.
Přítomnost cert-manager.io/cluster-issuer
anotaci ve zdroji Ingress zjistí Cert-Manager. Použije letsencrypt-staging
vydavatel clusteru vytvořený dříve za účelem získání certifikátu pokrývajícího názvy hostitelů definované v tls.hosts
Ingress pole.
Použití Let’s Encrypt v produkci
Jakmile úspěšně získáte zkušební certifikát, můžete migrovat na produkční servery Let's Encrypt. Stagingové certifikáty jsou platné, ale prohlížeče jim nedůvěřují, takže před uvedením webu do provozu musíte získat produkční náhradu.
Nejlepší je přidat samostatného vydavatele clusteru pro produkční server. Poté můžete uvést příslušného vydavatele v každém ze svých zdrojů Ingress v závislosti na tom, zda jsou připraveny k produkci.
Zkopírujte výše uvedenou konfiguraci vydavatele a změňte name
pole do letsencrypt-production
. Dále nahraďte adresu URL serveru níže uvedenou hodnotou:
https://acme-v02.api.letsencrypt.org/directory
Vytvořte nového vydavatele ve svém clusteru:
kubectl create -f issuer-production.yml
Aktualizujte svůj zdroj Ingress, abyste mohli požádat o produkční certifikát, změnou hodnoty cert-manager.io/cluster-issuer
anotace k letsencrypt-production
(nebo jméno, které jste přiřadili svému vlastnímu produkčnímu vydavateli). Použijte kubectl
aplikujte změnu:
kubectl apply -f my-ingress.yaml
Nyní byste měli mít pro svůj prostředek Ingress povoleno plně funkční HTTPS. Cert-Manager bude automaticky spravovat vaše certifikáty a obnovovat je před vypršením platnosti.
Upgrade Cert-Manager
Verze Cert-Manager obvykle podporují upgrady na místě pomocí Helm:
helm repo update helm upgrade --version <new version> cert-manager jetstack/cert-manager
Certifikáty zůstávají dostupné během upgradů, ale proces obnovy bude zastaven.
I když jsou upgrady nyní běžně jednoduché, měli byste si vždy prohlédnout poznámky k verzi, abyste zjistili potenciální změny, které je třeba provést. To je zvláště důležité, pokud upgradujete Kubernetes nebo procházíte několika verzemi Cert-Manager. Pokud stále používáte starší verzi Kubernetes, možná používáte zastaralou verzi Cert-Manager, která vyžaduje značný ruční zásah, aby byla aktualizována.
Přehled
Let’s Encrypt lze snadno přidat do clusteru Kubernetes pomocí Cert-Manager. Musíte si nainstalovat Cert-Manager s Helm, vytvořit vydavatele, který používá rozhraní Let’s Encrypt API, a poté tohoto vydavatele uvést ve svých zdrojích Ingress.
Cert-Manager můžete dodat s vlastní konfigurací pro pokročilejší případy použití. Můžete zadat dobu platnosti certifikátu (použijte cert-manager.io/duration
anotace Ingress), ručně deklarujte běžný název certifikátu (cert-manager.io/common-name
) a místo HTTP použijte výzvy DNS. Druhá možnost může být užitečná ve specifických situacích, například když chcete získat certifikát se zástupnými znaky.
Přímé použití k ochraně webových aplikací a rozhraní API by mělo fungovat tak, jak je, s využitím prostředků uvedených výše. Ověření HTTP funguje tak, že manipuluje s kontrolérem Ingress tak, aby poskytl dočasné .well-known
URL, ke které má Let's Encrypt přístup. Pokud vaše doména poskytuje na této adrese URL správnou hodnotu, Let’s Encrypt svěří, že to máte pod kontrolou, a vydá certifikát.