Guide Open Source

GUIDE E MANUALI DEL MONDO LINUX E CMS

Guide Open Source

GUIDE E MANUALI DEL MONDO LINUX E CMS

Guide Open Source

GUIDE E MANUALI DEL MONDO LINUX E CMS

Che cosa è Cert-Manager e come impostare Cert-Manager per i certificati SSL in Kubernetes Cluster su AWS utilizzando Timone

Cert-Manager è un controller utilizzato per la gestione dei certificati. Un Cert-Manager può aiutare a rilasciare certificati da diverse emittenti come Let’s Encrypt, HashiCorp Vault, Venafi, una semplice firma coppia di chiavi, o di auto-firmato. Cert-Manager convalida di certificati, assicura che sono aggiornato, e rinnova prima della scadenza. Cert-Manager è costituito da diversi componenti, come indicato di seguito.

  1. Emittente: Emittenti, e ClusterIssuers, sono gli oggetti in Kubernetes che rappresentano le autorità di certificazione (ca) che possono generare i certificati firmati.
  2. Certificato: il Certificato è nel namespace risorsa che fa riferimento a un Emittente o ClusterIssuer, e sarà rinnovato e aggiornato.
  3. CertificateRequest: Il CertificateRequest è nel namespace risorsa per la richiesta di un certificato da parte di un emittente o di un cluster emittente.
  4. ACME Ordini: l’ordine rappresenta una richiesta di certificato che verrà creato un nuovo CertificateRequest risorsa di riferimento un ACME emittente è stata creata
  5. ACME Sfide: Quando un Ordine di risorsa è stata creata, Sfida risorse per ogni nome DNS essere autorizzato con l’ACME server verrà creata dall’ordine controller.
  6. Webhook: è distribuito come un altro contenitore con i principali Cert-Manager cialde e ha 3 funzioni: ValidatingAdmissionWebhook, MutatingAdmissionWebhook, e CustomResourceConversionWebhook.
  7. CA Injector: consente di configurare i certificati per la Convalida Webhooks, Mutando Webhooks, e la Conversione Webhooks.

In questo articolo, ci sarà istituito un Cert-Manager con Let’s Encrypt emittente. Noi vi assicuriamo la nostra applicazione di esempio che utilizza i certificati TLS e hanno HTTPS in nostro nome host per accedere all’applicazione utilizzando l’Ingresso. Per fare questo, aggiungere annotazioni per l’Ingresso in modo che il certificato risorsa è stata creata per nostro conto.

Per conoscere nel dettaglio su Cert-Manager, visitare la documentazione ufficiale qui. L’obiettivo di questo articolo è su come impostare il Cert-Manager utilizzando il Timone e si presume che si ha familiarità con i concetti relativi al Cert-Manager.

Pre-requisiti

  1. AWS Account(Creare , se non avete uno).
  2. Kubernetes Cluster (Clicca qui per imparare a creare un Kubernetes Cluster utilizzando Kops e sapere di più su di esso.)
  3. Nginx Ingresso Controller in K8S Cluster (Ricerca di Ciò che è l’Ingresso del Controller e come distribuire Nginx Ingresso Controller Kubernetes Cluster su AWS utilizzando Timone” per imparare a configurare Nginx Ingresso Controller)
  4. Timone v3.5.3 (Clicca qui per saperne di installare Timone su Ubuntu Server)
  5. S3 Secchio (Clicca qui per imparare a creare un S3 Secchio su AWS).
  6. Nome di dominio (Clicca qui per saperne di registrare un Dominio su AWS).
  7. IAM Ruolo con permessi di amministrazione(fare Clic qui per imparare a creare un IAM ruolo AWS).

Che cosa faremo?

  1. Controllare l’Ingresso del Controller del Cluster
  2. Installazione di un Cert-Manager
  3. Creare l’Oggetto definizione del file di un’applicazione di esempio
  4. L’installazione di Staging e Produzione Let’s Encrypt Emittente
  5. Distribuire un’applicazione di esempio
  6. Implementare una classe di Oggetti con TLS

Controllare l’Ingresso del Controller del Cluster

Prima di procedere, controllare se il Nginx grado di Controller di esecuzione del cluster.

