개요 §
- 이름 그대로 Pod 가 특정 CA 를 신뢰하도록 도와주는 툴이다.
- 작동 방식은 무식하다.
Bundle 이라는 걸로 특정 CA cert 를 지정하면, 그 CA cert 를 모든 (혹은 지정한) namespace 에 전부 ConfigMap 으로 복사해서 해당 namespace 에 있는 pod 들이 사용할 수 있게 한다.
설치 §
kubectl create ns {{Trust manager namespace 이름}}
- Helm values
- 여기서
.app.trust.namespace 는 source CA cert 가 있는 namespace 를 말한다. 당연히 cert-manager 의 namespace 를 사용해야 한다.
app:
trust:
namespace: {{Cert manager namespace 이름}}
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm -n {{Trust manager namespace 이름}} upgrade --install trust-manager jetstack/trust-manager -f values.yaml
Resources §
Bundle §
- 위에서 말한 것 처럼,
Bundle 이라는 것으로 pod 가 신뢰할 CA cert 들을 ConfigMap 의 형태로 namespace 들에게 복사하게 할 수 있다.
useDefaultCAs 는 앵간하면 true 여야 한다. 이게 없으면 지정한 CA ‘만’ 신뢰하고 다른 기본 CA 들 (가령 Let’s Encrypt 같은 애들) 은 신뢰하지 않는다.
{{CA cert 이름}} 은 신뢰하고자 지정하는 secret 의 이름이다.
- cert-manager 의
Certificate resource 를 생성하면 동일한 이름의 secret 이 생성되므로 Certificate resource 의 이름이라고 생각해도 된다.
- 가령 이 템플릿 에서는
{{Root CA cert 이름}} 이다.
- 당연히 이 secret 은 type 이
kubernetes.io/tls 이고, 그래서 ca.crt key 가 무조건 있다.
apiVersion: trust.cert-manager.io/v1alpha1
kind: Bundle
metadata:
name: {{Bundle 이름}}
spec:
sources:
- useDefaultCAs: true
- secret:
name: {{CA cert 이름}}
key: ca.crt
target:
configMap:
key: ca-certificates.crt