EKS + Fargate에서 ArgoCD 사용
8877 단어 kubernetesargocdfargateeks
I will not go through all the steps required to configure ArgoCD, but some troubles I encountered.
ArgoCD의 이 문서documentation는 ArgoCD를 Kubernetes 클러스터에 설치하고 애플리케이션을 동기화(배포)하는 방법에 대한 모든 정보를 제공합니다.
그러나 Fargate를 사용하는 EKS에서 ArgoCD API 서버에 액세스하려고 할 때 몇 가지 문제가 발생했습니다.
Fargate 포드는 프라이빗 서브넷 내에서만 시작할 수 있으므로 Kubernetes Ingress를 사용하여 외부 세계의 요청을 실제 포드로 라우팅해야 합니다. 그리고 AWS Load-Balancer-Controller 애드온을 사용하면 Kubernetes Ingress를 생성할 때 대신 AWS Application Load Balancer를 프로비저닝하여 프론티어의 모든 요청을 수락합니다.
You can install AWS Load-Balancer-Controller add-on following this documentation.
ArgoCD와 AWS Load-Balancer-Controller 추가 기능을 모두 EKS 클러스터에 설치하면 ArgoCD API 서버에 연결할 수 없습니다. 이는 ArgoCD API 서버를 실행하는 포드가 포트 8080을 사용하여 노출되고 포드에 연결된 보안 그룹이 기본적으로 8080의 인바운드 요청을 수락하지 않기 때문입니다. 이로 인해 대상 그룹에서 ALB의 상태 확인이 실패합니다.
따라서 ArgoCD API 서버 포드에 대한 새 보안 그룹을 정의하고 적용해야 합니다.
이렇게 하려면 this documentation을 따르기만 하면 됩니다.
Pod에 연결할 새 보안 그룹은 아래 요구 사항을 충족해야 합니다.
새로운 보안 그룹을 생성하고 아래 yaml 파일을 적용해 봅시다.
# argocd-pod-sg-policy.yaml
apiVersion: vpcresources.k8s.aws/v1beta1
kind: SecurityGroupPolicy
metadata:
name: argo-sgp
namespace: argocd
spec:
podSelector:
matchLabels:
app.kubernetes.io/name: argocd-server
securityGroups:
groupIds:
- ${NEW_CREATED_SECURITY_GROUP_ID}
- ${EKS_CLUSTER_SECURITY_GROUP_ID}
위의 yaml 파일을 적용하고 새로운 SecurityGroupPolicy를 생성해 봅시다. 또한 이 새로운 SecurityGroupPolicy는 이미 실행 중인 포드에 적용되지 않으므로 모든 ArgoCD API 서버 포드를 다시 시작해야 합니다.
kubectl delete --all pod -n argocd
마지막으로 새로운 AWS Application Load Balancer를 프로비저닝할 Kubernetes Ingress를 정의해 보겠습니다.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: argocd-ingress
namespace: argocd
annotations:
alb.ingress.kubernetes.io/load-balancer-name: argocd-alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/subnets: ${PUBLIC_SUBNET_IDS}
alb.ingress.kubernetes.io/certificate-arn: ${ACM_CERT_ARN}
alb.ingress.kubernetes.io/security-groups: ${ALB_SECURITY_GROUP}
alb.ingress.kubernetes.io/backend-protocol: HTTPS
alb.ingress.kubernetes.io/conditions.argogrpc: |
[{"field":"http-header","httpHeaderConfig":{"httpHeaderName": "Content-Type", "values":["application/grpc"]}}]
alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]'
spec:
ingressClassName: alb
rules:
- host: dev-argocd.planit-study.com
http:
paths:
- path: /
backend:
service:
name: argogrpc
port:
number: 443
pathType: Prefix
- path: /
backend:
service:
name: argocd-server
port:
number: 443
pathType: Prefix
위의 yaml 파일에서
argogrpc
라는 서비스를 사용했습니다.ArgoCD API 서버는 gRPC와 HTTP/HTTPS 모두에서 실행됩니다.
gRPC는 ArgoCD CLI의 요청을 처리하는 데 사용되고 HTTP/HTTPS는 UI(웹) 요청에 사용됩니다.
gRPC 요청만 제공하는 새 서비스를 만드는 것이 이상적이므로 ArgoCD 설명서에도 있는 서비스를 만들어 보겠습니다.
apiVersion: v1
kind: Service
metadata:
annotations:
alb.ingress.kubernetes.io/backend-protocol-version: HTTP2
labels:
app.kubernetes.io/name: argocd-server
name: argogrpc
namespace: argocd
spec:
ports:
- name: "443"
port: 443
protocol: TCP
targetPort: 8080
selector:
app.kubernetes.io/name: argocd-server
sessionAffinity: None
type: NodePort
이제 CLI와 웹(UI)을 통해 ArgoCD API 서버에 성공적으로 액세스할 수 있습니다! 그리고 그게 다야! 이 포스팅이 도움이 되셨으면 합니다 :)
Reference
이 문제에 관하여(EKS + Fargate에서 ArgoCD 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aws-builders/using-argocd-on-eks-fargate-47lb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)