시스템/쿠버네티스

[쿠버네티스] Argocd TLS/SSL 적용

cbwstar 2024. 1. 24. 13:34
728x90
반응형

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 확인

https://argocd.co.kr:30200 

728x90
반응형