
Kubernetes 애플리케이션의 자동 배포를 위한 오픈소스
클러스터에 배포된 애플리케이션의 CI/CD 파이프라인에서 CD를 담당

현재 상황이다..
외부에서 하나의 공인 IP로 하나의 Port로만 접속이 가능한 상황이다.
ArgoCD 또한 Reverse Proxy를 이용해 접속해야 한다.(슬픈 상황..)
ubuntu 24.04 에서 진행
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
# argocd-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: argocd-ingress
namespace: argocd
annotations:
kubernetes.io/ingress.class: "nginx"
alb.ingress.kubernetes.io/ssl-passthrough: "true"
nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
spec:
rules:
- http:
paths:
- pathType: Prefix
path: /argocd
backend:
service:
name: argocd-server
port:
name: http
host: argo.org.local
kubectl apply -f argocd-ingress.yaml
kubectl edit configmap argocd-cmd-params-cm -n argocd
data:
server.insecure: "true"
server.rootpath: "/argocd"
server.basehref: "/argocd"
api version 하단에 내용 추가 및 저장
kubectl rollout restart deployment argocd-server -n argocd
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'
kubectl get svc -n argocd
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
argocd-applicationset-controller ClusterIP 10.108.173.90 <none> 7000/TCP,8080/TCP 119m
argocd-dex-server ClusterIP 10.105.209.145 <none> 5556/TCP,5557/TCP,5558/TCP 119m
argocd-metrics ClusterIP 10.100.97.133 <none> 8082/TCP 119m
argocd-notifications-controller-metrics ClusterIP 10.100.239.62 <none> 9001/TCP 119m
argocd-redis ClusterIP 10.107.175.183 <none> 6379/TCP 119m
argocd-repo-server ClusterIP 10.108.105.140 <none> 8081/TCP,8084/TCP 119m
argocd-server NodePort 10.106.35.203 <none> 80:31195/TCP,443:30791/TCP 119m
argocd-server-metrics ClusterIP 10.107.207.161 <none> 8083/TCP 119m
argocd-server의 타입 변경 완료. (노드 포트 확인)
그림의 Nginx Server에서 진행
sudo vi /etc/nginx/sites-available/default
upstream kubernetes_argocd {
server 10.0.0.2:31195;
server 10.0.0.3:31195;
server 10.0.0.4:31195;
}
server {
listen 8080;
server_name _;
location / {
proxy_pass http://kubernetes_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_hide_header Content-Type;
add_header Content-Type text/html;
add_header X-Content-Type-Options nosniff;
proxy_buffers 16 16k;
proxy_buffer_size 16k;
}
location /argocd/ {
proxy_pass http://kubernetes_argocd;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_ssl_verify off;
proxy_buffers 16 16k;
proxy_buffer_size 16k;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
proxy_redirect off;
sub_filter '<base href="/"' '<base href="/argocd/"';
sub_filter_once on;
}
}
최 하단에 추가
sudo systemctl restart nginx
cat /var/log/nginx/error.log

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d && echo
kubectl logs argocd-server
~~
time="2024-10-05T13:40:32Z" level=warning msg="Failed to resync revoked tokens. retrying again in 1 minute: dial tcp: lookup argocd-redis: i/o timeout"
kubectl get po -n kube-system
kubectl delete po core-dns -n kube-system x 2
kubectl delete po dex-server
kubectl delete po application-controller
kubectl delete po redis
kubectl delete po server
이건 Prod 용 배포가 아니다!
보안적인 요소는 전부 배제하고 http로 진행했으니, Prod 배포를 원한다면 이 글을 참고하면 안된다!실제 운영 환경에서는
HTTPS 사용, 적절한 인증 및 권한 설정, 네트워크 보안 강화 등 추가적인 보안 조치가 필요하다!