티스토리 뷰
쿠버네티스 클러스터에 ingress 컨트롤러가 설치되어 있는지 확인한다.
만약 없다면 설치하고 설치한 ingress 컨트롤러 타입을 기억하고 인증서를 발급할 도메인을 준비한다. (예: abc.com)
1. Service 배포
# vi deploy-web.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: pghmv2sm.kr.private-ncr.ntruss.com/webweb:1.0 # 컨테이너 이미지는 알아서 변경
ports:
- containerPort: 80
imagePullSecrets:
- name: regcred
nodeSelector:
ncloud.com/nks-nodepool: kr2-node-01
---
apiVersion: v1
kind: Service
metadata:
name: web
spec:
type: NodePort
selector:
app: web
ports:
- protocol: TCP
port: 80
kubectl create -f deploy-web.yaml
2. cert-manager 배포
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.3/cert-manager.yaml
# or
helm repo add jetstack [https://charts.jetstack.io](https://charts.jetstack.io)
helm repo update
kubectl create namespace cert-manager
helm install cert-manager jetstack/cert-manager --namespace cert-manager --version v1.12.0 --set installCRDs=true
# cert-manager 설치 확인
kubectl get pod -n cert-manager
3. Let's Encrypt issuer 구성
아래 yaml 파일에서 이메일 주소(spec.acme.email)와 ingress 타입(spec.acme.solvers.selector[0].http01.ingrss.class)을 확인하고 nginx
또는 traefik
등 자신이 사용할 ingress 타입을 기입한다.
# vi cluster-issuer.yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory # The ACME server URL
email: user@example.com # Email address used for ACME registration
privateKeySecretRef: # Name of a secret used to store the ACME account private key
name: letsencrypt-prod
solvers: # Enable the HTTP-01 challenge provider
- http01:
ingress:
class: nginx # 자신의 ingress 컨트롤러 타입 기재
cluster issuer 생성 및 생성 여부 확인
kubectl create -f cluster-issuer.yaml
# Issuer 상태 확인
kubectl describe clusterissuer letsencrypt-prod
4. TLS Ingress 리소스 배포
# vi web-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-ingress
annotations:
kubernetes.io/tls-acme: "true"
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/proxy-body-size: "100M"
cert-manager.io/cluster-issuer: letsencrypt-prod # 클러스터 이슈어 (cluster-issuer.yaml)에서 지정한 명칭
spec:
tls:
- hosts:
- abc.com # 인증서를 적용할 도메인으로 변경
secretName: web-devbox-kr-cert # 인증서 key가 저장되는 secret
rules:
- host: abc.com # 인증서를 적용할 도메인으로 변경
http:
paths:
- path: /
backend:
service:
name: web
port:
number: 80
kubectl create -f web-ingress.yaml
kubectl get certificate -A
kubectl describe certificate web-devbox-kr-cert
kubectl describe secret web-devbox-kr-cert
4. 브라우저로 접속 확인
'Server & Etc > Kubernetes' 카테고리의 다른 글
Ubuntu 20.04 서버에 K3s 클러스터 구성하기 (0) | 2022.05.19 |
---|
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크