기본 지식
8482 단어 certificatetech
cert-manager란?
kubernetes 클러스터에서 SSL/TLS 인증서를 간단하게 처리하는 도구입니다.
인증서의 취득, 갱신, 사용이 간단해졌다.
공식 문서
이 글의 내용
이 글에서는 cert-Manager를 사용하면서 최소한 통제해야 할'증명서 발행·활용 프로세스'와'등장인물'만 간단히 정리했다.
증명서 주변에서는 사고가 나면 귀찮아서 만지고 싶지 않을 수도 있지만 기초 지식을 먼저 알고 싶은 것이 최초의 발판이다.
cert-manager v1.이어서 6.1의 이야기를 하겠습니다.
또한 Let's Encerypt를 Issuer의 프로세스로 설명하기 때문에 다른 Issuer Type에는 다른 내용이 있습니다.
인증서 발행 및 사용의 간단한 절차
우선 대략적인 절차를 하나 써라.
실제 설치 방법과 조작 등 상세한 내용은 공식 문서에 넘길 것이다.
Issuer
어셈블리를 생성합니다.Certificate
어셈블리를 생성합니다.Issuer
, Certificate
구성 요소의 설정에 따라 지정한 인증서 발행인에게 지정한 영역의 인증서를 요청합니다.チャレンジ
.チャレンジ
가 완료되면 발행된 인증서와 키는 Secret 자원에 저장됩니다.인증서와 키가 저장된 시크릿은 참조
Ingress
등을 통해 인증서로 암호 통신을 할 수 있습니다.등장인물
cert-Manager는 인증서를 취득하고 이용할 때 관련 등장인물을 소개한다.
Issuer
Issuer
구성 요소는 Custom Resource Definition(CRD)에 의해 정의된 자원입니다.Issuer
구성 요소는 같은namespace에서만 발행할 수 있습니다Certificate
.ClusterIssuer
구성 요소를 사용합니다.Certificate
여기 기사.에 통속적이고 알기 쉽게 썼다.
ACME Orders and Challenges
チャレンジ
라고 불리는 메커니즘이다.チャレンジ
을 완성하기 위해cert-Manager는 다음 두 개의 CRD를 가져옵니다.Order
Challenge
Order
チャレンジ
는 실행 요청을 나타낸다.チャレンジ
의 상세한 내용은 여기.이다.Challenge
표시
チャレンジ
.Order
하나에 대해 여러 도메인Challenge
을 생성합니다.Challenge
대기열에서 순서대로 처리합니다.チャレンジ
완성 후Challenge
자원이 Kubernetes 그룹에서 사라집니다.Ingress
Ingress
에서 참고하고 사용합니다.Ingress
cert-Manager가 CRD로 정의하는 리소스가 아닙니다.등장인물별 manfest 파일 샘플
위에서 말한 바와 같이 다음 세 가지 자원은 사용자가 manfest 파일을 제작하고 관리해야 한다.
Issuer
Certificate
Ingress
문서 견본
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: YOUR_ISSUER_NAME
spec:
acme:
email: "[email protected]"
server: https://acme-staging-v02.api.letsencrypt.org/directory
privateKeySecretRef:
name: lets-encrypt
solvers:
- dns01:
cloudDNS:
project: example-com
serviceAccountSecretRef:
name: prod-clouddns-svc-acct-secret
key: service-account.json
Issuer
의 manfest 중 가장 중요한 것은 metadata.name
와spec以下
이다.metadata.name
가 바로 이 자원의 명칭이다.중요한 것은 다른 자원에서 이 자원을 인용하는 것이다.spec以下
타입에 따라 다릅니다.이번에는 Let's Encerypt를 사용하는 전제조건이기 때문에Issuer
.이 manfest는 Staging 환경의 Let's Encerypt 서버에 대한 실행
spec.acme
입니다. GCP의 클라우드 DNS를 사용하세요. DNS01チャレンジ
라는 GCP 프로젝트의 클라우드 DNS를 사용하기 위해example-com
이 시크릿 자원에 서비스 계정의 신용도를 놓았습니다.다른 IssuerType 또는 ACME를 사용하여 다른 설정을 선택할 때는 공식 문서를 참조하십시오.
문서 견본
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: YOUR_CERTIFICATE_NAME
spec:
secretName: YOUR_SECRET_NAME
dnsNames:
- example.com
issuerRef:
name: YOUR_ISSUER_NAME
kind: Issuer
prod-clouddns-svc-acct-secret
구성 요소의 manfest 파일에 Certificate
,secretName
,dnsNames
의 필드가 존재합니다.issuerRef
에서 지정한 dnsNames
에서 지정한 issuerRef
에서 Issuer
에서 지정한 영역의 인증서를 받습니다.secretName
Kubernetes의 Secret 자원 이름을 지정합니다.이 Secret은 실제 키와 인증서를 저장합니다.manfest 파일을 설정하면
example.com
인증서는 YOUR_ISSUER_NAME
라는 Issueer
에서 가져오고 인증서와 키는 YOUR_SECRET_NAME
라는 Secret 자원에 저장됩니다.실제 시크릿에 저장된 예는 다음과 같습니다.
$ kubectl get secret ${YOUR_SECRET_NAME}
apiVersion: v1
kind: Secret
data:
tls.crt: LS0tLaa.....
tls.key: LS0tLOU....
creationTimestamp: "2022-00-00T00:00:00Z"
labels:
certmanager.k8s.io/certificate-name: YOUR_SECRET_NAME
name: YOUR_SECRET_NAME
namespace: YOUR_NAMESPACE_NAME
...
...
인증서data.tls.crt
는 인증서 값을 포함하고 data.tls.key
는 키 값을 포함한다.이 값을 사용하여 암호 통신을 실현합니다.
참고로 실제 인증서의 값은 Secret에만 존재합니다.
헷갈리기 쉽습니다.
Certificate
자원에 인증서 값이 존재하지 않습니다.대신 인증서 실효, 예정일 갱신 등의 정보를 포함한다.
$ kubectl get Certificate ${YOUR_CERTIFICATE_NAME}
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
creationTimestamp: "2022-01-13T12:19:50Z"
generation: 1
name: YOUR_CERTIFICATE_NAME
namespace: YOUR_NAMESPACE_NAME
spec:
commonName: example.com
dnsNames:
- example.com
issuerRef:
kind: Issuer
name: YOUR_ISSUER_NAME
secretName: YOUR_SECRET_NAME
status:
conditions:
- lastTransitionTime: "2022-01-13T12:19:50Z" # 2022/1/13に作成
message: Certificate is up to date and has not expired
observedGeneration: 1
reason: Ready
status: "True"
type: Ready
notAfter: "2022-04-13T11:21:25Z" # 90日後の2022/4/13に失効
notBefore: "2022-01-13T11:21:26Z"
renewalTime: "2022-03-14T11:21:25Z" # 60日後の2022/3/14に更新予定
revision: 1
문서 견본
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
cert-manager.io/issuer: YOUR_ISSUER_NAME
name: YOUR_INGRESS_NAME
namespace: YOUR_INGRESS_NAME
spec:
rules:
- host: example.com
http:
paths:
- pathType: Prefix
path: /
backend:
service:
name: YOUR_SERVICE_NAME
port:
number: 80
tls:
- hosts:
- example.com
secretName: YOUR_SECRET_NAME
tls.hosts[0].secretName
에 인증서와 키를 가진 시크릿의 이름을 입력함으로써 Ingress는 인증서를 참조하여 암호 통신을 실현한다.즉
Certificate
의manfest 내spec.secretName
값과 같으면 OK라는 것이다.총결산
간단하게 말하면 manfest 파일의 샘플을 포함하여cert-관리자가 인증서를 취득하고 사용하는 절차를 소개했다.
cert-Manager의 공식 문서가 비교적 충실해서 나는 배울 만하다고 생각한다.
관심 있는 사람이 자세히 읽어보면 재미있을 거예요.
Reference
이 문제에 관하여(기본 지식), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/masaaania/articles/e54119948bbaa2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)