kubectl ottenere cialde
kubectl ottenere svc

Controllare l'Ingresso del Controller del cluster

Installazione Cert Manager

Nota: ho usato il Timone binario presente alla mia posizione attuale, quindi non si può vedere ./timone in screenshot.

Utilizzare Timone v3.5.3 ed eseguire i seguenti comandi, verrà installato il Timone Grafico per Cert-Manager.

kubectl creare spazio dei nomi cert-manager
timone repo aggiungere jetstack https://charts.jetstack.io
timone repo update timone installare cert-manager jetstack/cert-manager --spazio dei nomi cert-manager --version v1.2.0 --set installCRDs=true

Installazione Cert Manager

Nella schermata qui sopra, si può vedere che il Timone Grafico per Cert-Manager è stato installato.

Controllare i contenitori che sono stati creati come parte del Cert-Manager.

kubectl ottenere cialde-di Un

Cert Manager Baccelli

Si possono vedere 3 nuovi contenitori nel “cert-manager” spazio dei nomi.

Creare l’Oggetto file di definizione per un esempio di applicazione e di emittenti

Creare 1-nginx-principale-app.yaml per l’applicazione 1

Github Link: Clicca qui per copiare il file dal mio repo Github.

apiVersion: apps/v1
tipo: Distribuzione
metadati:
etichette:
 esecuzione: nginx
 nome: nginx-distribuire-main
spec:
 repliche: 1
selettore:
matchLabels:
 esecuzione: nginx-main
modello:
metadati:
etichette:
 esecuzione: nginx-main
spec:
contenitori:
 - immagine: nginx
 nome: nginx


---
apiVersion: v1
genere: Servizio
metadati:
 nome: nginx-distribuire-main
spec:
 tipo: ClusterIP
porti:
 - porta: 80
 targetPort: 80
selettore:
 esecuzione: nginx-main

Creare 2-nginx-verde-app.yaml per applicazione 2.

Github Link: Clicca qui per copiare il file dal mio repo Github.

apiVersion: apps/v1
tipo: Distribuzione
metadati:
etichette:
 esecuzione: nginx
 nome: nginx-distribuzione-verde
spec:
 repliche: 1
selettore:
matchLabels:
 esecuzione: nginx-verde
modello:
metadati:
etichette:
 esecuzione: nginx-verde
spec:
volumi:
 - nome: webdata
 emptyDir: {}
initContainers:
 - nome: web-content
 immagine: busybox
volumeMounts:
 - nome: webdata
 mountPath: "/webdata"
 comando: ["/bin/sh", "c", 'echo "<h1>sono <font color=green>VERDE</font></h1>" > /webdata/index.html']
contenitori:
 - immagine: nginx
 nome: nginx
volumeMounts:
 - nome: webdata
 mountPath: "/usr/share/nginx/html


---
---
apiVersion: v1
genere: Servizio
metadati:
 nome: nginx-distribuzione-verde
spec:
 tipo: ClusterIP
porti:
 - porta: 80
 targetPort: 80
selettore:
 esecuzione: nginx-verde

Creare 3-nginx-blu-app.yaml per l’applicazione 3

Github Link: Clicca qui per copiare il file dal mio repo Github.

apiVersion: apps/v1
tipo: Distribuzione
metadati:
etichette:
 esecuzione: nginx
 nome: nginx-distribuzione-blu
spec:
 repliche: 1
selettore:
matchLabels:
 esecuzione: nginx-blu
modello:
metadati:
etichette:
 esecuzione: nginx-blu
spec:
volumi:
 - nome: webdata
 emptyDir: {}
initContainers:
 - nome: web-content
 immagine: busybox
volumeMounts:
 - nome: webdata
 mountPath: "/webdata"
 comando: ["/bin/sh", "c", 'echo "<h1>sono <font color=blue>BLU</font></h1>" > /webdata/index.html']
contenitori:
 - immagine: nginx
 nome: nginx
volumeMounts:
 - nome: webdata
 mountPath: "/usr/share/nginx/html


---
apiVersion: v1
genere: Servizio
metadati:
 nome: nginx-distribuzione-blu
