cert manager letsencrypt - choisungwook/portfolio GitHub Wiki
- cert-manager let's encrypt ๋ฐ๊ธ
- ์ธ๋ถ ํต์ ์ด ๋๋ ํ๊ฒฝ
- ๋๋ฉ์ธ๊ณผ cloudflare ์ฐ๋
- ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ
- cert-manager ์ค์น
- cloudflare api token์ ์์ฑํ๊ณ ์ฟ ๋ฒ๋คํฐ์ค secret์ ์ ์ฅ
cloudflare api-token -> k8s secret ์์ฑ๋ฐฉ๋ฒ: https://cert-manager.io/docs/configuration/acme/dns01/cloudflare/#api-keys
- ๋ชจ๋ ๋ค์์คํ์ด์ค์ ์ ์ฉ๋๋ ์ธ์ฆ์ ์ฃผ์ฒด๋ฅผ ์์ฑ
- ์ธ์ฆ์ ์ฃผ์ฒด๋ stage, prod๋ก ๋ถ๋ฅ
- solver๋ dns-01์ ์ฌ์ฉํ๊ณ provider๋ cloudflare์ ์ฌ์ฉ
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-staging
spec:
acme:
# The ACME server URL
server: https://acme-staging-v02.api.letsencrypt.org/directory
# Email address used for ACME registration
email: <your@email>
# Name of a secret used to store the ACME account private key
privateKeySecretRef:
name: letsencrypt-staging
# Enable the challenge provider
solvers:
- dns01:
cloudflare:
email: <your-email>
apiTokenSecretRef:
name: cloudflare-api-key-secret #cloudflare api token
key: api-tokenapiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
# The ACME server URL
server: https://acme-v02.api.letsencrypt.org/directory
# Email address used for ACME registration
email: <your@email>
# Name of a secret used to store the ACME account private key
privateKeySecretRef:
name: letsencrypt-prod
# Enable the challenge provider
solvers:
- dns01:
cloudflare:
email: <your-email>
apiTokenSecretRef:
name: cloudflare-api-key-secret #cloudflare api token
key: api-tokenapiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: test-staging-test
spec:
secretName: test-abcde
issuerRef:
name: test-staging
kind: ClusterIssuer
commonName: 'choilab.xyz'
dnsNames:
- choilab.xyz
- test3.choilab.xyzapiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-test3
labels:
app: nginx-test3
spec:
replicas: 1
selector:
matchLabels:
app: nginx-test3
template:
metadata:
labels:
app: nginx-test3
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-test3
spec:
selector:
app: nginx-test3
ports:
- port: 80
targetPort: 80
type: NodePort
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-test3
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
tls:
- hosts:
- test2.choilab.xyz
secretName: test-abcde
rules:
- host: test2.choilab.xyz
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: nginx-test3
port:
number: 80apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-test3
annotations:
kubernetes.io/ingress.class: "nginx"
cert-manager.io/issuer: "prod"
spec:
tls:
- hosts:
- test2.choilab.xyz
secretName: stage-test-prod-4 # ์์ฑํ ์ธ์ฆ์๊ฐ ์ ์ฅ๋๋ secret
rules:
- host: test2.choilab.xyz
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: nginx-test3
port:
number: 80