Cert-manager: kubernetes에서 인증서 관리 자동화
9798 단어 kubernetestutorialaddon
보안을 유지하기 위해 이러한 인증서는 수명이 있으며 만료 시 갱신해야 합니다.
예를 들어 kubernetes에서
kublet
는 mTLS를 통해 kube-api-server
로 인증합니다. 인증서는 kubernetes 컨트롤 플레인 자체 내에서 제공되며 가입하는 모든 새 노드에 대해 새 인증서가 발급됩니다. 내부용으로 CertificateSigningRequest 개체가 제공되지만 워크로드 자체에서 사용할 만큼 유연하지 않습니다.인증서 관리자
Cert-manager는 Kubernetes용 범용 x509 인증서 관리 도구입니다.
설치
❯ helm repo add jetstack https://charts.jetstack.io
"jetstack" has been added to your repositories
❯ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "jetstack" chart repository
Update Complete. ⎈Happy Helming!⎈
❯ helm install \
cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--version v1.9.1 \
--set installCRDs=true
NAME: cert-manager
LAST DEPLOYED: Mon Sep 19 08:45:10 2022
NAMESPACE: cert-manager
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
cert-manager v1.9.1 has been deployed successfully!
...
❯ kubectl get all -n cert-manager
NAME READY STATUS RESTARTS AGE
pod/cert-manager-85f68f95f-k9f6q 1/1 Running 0 2m19s
pod/cert-manager-cainjector-7d9668978d-lrtgn 1/1 Running 0 2m19s
pod/cert-manager-webhook-66c8f6c75-hq7lj 1/1 Running 0 2m19s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/cert-manager ClusterIP 10.96.27.186 <none> 9402/TCP 2m19s
service/cert-manager-webhook ClusterIP 10.96.27.27 <none> 443/TCP 2m19s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/cert-manager 1/1 1 1 2m19s
deployment.apps/cert-manager-cainjector 1/1 1 1 2m19s
deployment.apps/cert-manager-webhook 1/1 1 1 2m19s
NAME DESIRED CURRENT READY AGE
replicaset.apps/cert-manager-85f68f95f 1 1 1 2m19s
replicaset.apps/cert-manager-cainjector-7d9668978d 1 1 1 2m19s
replicaset.apps/cert-manager-webhook-66c8f6c75 1 1 1 2m19s
개념
발급자
인증서 서명 요청(CSR)을 통해 요청된 대로 인증서를 생성하는 CA를 나타내는 개체입니다. 네임스페이스 범위 리소스입니다. 운영 중인 네임스페이스 범위에서 유효한 인증서를 발급할 수 있습니다
클러스터 발급자
클러스터 범위가 있는 발급자 - 클러스터 전체에서 유효한 인증서를 발급할 수 있음
자격증
X.509 인증서를 정의하는 개체입니다. 이 인증서는 발급되며 cert-manager를 통해 갱신을 통해 최신 상태로 유지됩니다.
Issuer
를 통해 발급된 인증서는 네임스페이스 범위가 지정된 반면 ClusterIssuer
를 통해 발급된 인증서는 클러스터인증서 요청
Issuer
에서 인증서를 요청하는 데 사용되는 네임스페이스 리소스입니다. 여기에는 Issuer
로 전송된 base-64로 인코딩된 CSR이 포함되어 있습니다. 성공하면 CSR을 기반으로 유효하고 서명된 인증서를 반환합니다.more info
cert-manager는 Let's Encrypt을 사용하여 ACME Issuer을 포함하여 ACME 서버에서 인증서 요청을 지원합니다. 이러한 인증서는 일반적으로 대부분의 컴퓨터가 공용 인터넷에서 신뢰합니다. 인증서를 성공적으로 요청하려면 cert-manager는 클라이언트가 요청 중인 DNS 주소를 소유하고 있음을 증명하기 위해 완료된 ACME 챌린지를 해결해야 합니다.
주문하다
서명된 TLS 인증서에 대한 ACME '주문'의 수명 주기를 관리하기 위해 ACME 발급자가 사용하는 리소스입니다. 단일 CSR을 나타냅니다.
도전
리소스는 단일 DNS 이름/식별자에 대한 '권한 부여'를 완료하기 위해 완료해야 하는 ACME '도전'의 수명 주기를 관리하기 위해 ACME 발급자가 사용하는 리소스입니다.
challenge-controller
에 의해 생성되고 관리됩니다.more info
카인젝터
웹후크 및 기타 API 서비스에 대한 CA 인증서를 가져오는 데 도움이 됩니다.
caBundle
, ValidatingWebhookConfiguration
MutatingWebhookConfiguration
및 CustomResourceDefinition
의 네 가지 API 유형의 APIService
필드를 채웁니다. KubernetesSecret
, cert-managerCertificate
또는 Kubernetes API 서버 CA 인증서의 세 가지 소스 중 하나에서 CA 데이터를 복사합니다.참고: 소스가 Kubernetes
Secret
인 경우 해당 리소스에도 cert-manager.io/allow-direct-injection: "true"
주석이 있어야 합니다. 자체 서명된 인증서의 예
# assumption: cert-manager is installed and configured as described above
# Prepare a namespace
❯ kubectl create ns demo-ns
namespace/demo-ns created
# Prepare an issuer
❯ cat issuer.yaml
---
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: selfsigned-issuer
namespace: demo-ns
spec:
selfSigned: {}
# Create
❯ kubectl create -f issuer.yaml
issuer.cert-manager.io/selfsigned-issuer created
# Verify
❯ kubectl get issuers.cert-manager.io -n demo-ns
NAME READY AGE
selfsigned-issuer True 17s
# Create a Certificate object
❯ cat certificate.yaml
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: sample-certificate
namespace: demo-ns
spec:
secretName: sample-certificate
dnsNames:
- sample.demo-ns
issuerRef:
name: selfsigned-issuer
# Request for certificate
❯ kubectl create -f certificate.yaml
certificate.cert-manager.io/sample-certificate created
# Verify
❯ kubectl get certificate -n demo-ns
NAME READY SECRET AGE
sample-certificate True sample-certificate 10s
# Describe the secret
❯ kubectl get secrets/sample-certificate -n demo-ns -o yaml | cut -c -80
apiVersion: v1
data:
ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lRWjFCcU
tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lRWjFCc
tls.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcFFJQkFBS0NBUUVBNEdQT
kind: Secret
metadata:
annotations:
cert-manager.io/alt-names: sample.demo-ns
cert-manager.io/certificate-name: sample-certificate
cert-manager.io/common-name: ""
cert-manager.io/ip-sans: ""
cert-manager.io/issuer-group: ""
cert-manager.io/issuer-kind: Issuer
cert-manager.io/issuer-name: selfsigned-issuer
cert-manager.io/uri-sans: ""
name: sample-certificate
namespace: demo-ns
type: kubernetes.io/tls
# Inject secret to a validation webhook
❯ cat val-webhook.yaml
---
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
name: test-webhook
annotations:
cert-manager.io/inject-ca-from-secret: demo-ns/sample-certificate
webhooks:
- name: test-webhook.example.com
admissionReviewVersions:
- v1
clientConfig:
service:
name: test-webhook
namespace: demo-ns
path: /validate
port: 443
sideEffects: None
# Instantiate assuming test-webhook is a valid service in demo-ns pointing to port 443 to validate on /validate route
❯ kubectl create -f val-webhook.yaml
validatingwebhookconfiguration.admissionregistration.k8s.io/test-webhook created
# Verify
❯ kubectl get validatingwebhookconfigurations.admissionregistration.k8s.io
NAME WEBHOOKS AGE
cert-manager-webhook 1 137m
test-webhook 1 6s
Reference
이 문제에 관하여(Cert-manager: kubernetes에서 인증서 관리 자동화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ashokan/cert-manager-automate-certificate-management-5m텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)