spec:
 tipo: ClusterIP
porti:
 - porta: 80
 targetPort: 80
selettore:
 esecuzione: nginx-blu

 

Creare 4-tls-ingresso.yaml per la creazione di percorso a base di Infiltrazioni di regole con la messa in scena dell’Emittente.

Github Link: Clicca qui per copiare il file dal mio repo Github.

apiVersion: estensioni/v1beta1
tipo: Ingress
metadati:
annotazioni:
 nginx.la penetrazione.kubernetes.io/riscrivere-target: /
 cert-manager.io/cluster-emittente: letsencrypt-staging
 nome: ingresso-risorsa-3
spec:
tls:
 - hosts:
 - kops.devopslee.com
 secretName: campione-kubernetes-tls
regole:
 - host: kops.devopslee.com
http:
percorsi:
 - percorso: /
backend:
 serviceName: nginx-distribuire-main
 servicePort: 80
 - path: /blu
backend:
 serviceName: nginx-distribuzione-blu
 servicePort: 80
 - path: /verde
backend:
 serviceName: nginx-distribuzione-verde
 servicePort: 80

Creare 5-tls-ingresso-prod-emittente.yaml per la creazione di percorso a base di Infiltrazioni di regole di Produzione dell’Emittente.

Github Link: Clicca qui per copiare il file dal mio repo Github.

apiVersion: estensioni/v1beta1
tipo: Ingress
metadati:
annotazioni:
 nginx.la penetrazione.kubernetes.io/riscrivere-target: /
 cert-manager.io/cluster-emittente: letsencrypt-produzione
 nome: ingresso-risorsa-3
spec:
tls:
 - hosts:
 - kops.devopslee.com
 secretName: campione-kubernetes-tls
regole:
 - host: kops.devopslee.com
http:
percorsi:
 - percorso: /
backend:
 serviceName: nginx-distribuire-main
 servicePort: 80
 - path: /blu
backend:
 serviceName: nginx-distribuzione-blu
 servicePort: 80
 - path: /verde
backend:
 serviceName: nginx-distribuzione-verde
 servicePort: 80

Creare staging_issuer.yaml per Let’s Encrypt Stadiazione Emittente

Github Link: Clicca qui per copiare il file dal mio repo Github.

apiVersion: cert-manager.io/v1
tipo: ClusterIssuer
metadati:
 nome: letsencrypt-staging
spec:
acme:
 # Indirizzo di posta elettronica utilizzato per ACME di registrazione
 e-mail: la tua e-mail-id-qui
 server: https://acme-staging-v02.api.letsencrypt.org/directory
privateKeySecretRef:
 # Nome di un segreto utilizzato per memorizzare l'ACME conto della chiave privata
 nome: letsencrypt-staging-private-key
 # Aggiungere una singola sfida risolutore, HTTP01 utilizzo di nginx
solutori:
 - http01:
ingresso:
 classe: nginx

 

Creare production_issuer.yaml per Let’s Encrypt Produzione Emittente

Github Link: Clicca qui per copiare il file dal mio repo Github.

apiVersion: cert-manager.io/v1
tipo: ClusterIssuer
metadati:
 nome: letsencrypt-produzione
spec:
acme:
 # Indirizzo di posta elettronica utilizzato per ACME di registrazione
 e-mail: la tua e-mail-id-qui
 server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
 # Nome di un segreto utilizzato per memorizzare l'ACME conto della chiave privata
 nome: letsencrypt-produzione-private-key
 # Aggiungere una singola sfida risolutore, HTTP01 utilizzo di nginx
solutori:
 - http01:
ingresso:
 classe: nginx

Potete trovare tutti questi file sul mio Github repo qui.

L’installazione di Staging e Produzione Let’s Encrypt Emittente

Possiamo installare sia la Produzione e messa in scena di Cluster Emittente.

Stadiazione:

Stadiazione è “server: https://acme-staging-v02.api.letsencrypt.org/directory”

kubectl registri cert-manager-56f5c44b5d-jn46m -n cert-manager -f
kubectl applicare -f cluster-emittente/staging_issuer.yaml

L'installazione di Let's Encrypt Stadiazione Cluster Emittente

