- èæ¯
- ã¤ã³ã¹ãã¼ã«ãã
- CAãä½ã
- trust-managerã§é å¸ãã
- å®éã«TLSãæå¹åãã¦éä¿¡ãã
- CAã®æ´æ°
- ã¯ã©ã¹ã¿å¤ã¨ã®éä¿¡ã®æå·å
- ã¾ã¨ã
èæ¯
è¿å¹´ãèªç¤¾ãã¼ã¿ã»ã³ã¿ã¼å ã®éä¿¡ã§ãã£ã¦ãçè´ãé²ããããã«éä¿¡ãæå·åãããã¨ãæ±ãããã¦ããããã¡ã®å®¶ã®Kubernetesã¯ã©ã¹ã¿ã§ããªãã¨ãªãéä¿¡ãæå·åãããããªã¨ããæ°æã¡ã«ãªã£ãã䏿¹ããµã¼ãã¹ã¡ãã·ã¥ã«ããmTLSã®ãããªæ¯è¼çéåãªä»çµã¿ãå°å ¥ããã®ã¯ãã¾ãååãã«ãªãããåã«ã¯ã©ã¹ã¿å ã§ä½¿ããè¨¼ææ¸ãcert-managerããçºè¡ãã¦åãµã¼ãã¹ãæ±ããã¨ã§éæã§ããªããèããã
cert-managerã§self-signedãªè¨¼ææ¸ãä½ã£ã¦ãããã®è¨¼ææ¸ã®secretã«ããca.crtãªã©ãèªããªããã°ä»ã®ãµã¼ãã¹ããã¯æ¤è¨¼ã§ããªãããã£ã¦ãã¯ã©ã¹ã¿å ã®éä¿¡ã§ã¡ããã¨TLSã使ãããã«ã¯secretã®åç §æ¨©éããã¡ãã¡ã«æ¸¡ãã¦åç §ãããããã¯ã©ã¤ã¢ã³ãå´ã§æ¤è¨¼ã®ã¹ããããªã©ãå¿ è¦ã§ãã£ãã
æ¤è¨¼ãã¹ãããããã¨ãããã¨ã¯ããã£ããæå·åãã¦ããã®ã«å½ã®éä¿¡å ã«ç¹ãã§ãã¾ã£ãã¨ããã®æ å ±ãæ¼æ´©ããã¦ãã¾ããããã¯ããåã«éª¨ãåºãã£ããããªæ°æã¡ã«ãªãããã ããã®ããã«ã¯ã©ã¹ã¿å ã§ä½¿ãå ¨ã¦ã®è¨¼ææ¸ãLetâs Encryptãªã©ããçºè¡ãããã¨ã¯ã§ããªããããã©ãã«ãä¿¡ç¨ã§ãããªã¬ãªã¬è¨¼ææ¸ãè¦åããããããã«ãããã
cert-managerã¨åãéçºå ãéçºãã¦ããtrust-managerã¯ãç°¡åã«è¨ãã¨ã¯ã©ã¹ã¿å ã«CAè¨¼ææ¸ãã°ãã¾ãå½¹å²ãæã¤ãã¯ã©ã¹ã¿å ã§å ±éãã¦å©ç¨ããåä¸ã®CAã¨ããã®CAããè¨¼ææ¸ãçºè¡ããIssuerã使ã£ã¦åãµã¼ãã¹ãTLSãæå¹åããããã«ããããããã«æ¥ç¶ããå¥ã®ãµã¼ãã¹ã¯ãtrust-managerãånamespaceã«ç¨æããCAè¨¼ææ¸ã使ã£ã¦ãµã¼ãããæç¤ºãããè¨¼ææ¸ãæ¤è¨¼ã§ããããã«ãªãã
ã¤ã³ã¹ãã¼ã«ãã
ãµã³ãã«ã¨ãã¦kindã§ä½æããKubernetesã¯ã©ã¹ã¿ä¸ã§è¡ãã
kind create cluster --name tls-example
helmã§ã®ã¤ã³ã¹ãã¼ã«ãæ¨å¥¨ããã¦ããã®ã§helmã使ããcert-manager namespaceã«trust-managerãã¤ã³ã¹ãã¼ã«ããã
å ã«cert-managerãã¤ã³ã¹ãã¼ã«ããã
helm repo add jetstack https://charts.jetstack.io --force-update helm update helm install cert-manager jetstack/cert-manager \ --namespace cert-manager \ --create-namespace \ --set crds.enabled=true
ããã¦trust-managerãã¤ã³ã¹ãã¼ã«ããã
helm upgrade \ --install \ --namespace cert-manager \ --wait \ trust-manager jetstack/trust-manager
CAãä½ã
cert-managerã使ã£ã¦ã¯ã©ã¹ã¿å ã§ä½¿ãããã®CAãç¨æãããCAã®æå¹æéãã©ããããã«ãããã¯æ©ã¾ããããç¾ç¶CAã®æ´æ°ã¯ããããé¢åï¼å¾è¿°ï¼ãªã®ã§ãæ¯è¼çé·ãã«åãã
--- # èªå·±ç½²åè¨¼ææ¸ãä½ãããã®issuerãä½ã apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: selfsign spec: selfSigned: {} --- # ä¸è¨ã®issuerã使ã£ã¦CAè¨¼ææ¸ãçºè¡ãã apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: internal-ca-2024 namespace: cert-manager spec: # selfsignãªissuerãæã issuerRef: name: selfsign kind: ClusterIssuer group: cert-manager.io # ãããå¿ é isCA: true commonName: internal-ca-2024 secretName: internal-ca-2024-secret # æå¹æéã10å¹´ã¨ãã duration: 87600h # 24h * 365d * 10y # å®ã¯ä½¿ããªããé©å½ãªæ´æ°æ¥æãè¨å®ãã¦ãã renewBefore: 336h # 24h * 14d # 好ã¿ã§ã¢ã«ã´ãªãºã è¨å®ãã privateKey: algorithm: ECDSA size: 256
æå¾ã«ããã®CAã使ã£ã¦è¨¼ææ¸ãçºè¡ããissuerãä½ãããã®ã¯ã©ã¹ã¿å ã®ãµã¼ãã¹ééä¿¡ã§TLSãæå¹åããã¨ãã¯ãã®issuerããè¨¼ææ¸ãçºè¡ãã¦ä½¿ãã
apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: internal spec: ca: # å ã»ã©ä½æããCAè¨¼ææ¸ã®secretãæã secretName: internal-ca-2024-secret
trust-managerã§é å¸ãã
trust-manager㯠Bundle
ã¨ããã«ã¹ã¿ã ãªã½ã¼ã¹ã使ããããã§é
å¸ããããã¡ã¤ã«ãªã©ã夿´ã§ããã
--- apiVersion: trust.cert-manager.io/v1alpha1 kind: Bundle metadata: name: internal-ca-bundle namespace: cert-manager spec: sources: # Debianã®ããã©ã«ãã®ca-certificatesãå«ãã¦é å¸ããã # ãã®ã³ã³ããã«ca-certificatesãã¤ã³ã¹ãã¼ã«ããªãã¦ããtrust-managerã§é å¸ã§ããããã«ãªã # Ref: https://cert-manager.io/docs/trust/trust-manager/#securely-maintaining-a-trust-manager-installation - useDefaultCAs: true - secret: # ä»å使ããCAè¨¼ææ¸ãé å¸ããããã«secretã®ååãæå®ãã name: "internal-ca-2024-secret" # 該å½ããsecretå ã®ã©ããé å¸ããã key: "tls.crt" target: # é å¸ããrootè¨¼ææ¸ãä¿åããå ãæ±ºããã # ããã§ã¯config mapã¨ãã¦ä¿åãããã®keyã `trust-bundle.pem` ã¨ããã configMap: key: "trust-bundle.pem" # namespaceSelectorãç¹ã«è¨å®ããªãå ´åãå ¨ã¦ã®namespaceã«é å¸ããã # ãã ãããã®æåã¯å°æ¥çã«å¤æ´ãããã¨æ¸ããã¦ããã # Ref: https://cert-manager.io/docs/trust/trust-manager/#namespace-selector # ãã®æåã夿´ãããã¨ãã¯ããããããã¤ã°ã¬ã¼ã·ã§ã³ã¬ã¤ããæ¸ãããã®ã§å¾ããªããã°ãªããªã # ä¾ãã°ä»¥ä¸ã®ã©ãã«ãæã¤å ´åã«config mapãä½ãããã«ãããªã©ã®è¨å®ãåºæ¥ãã # namespaceSelector: # matchLabels: # your.label.io: "inject-ca"
ããã«ããå
¨ã¦ã®namespaceã« internal-ca-bundle
ã¨ããConfigMapã使ãããã
⯠kubectl get cm internal-ca-bundle -n cert-manager NAME DATA AGE internal-ca-bundle 1 1m
useDefaultCAs: true
ãã®è¨å®ãå
¥ãããã¨ã§ãtrust-managerãé
å¸ãããã¡ã¤ã«ã«Debianã® ca-certificates
ããã±ã¼ã¸ç¸å½ã®å
容ãå«ãããã¨ãåºæ¥ããscratchãã¼ã¹ã®ã³ã³ããå
ããã¤ã³ã¿ã¼ãããä¸ã®httpsãªã¨ã³ããã¤ã³ãã«æ¥ç¶ãããã¨ãã¦ãè¨¼ææ¸ã®æ¤è¨¼ã«å¤±æããçµé¨ã®ãã人ãå¤ãã ããããã®ããã«distrolessã¤ã¡ã¼ã¸ããã¼ã¹ã«ãã«ããç´ãã¦ä½¿ã£ã¦ãã人ãå¤ãã¨æããtrust-managerã使ããã¨ã§ãscratchãã¼ã¹ã®ã¤ã¡ã¼ã¸ã§ãca-certificatesãã¤ã³ã¹ãã¼ã«ãããã¨ãªãå¤é¨ã®è¨¼ææ¸ãæ¤è¨¼ã§ããã
ãªããåæã«ææ°ã«è¿½å¾ãã¦ãããããã§ã¯ãªãã®ã§ã¡ã³ããå¿ è¦ã§ããã
https://cert-manager.io/docs/trust/trust-manager/#securely-maintaining-a-trust-manager-installation
å®éã«TLSãæå¹åãã¦éä¿¡ãã
ãµã³ãã«ã®å®è£ ããªãã¸ããªã«ç¨æãã¦ããã
ç°¡åãªgRPCã®ãã«ã¹ãã§ãã¯ãå®è£ ããAPIãµã¼ãã®ã³ã³ããã¤ã¡ã¼ã¸ã¨ãgrpcurlãã¤ã³ã¹ãã¼ã«ããã ãã®Ubuntuã®ã¤ã¡ã¼ã¸ããã«ãããã
git clone https://github.com/pddg/example-trust-manager cd example-trust-manager docker build . -f Dockerfile -t tls-example-server docker build . -f Dockerfile.bastion -t tls-example-bastion
ãã®ã¤ã¡ã¼ã¸ãkindã§ä½ã£ãã¯ã©ã¹ã¿å ã«ãã¼ãããã
kind load docker-image tls-example-server:latest --name tls-example kind load docker-image tls-example-bastion:latest --name tls-example
bastion Podããããã¤ããããã®Podã«ã¯trust-managerã§é å¸ããConfigMapããã¦ã³ãããã¦ããã
volumeMounts: - mountPath: /internal-ca-bundle name: internal-ca-bundle readOnly: true volumes: - configMap: name: internal-ca-bundle name: internal-ca-bundle
kubectl apply -f manifests/04-bastion.yaml
TLSãæå¹åããAPIãµã¼ãããããã¤ãã
ã¾ãã¯å©ç¨ããè¨¼ææ¸ãä½ãã
apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: server namespace: secure spec: secretName: server-tls commonName: api # ã¢ã¯ã»ã¹ããååãæ¸ã dnsNames: - api - api.secure.svc - api.secure.svc.cluster.local # internal issuerã使ã£ã¦è¨¼ææ¸ãçºè¡ãã issuerRef: name: internal kind: ClusterIssuer group: cert-manager.io
kubectl apply -f manifests/06-cert.yaml
è¨¼ææ¸ã¨ã対å¿ããSecretã使ããã¦ããã¯ãã ã
⯠kubectl get cert server -n secure NAME READY SECRET AGE server True server-tls 4h20m ⯠kubectl get secret server-tls -n secure NAME TYPE DATA AGE server-tls kubernetes.io/tls 3 4h20m
gRPCã§ã¯ãcert-managerã§ä½æããè¨¼ææ¸ã®secretå ã«ããtls.crtã¨tls.keyã以ä¸ã®æ§ã«èµ·åæã«æ¸¡ããã¨ã§ãTLSãæå¹åã§ããã
var serverOptions []grpc.ServerOption if tlsKeyPath != "" || tlsCertPath != "" { cred, err := credentials.NewServerTLSFromFile(tlsCertPath, tlsKeyPath) if err != nil { return fmt.Errorf("failed to create transport credential: %w", err) } serverOptions = append(serverOptions, grpc.Creds(cred)) } server := grpc.NewServer(serverOptions...)
Podå ã«ä½æããSecretããã¦ã³ãããèµ·åæã®ãªãã·ã§ã³ã§ãããã¸ã®ãã¹ã渡ãã¦èµ·åãã*1ã
kubectl apply -f manifests/07-tls-server.yaml
ãµã¼ãã¨éä¿¡ãã
bastion Podãããã®APIã«å¯¾ãã¦grpcurlã§ãªã¯ã¨ã¹ããæãã¦ã¿ããã¾ãã¯ç¹ã«ä½ãè¨å®ããæããã
⯠kubectl exec bastion -- grpcurl api.secure.svc:443 grpc.health.v1.Health/Check Failed to dial target host "api.secure.svc:443": tls: failed to verify certificate: x509: certificate signed by unknown authority command terminated with exit code 1
ãã®å ´åã certificate signed by unknown authority
ã¨ã©ã¼ã§å¤±æããããã®bastionä¸ã«ã¯ca-certificatesã¯ã¤ã³ã¹ãã¼ã«ããã¦ããããã¤ã³ã¹ãã¼ã«ããã¦ããã¨ãã¦ããªã¬ãªã¬èªè¨¼å±ããçºè¡ããããªã¬ãªã¬è¨¼ææ¸ã§ããããåæ§ã®ã¨ã©ã¼ã§å¤±æããã
ä¸å¿ãã®ç¶æ
ã§ãã -insecure
ãªãã·ã§ã³ã使ã£ã¦è¨¼ææ¸ã®æ¤è¨¼ãã¹ããããããã¨ã§æå·åããéä¿¡èªä½ã¯è¡ããã䏿¹ãèæ¯ã§èª¬æããã¨ããããã¯èå¼±ãªç¶æ
ã§ããã
⯠kubectl exec bastion -- grpcurl -insecure api.secure.svc:443 grpc.health.v1.Health/Check { "status": "SERVING" }
ããã§ãgrpcurlã«ä¿¡é ¼ã§ããCAè¨¼ææ¸ãæå®ãã¦åæ§ã«ã¢ã¯ã»ã¹ãã¦ã¿ããtrust-managerã«ãã£ã¦ånamesaceã«é
å¸ããã¦ãããbastion Podã«ã¯ /internal-ca-bundle/trust-bundle.pem
ã¨ãããã¹ã«ãã¦ã³ãããã¦ããã
volumeMounts: - mountPath: /internal-ca-bundle name: internal-ca-bundle readOnly: true volumes: - configMap: name: internal-ca-bundle name: internal-ca-bundle
⯠kubectl exec bastion -- grpcurl -cacert /internal-ca-bundle/trust-bundle.pem api.secure.svc:443 grpc.health.v1.Health/Check { "status": "SERVING" }
éä¿¡å ã®ãµã¼ãã¹ã¯internal-ca-bundleã«å å ããã¦ããCAè¨¼ææ¸ã§æ¤è¨¼å¯è½ãªè¨¼ææ¸ãå©ç¨ãã¦ããããããã®éä¿¡ã¯æ¤è¨¼ãã¹ãããããªãã¦ãéããããã§selfsignãªissuerããçºè¡ããå ¨ãå¥ã®ãªã¬ãªã¬è¨¼ææ¸ã«å·®ãæ¿ããã¨ãéä¿¡ãéããªããã¨ããããã ããã
CAã®æ´æ°
ãã¡ããå®è³ªç¡æéã®ãããªCAè¨¼ææ¸ãçºè¡ãããã¨ã¯å¯è½ã ããããã¤ãã®çç±ã«ããæ´æ°ãæ¨å¥¨ããã¦ãããä¾ãã°å©ç¨ããã¢ã«ã´ãªãºã ãæä»£ã®å¤åã¨å ±ã«èå¼±ã¨è¦ãªãããããã«ãªã£ãããããã¨ãªã©ãä¸ãããããcert-managerã§çºè¡ããCAãããã©ã«ãã§ã¯90æ¥ã®æéãããªãããããã«90æ¥ãã¨ã«ï¼å¾è¿°ãããããªé¢åãªæé ã«ããï¼æåã§æ´æ°ããã®ã¯ç¾å®çã§ã¯ãªããä»åã¯ç¹ã«æ ¹æ ç¡ã10å¹´ã¨ãã¦ãããããããã©ã®ç¨åº¦ã«ãããã¯äººã«ããã ããã
cert-managerã¨trust-managerã¯çºè¡ãããCAã®æ´æ°ã«å¯¾ãã¦èªååãããæ¹æ³ãã»ã¨ãã©æä¾ãã¦ããããç¾ç¶ã¯ããç¨åº¦æåã®ä½æ¥ãæ±ããããã
cert-managerã¯è¨å®ãããæé .spec.duration
ããç¶äºå .spec.beforeRenew
å¼ããæ¥æãè¶
ããã¨ãæ´æ°ãéå§ãã*2ãããã§å¤ãå
容ã¯ç ´æ£ããã以éã§ãã®CAã使ã£ã¦çºè¡ãããè¨¼ææ¸ã¯æ°ããCAã®ãã®ã«ãªããtrust-managerã¯ãã®CAãæ´æ°ãããã¨ãã«Bundleã«ãããå«ã¾ãã¦ããã°ãæ´æ°ãã¦é
å¸ããããã£ã¦ãã®æç¹ä»¥éã«æ°ããèµ·åããPodã¯ãã¾ã å¤ãè¨¼ææ¸ã使ã£ã¦ãµã¼ãããã¦ãããµã¼ãã¹ã¸ã¢ã¯ã»ã¹ããã¨æ¤è¨¼ã«å¤±æãã¦æ¥ç¶ã§ããªããªã£ã¦ãã¾ãã
ãã¦ã³ã¿ã¤ã ãé¿ããããã«ã¯ããããã以ä¸ã®æ§ãªæé ã§æ´æ°ããå¿ è¦ãããã
- å¤ãCAã®æå¹æéãåããããååãªä½è£ãæã£ã¦æ°ããé·ãã®æéãæã¤CAãä½ãã
- Bundleã«1ã®CAè¨¼ææ¸ãå«ãã¦é
å¸ããã
- ãã以éã«èªã¿è¾¼ãã Podã§ã¯æ°ããCAã®è¨¼ææ¸ãæ£ããæ¤è¨¼ã§ããã
- 確å®ã«ãããªãããã®æç¹ã§å ¨ã¦ã®ããã»ã¹ããããèªã¿è¾¼ãããã«ãã¼ãªã³ã°ã¢ãããã¼ãããã
- æ¢åã®ClusterIssuerã§ä½¿ãããCAã1ã«å¤æ´ããã
- 以éã«çºè¡ãããè¨¼ææ¸ã¯å¤ãCAè¨¼ææ¸ã§ã¯æ¤è¨¼ã§ããªãã2ã§æ´æ°ãããå 容ãèªã¿è¾¼ãã§ããªããµã¼ãã¹ã¯æ°ããè¨¼ææ¸ã使ããµã¼ãã¹ã«ã¢ã¯ã»ã¹åºæ¥ãªããªãã
- ãããåãæ¿ããã ãã§ã¯æ¢åã®è¨¼ææ¸ã¯æ´æ°ãããªãã
- æ¢åã®è¨¼ææ¸ãå
¨ã¦1ã®CAããçºè¡ããããã®ã«åãæ¿ãããå
¨ã¦ã®ããã»ã¹ã§èªã¿è¾¼ã¾ããã¾ã§å¾
ã¤ã
- ãããã¯cert-managerã®ã¯ã©ã¤ã¢ã³ãã³ãã³ãã§ãã
cmctl
ã³ãã³ãã§æ´æ°ãããªã¬ã¼ããæ´æ°ãããå¾ã«ãã¼ãªã³ã°ã¢ãããã¼ãããã
- ãããã¯cert-managerã®ã¯ã©ã¤ã¢ã³ãã³ãã³ãã§ãã
- å¤ãCAãç ´æ£ãã
éãç¹ãããã ãã®çãæéã®CAã使ããã¨ãã§ããããåã«ãã®æé ãäºåå®è¡ãããã¨ã«ãªãã ãã§ããããããã¾ããªããããåç´ã«æ°ãããã®ãä½ã£ãæ¹ãæ¥½ã«æãããããã®ããã«çµæ§è¤éãªæé ãè¸ãã§æ´æ°ããªããã°ãã¦ã³ã¿ã¤ã ãçºçãã¦ãã¾ããããããç¨åº¦é·ãæéãè¨å®ããããå¾ãªãã ããã
CAã®ä¿ç®¡å ´æ
ãã®ããã«é·æéã«ããã£ã¦çåãããã®ã§ãããæªç¨ãããã¨å®¹æã«ãã®çµç¹å ã§ä¿¡é ¼ã§ããè¨¼ææ¸ãä½ããã¦ãã¾ãããã使ããCAã®secretã¸ã¢ã¯ã»ã¹ã§ãã人ã¯éå®çã«ãã¦ããã¹ãã§ããããã®å ´åcert-managerã®namespaceã«å ¥ãã¦ããããã®namespaceã¸ã®ï¼ç¹ã«secretã¸ã®ï¼ã¢ã¯ã»ã¹ã¯å³éã«ç®¡çãããã¹ãã ããã
ã¾ããä»åã¯ClusterIssuerã§èª°ã§ãè¨¼ææ¸ãçºè¡ã§ããããã«ãã¦ããããå®éã«ããã§è¯ããã¯ããçåã®æ®ãæã§ããã
ã¯ã©ã¹ã¿å¤ã¨ã®éä¿¡ã®æå·å
å½ç¶çºè¡ãããCAè¨¼ææ¸ãå¤é¨ã®ç°å¢ã«æã¡åºããã¨ã§ãã¯ã©ã¹ã¿å¤ã¨ããã®è¨¼ææ¸ã使ã£ã¦éä¿¡ãããã¨ã¯å¯è½ã§ããã䏿¹ããããã®ç®¡çãæ´æ°æ¹æ³ã®æ¤è¨ãèªåã®ãã®ã¨ã¯ããããªã¤ã³ãããä¿¡é ¼ã§ããã«ã¼ãè¨¼ææ¸ã¨ã¯ç°ãªããã®ãæã¡è¾¼ãã¨ãããªã¹ã¯ãèããã¨ãå°ãªãã¨ãä¸è¬å®¶åºã®ã¬ãã«ã§ã¯ãã¾ããããããã®ã§ã¯ãªãã
ç¾ä»£ã§ã¯ãACMEã®DNS-01ãã£ã¬ã³ã¸ã«ããå¤é¨ããã¢ã¯ã»ã¹å¯è½ãªãµã¼ãã®ãªãã¯ãã¼ãºããªç°å¢ã§ãè¨¼ææ¸ã®èªåçºè¡ã»æ´æ°ãããããããªã£ã¦ãããKubernetesã®Ingressã³ã³ããã¼ã©ãä¾ãã°nginx-ingress-controllerãcontourãªã©ã§å¤é¨ããã®éä¿¡ã«ãããTLSçµç«¯ãæ ããããã§ã¯Letâs EncryptãZero SSLã使ã£ã¦çºè¡ããè¨¼ææ¸ã使ãã®ãè¯ãã ãããããããã¯ã©ã¹ã¿å åãã®éä¿¡ã¯ä»åã®ãããªãªã¬ãªã¬è¨¼ææ¸ã§æå·åããã¨ããæ¹å¼ãæ¡ç¨ã§ããã
ã¾ã¨ã
trust-managerã¨cert-managerã使ããã¨ã§ãã¯ã©ã¹ã¿å ã§ä½¿ããããªã¬ãªã¬è¨¼ææ¸ã®æ£ãããæ¯è¼çç°¡åã«æ¤è¨¼ã§ããããã«ãªããã¾ããscratchãã¼ã¹ã®ã¤ã¡ã¼ã¸ã®ãããªä¿¡é ¼ã§ããè¨¼ææ¸ãæ¤è¨¼ããè¡ãæããªãã³ã³ããã¤ã¡ã¼ã¸ã«ããå¾ãããã®ããã®ãã¡ã¤ã«ã追å ã§ããã
ãã ãcert-managerããã³trust-managerã¯ä½æãããªã¬ãªã¬CAã®æ´æ°ã«é¢ãã¦ãèªååãããæ¹æ³ãæä¾ãã¦ããªããæ´æ°æ¹æ³ã¯æ¯è¼çè¤éãã¤å¤±æããã¨ãã¦ã³ã¿ã¤ã ãä¼´ããããè¨ç»çã«è¡ããªããã°ãªããªãã
ããã§ä½ã£ãè¨¼ææ¸ã¯ããã¾ã§ã¯ã©ã¹ã¿å éä¿¡ã«çããã¯ã©ã¹ã¿å¤ã¨ã®éä¿¡ã¯DNS-01ãã£ã¬ã³ã¸ãªã©ãæ´»ç¨ãã¦Letâs Encryptãªã©ããçºè¡ããã¡ããã¨ããè¨¼ææ¸ãä½¿ãæ¹ãè¯ãã
ã¯ã©ã¹ã¿å éä¿¡ã®æå·åããµã¼ãã¹ã¡ãã·ã¥ã«ä»»ããã«ããæ¹æ³ããããã¨ãã話ã§ããã
*1:ãªããKubernetesã®gRPCã使ã£ãliveness/readiness probeã¯TLSã«å¯¾å¿ãã¦ããªããããå¥ã®ã¨ã³ããã¤ã³ãã使ãå¿ è¦ãããï¼refï¼ãä»åã¯æ¤è¨¼ç¨ãªã®ã§åã«liveness probeãç¡å¹åãã¦ããã
*2:å®éã«ã¯durationã®2/3ã¨beforeRenewã®ã©ã¡ããé ãæ¹