[쿠버네티스] Argocd TLS/SSL 적용
1. ca 키생성
openssl genrsa -out ca.key 4096
2. ca 인증성생성
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Osong/L=Osong/O=invako/OU=Personal/CN=192.168.2.50" \
-key ca.key \
-out ca.crt
3. 서버 인증서 개인키 생성
openssl genrsa -out argocd.co.kr.key 4096
3. 인증서 서명요청(CSR)
/* CN은 도메인이나 아이피 입력 */
openssl req -sha512 -new \
-subj "/C=CN/ST=South/L=Osong/O=invako/OU=Personal/CN=argocd.co.kr" \
-key argocd.co.kr.key \
-out argocd.co.kr.csr
4. x509 v3 확장 파일을 생성합니다
호스트에 연결하기 위해 FQDN 또는 IP 주소를 사용하는지 여부에 관계없이
SAN(주체 대체 이름) 및 x509 v3을 준수하는 호스트에 대한 인증서를 생성할 수 있도록
이 파일을 생성해야 합니다.
확장 요구 사항. DNS도메인을 반영하도록 항목 을 바꿉니다.
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=invako.kro.kr
DNS.2=nginx.co.kr
DNS.3=zipkin.co.kr
DNS.4=argocd.co.kr
EOF
# DNS 에 실제사용하는 도메인주소 입력
5.v3.ext 파일을 사용하여 호스트에 대한 인증서를 생성한다.
openssl x509 -req -sha512 -days 3650 \
-extfile v3.ext \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in argocd.co.kr.csr \
-out argocd.co.kr.crt
6. 쿠버네티스 시크릿생성
kubectl create secret tls tlssecret-argocd --key argocd.co.kr.key --cert argocd.co.kr.crt -n argocd
7. 서비스 생성
vi argocd-server-svc.yml
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/component: server
app.kubernetes.io/name: argocd-server
app.kubernetes.io/part-of: argocd
name: argocd-server
namespace: argocd
spec:
# clusterIP: 10.111.108.21
# clusterIPs:
# - 10.111.108.21
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- name: http
nodePort: 30316
port: 80
targetPort: 8080
- name: https
nodePort: 31865
port: 443
targetPort: 8080
selector:
app.kubernetes.io/name: argocd-server
type: NodePort
8. ingress.yaml 파일생성
vi ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: argocd-server-ingress
namespace: argocd
annotations:
kubernetes.io/ingress.class: nginx
kubernetes.io/tls-acme: "true"
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
# nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
# nginx.ingress.kubernetes.io/ssl-passthrough: "true"
# nginx.ingress.kubernetes.io/rewrite-target: /
labels:
env: production
tier: backend
app: argocd
name: argocd-server-ingress
spec:
tls:
- hosts:
- argocd.co.kr
secretName: tlssecret-argocd
ingressClassName: nginx
rules:
- host: argocd.co.kr
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: argocd-server
port:
name: https
# number: 443
9 실행
kubectl create -f argocd-server-svc.yml
kubectl create -f ingress.yaml
10. 브라우저 https 확인