Questo crea un segreto denominato “letsencrypt-staging-privato-chiave”

kubectl ottenere segreto letsencrypt-staging-private-key-n cert-manager -o json

Controllare la messa in scena segreto

Produzione:

La produzione è “server: https://acme-v02.api.letsencrypt.org/directory”

kubectl registri cert-manager-56f5c44b5d-jn46m -n cert-manager -f
kubectl applicare -f cluster-emittente/production_issuer.yaml

L'installazione di Let's Encrypt Cluster di Produzione Emittente

Questo crea un segreto denominato “letsencrypt-produzione-privato-chiave”

kubectl ottenere segreto letsencrypt-produzione-private-key -n cert-manager -o json

Controllare il segreto della produzione

Distribuire un’applicazione di esempio

Andiamo a distribuire i nostri 3 applicazioni di esempio.

kubectl applicare -f esempio-app/1-nginx-principale-app.yaml
kubectl applicare -f esempio-app/2-nginx-verde-app.yaml
kubectl applicare -f esempio-app/3-nginx-blu-app.yaml
Controllare le distribuzioni, i contenitori e i servizi creati da i comandi di cui sopra.
kubectl ottenere distribuzioni
kubectl ottenere cialde kubectl
ottenere un servizio

Distribuire un'applicazione di esempio

Distribuire Ingresso

Prima di tutto, bisogna distribuire un Ingresso con la messa in scena dell’Emittente.

kubectl applicare -f esempio-app/4-tls-ingresso.yaml
kubectl ottenere l'ingresso
kubectl descrivere ingresso ingresso-risorsa-3

Creare l'ingresso con la messa in scena Emittente

Dopo l’entrata risorsa è stata creata, è possibile vedere a tutti cosa è successo in background per emettere il certificato per il TLS sezione di Ingresso.

kubectl ottenere il certificato -Un
kubectl ottenere certificaterequests.cert-manager.io-Unkubectl ricevere ordini.acme.cert-manager.io-Unkubectl ottenere sfide.acme.cert-manager.io-Un
kubectl ottenere il certificato -o json | grep secretNameacme.cert-manager.io-Un
kubectl ottenere sfide.acme.cert-manager.io-Un
kubectl ottenere il certificato -o json | grep secretName
kubectl ottenere segreto campione-kubernetes-tls -o yaml

Verificare il certificato di richiesta del certificato, l'ordine e il segreto

L’applicazione può ora essere effettuato l’accesso tramite HTTPS, ma dal momento che abbiamo utilizzato l’Ambiente di gestione temporanea di Let’s Encrypt emittente si otterrà un messaggio di avviso “la connessione a questo sito non è sicuro”.

Prova le Url con HTTPS, certificati di messa in scena

Distribuire l’Ingresso con la Produzione di Emittente.

Ora, proviamo ad eliminare le Infiltrazioni mediante la messa in scena e creare un nuovo Ingresso di ha sottolineato la Produzione emittente.

kubectl eliminare -f esempio-app/4-tls-ingresso.yaml
kubectl applicare -f esempio-app/5-tls-ingresso-prod-emittente.yaml
kubectl ottenere l'ingresso
kubectl descrivere ingresso ingresso-risorsa-3

Creare l'ingresso con la Produzione di Emittente

Questa volta, se si tenta di accedere all’applicazione, non si otterrà alcun messaggio di avviso “La connessione a questo sito non è sicuro”.

Prova le Url con HTTPS, certificati dalla Produzione

Conclusione

In questo articolo, abbiamo visto la procedura per impostare un Cert-Manager nel Kubernetes Cluster. Abbiamo implementato un’applicazione di esempio e il traffico instradato attraverso l’ingresso basato sul percorso e assicurato il collegamento con HTTPS utilizzando un certificato rilasciato da Let’s Encrypt cluster emittente. Prima abbiamo rilasciato un certificato utilizzando Let’s Encrypt ambiente di gestione temporanea, poi Let’s Encrypt ambiente di produzione

Piaciuto l'articolo? Condividilo sui social!

Share on facebook
Facebook
Share on twitter
Twitter
Share on linkedin
LinkedIn
Share on whatsapp
WhatsApp