ArgoCD 가 바라볼 SourceCommit 리포지토리를 만들어 줍니다.
해당 리포지토리에 ArgoCD에 배포할 yaml 파일을 저장하고 관리하기 위함 입니다.
ArgoCD CLI를 아래 명령어로 설치 합니다.
curl -LO https://github.com/argoproj/argo-cd/releases/download/v1.4.2/argocd-linux-amd64
chmod u+x argocd-linux-amd64
sudo mv argocd-linux-amd64 /usr/local/bin/argocd
export PATH=/usr/local/bin:$PATH
echo 'export PATH=/usr/local/bin:$PATH' >> ~/.bashrc
이제 네이버클라우드 콘솔로 가서 VPC 환경에서 NKS 쿠버네티스 클러스터를 생성 합니다.
생성 할 때 NATGateway 를 생성하여야 하며 라우팅 테이블에도 꼭 등록 해주셔야 나중에 수월 합니다.
생성 되는 동안 아래 URL 참고해서 Kubectl 설치를 합니다.
Kubectl 설치
설치가 완료 되면 아래 설정파일에서 다운로드 버튼을 클릭 합니다.
다운로드 받은 파일을 $HOME/.kube/config 경로에 넣어 줍니다.
아래와 같이 kubectl get nodes 했을 때 생성된 클러스터의 노드가 보이면 완료 된것 입니다.
NKS 클러스터가 준비 되었으니 이제 ArgoCD 를 인스톨 합니다
namespace를 지정하고자 한다면 -n 옵션으로 지정 합니다.
kubectl apply -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
아래와 같이 확인 합니다.
저는 default namespace 를 사용하였습니다.
로드밸런서(ALB)로 매핑을 하기 위해서 아래와 같이 type 을 NodePort 로 설정 합니다.
kubectl patch svc argocd-server -p '{"spec": {"type": "NodePort"}}'
또는 install.yaml 파일을 다운로드 받아서
wget https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
아래와 같이 type: NodePort 를 추가 하고 kubectl apply -f install.yaml 을 실행 합니다.
이제 ALB Ingress Controller 설치 합니다.
ALB Ingress Controller 를 통해 Kubernetes Ingress 를 Load Balancer(ALB)와 연동하여 트래픽을 라우팅 합니다.
kubectl apply -f https://raw.githubusercontent.com/NaverCloudPlatform/nks-alb-ingress-controller/main/docs/install/pub/install.yaml
저는 환경 변수 설정을 하지 않고 .kube/config 설정을 하였기에 --kubeconfig=$KUBE_CONFIG 생략하였습니다.
위와 같이 alb-ingress-controller 가 생성된 것을 확인 합니다.
이제 ArgoCD 로드밸런서에서 https 통신을 하기 위해 도메인과 ssl 인증서를 준비 합니다.
저는 가비아에서 500원짜리 저렴한 도메인을 하나 구매하고 무료 ssl 인증서인 Let's Encrypt 를 준비하였습니다.
Let's Encrypt 가이드는 아래 링크를 참고해주세요.
[이렇게 사용하세요!] Let's Encrypt 무료 SSL 인증서 발급부터 등록, 관리까지 (feat. Certificate Manager)
Global DNS 에 argcd.도메인 A링크 서버Public IP 를 등록 하였습니다.
아래와 같이 certbot 을 생성하고 argocd.도메인 에 대한 인증서를 생성 하였습니다.
생성한 인증서를 네이버클라우드 Certificate Manager 에 등록 합니다. 등록 시 아래 링크를 참고해주세요.
네이버클라우드플랫폼 Certificate Manager에 LetsEncrypt 인증서 등록
최종 아래와 같이 등록 합니다.
아래와 같이 argocd-ingress.yaml 을 만들어 주고 kubectl apply -f argocd-ingress.yaml 을 실행 합니다.
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: argocd-alb-ingress
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS":443}]'
alb.ingress.kubernetes.io/backend-protocol: HTTPS
alb.ingress.kubernetes.io/ssl-certificate-no: "8374"
alb.ingress.kubernetes.io/actions.ssl-redirect: |
{"type":"redirection","redirection":{"port": "443","protocol":"HTTPS","statusCode":301}}
labels:
app: argocd-alb-ingress
name: argocd-alb-ingress
spec:
backend:
serviceName: argocd-server
servicePort: 80
rules:
- http:
paths:
- backend:
serviceName: ssl-redirect
servicePort: use-annotation
- host: argocd.도메인
http:
paths:
- backend:
serviceName: argocd-server
servicePort: 443
위 host: 에 argocd.도메인 에서 도메인은 구매한 도메인주소로 수정해 주세요.
명령어로 ingress 생성을 확인 합니다. 그리고 콘솔에서로드밸런서가 생성된걸 확인 합니다.
생성된 로드밸런서 endpoint 주소를 복사하여 콘솔의 Global DNS 메뉴로 이동하여 앞서 등록했던 argocd.도메인 의 A링크를 Cname 타입으로 수정하고 기존 Public IP 값을 지우고 붙여넣기 합니다.
최종 아래와 같이 argocd.도메인 주소를 호출하여 확인 합니다.
4부에서는 argocd 접속과 설정을 합니다.