ArgoCD 헬름차트 + ALB 인그레스 리디렉션 무한루프 해결책

IT/EKS 2022. 8. 19. 11:50
반응형

아르고CD에 함정이 있댜

LB에서 뒤로 보낼 때 꼭 프로토콜 HTTPS로 해서 보내셈

안그러면 443 리디렉션 무한루프 타는 버그가 있음 ㅇㅇㅇ 

kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
  annotations:
    kubernetes.io/ingress.class: alb #ALB 인그레스 컨트롤러 설치했다면 아마 디폴트로 이 이름일것임
    alb.ingress.kubernetes.io/subnets: 서브넷id-a, b, c
    alb.ingress.kubernetes.io/scheme: internet-facing #퍼블릭
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/backend-protocol: HTTPS #이거 주의하셈. HTTP가 아니라 https로 박으셈. 내가 보기에 무한루프 리디렉션 버그로 보임
    alb.ingress.kubernetes.io/actions.response-404: '{"Type": "fixed-response", "FixedResponseConfig": {"ContentType":"text/plain", "StatusCode":"404", "MessageBody":"404 page not found"}}'
    alb.ingress.kubernetes.io/inbound-cidrs:  "1.2.3.4/32" #대충 인바운드 SG
    alb.ingress.kubernetes.io/certificate-arn: ACM인증서 arn임
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
    alb.ingress.kubernetes.io/healthcheck-path: /
  name: argocd-ingress 
  namespace: argocd    
spec:
  rules:
  - http:
      paths:
      - backend:
          service:
            name: argo-cd-argocd-server # SVC명인데, 이거 argocd 헬름차트로 설치하면 {릴리즈명}-argocd-server로 되니까 참고하셈
            port:
              number: 80 # 443으로는 안보내봤음. 기타 사람들 확인바람
        path: /*
        pathType: Prefix

 

대충 내 환경에서 정상 동작한 인그레스 yaml.임

pathType은 공홈 참조 고고. 아마 아르고 공홈에선 Imple을 디폴트로 박았을것임.

 

 

아 그리고 내가 헬름차트로 설치한 argo는 다음과 같음.

helm upgrade --install argo-cd argo/argo-cd -n argocd -f values.yaml --version 4.10.7

value 파일에는 HA구성대신 전부 싱글로 설치되는 옵션임.

상세 옵션값은 아티팩트허브 들어가보길 권장함 ㅇㅇ. 헬름 레파랑 뭐 등등 설치하는것 가이드 간단하게 나와있음.

https://artifacthub.io/packages/helm/argo/argo-cd

 

argo-cd 4.10.7 · argoproj/argo

A Helm chart for Argo CD, a declarative, GitOps continuous delivery tool for Kubernetes.

artifacthub.io

 

아 헬름 value 자체에 인그레스 설정값 박을 수 있는데, 레퍼런스가 없어서 그냥 쿠버 독립 인그레스 템플릿으로 배포해도 됨. (위에 내가 한 방식 ㅇㅇ)

아르고 서버 헬름 값의 인그레스 value임. 궁금한 점 있으면 레퍼런스 많이 나올거같음 ㅇㅇ;

 

무튼 argo CD 인그레스를 ALB로 설치한다면 조심하셈들

 

반응형

'IT > EKS' 카테고리의 다른 글

아르고CD 계정관리  (0) 2022.08.24
ArgoCD 아르고 오토싱크 interval  (0) 2022.08.19
AWS EC2 Amazonlinux2 homebrew 인스톨  (0) 2022.08.19
linkerd 파는 중  (0) 2022.08.17
Jaeger / Telemetry 텔레메트리 Feat. 예거  (0) 2022.08.08

설정

트랙백

댓글

linkerd 파는 중

IT/EKS 2022. 8. 17. 10:22
반응형

이스티오와 대표 차이점으로, 

링커d는 게이트웨이 따로 필요 없음

이스티오는 별도 LB와 게이트구간이 존재.

 

뭣보다 링커d가 좀 더 쉽게 접근이 가능하다는건 개인 기분일수도 있음 ㅇㅇ

반응형

설정

트랙백

댓글

Jaeger / Telemetry 텔레메트리 Feat. 예거

IT/EKS 2022. 8. 8. 08:55
반응형

대략 3주 정도 예거트레이서 관련하여 샘플링을 시도해보았댜.

 

한마디 감상문 : 레퍼런스가 참 없어서 맨땅에 헤딩하듯 개발했다. 참고로 쉬운구조가 절대 아니다. 긴장빠셈.

한마디 감상문2 : 트레이서의 코어는 인프라가 아니라, 실제로는 코드부분이다 (예거는 그냥 거들뿐)

한마디 감상문3 : 아 올인원 타입은 절대 깔지마라. 이왕이면 그냥 바로 프로덕션 버전처럼 디커플링된거로 가셈.

한마디 감상문4 : 뭐 인제스터에 ES 인덱스 클리너 등등 겁나 자질구레한거 엄청 붙어있는데, 밑에 볼드체 + 언더라인 한거 구조를 기반으로 나머지 가져다 붙이셈. 

 

아직은 크게 쓰기 힘들다보니, 대략 요약만 하고, 이후 좀 더 내용 보완하겠댜 ㅇㅇ

 

예거 클라리언트 (코드부분)  >  예거 에이전트 (사이드카 컨테이너 or 데몬셋 파드)  >  예거콜렉터  >  예거DB (ES or 카산드라)  

그리고 예거DB를 조회해서 두더지 그림 나오게하는 UI가 바로 예거UI. 그리고 옵션으로 예거UI 접근 가능하게 인그레스나 뭐 프록시 등등 달아줄 수 있음

( 이 위에 구조 그림으로 봐야 이해되는데, 꼭 레퍼런스 보셈. 그래야 트레이서 이해가 감)

 

예거 클라이언트는 2가지가 있댜.

1. 예거 클라이언트 : 오리지널인데 지금 Deprecation. 그냥 시한부 선언받음

2. 텔레메트리 : 트레이서. 추적정보 제공하는 라이브러리. 예거도 얘를 쓰라 함.

 

예거 인프라를 설치하는데는 2가지가 있댜. (올인원은 뺀다.)

1. 예거 오퍼레이터 : 까보면 1만줄짜리 CRD. 쿠버 버전 종속이 엄청 심해서 버전 바뀔때마다 얘도 버전 계속 바껴야함. 자신있으면 이거로 깔고 덤비셈. 

2. 예거트레이싱 : 쿠버네티스 네이티브 리소스로 구성함. 과거 오퍼레이터로 설치할 때, 얘는 베타였음 (대략 21년 1월). 지금은 스테이블 / 릴리즈 버전으로 나온거같음. jaeger tracing 헬름차트 검색해보면 나올거임. 참고로 jaeger-operator 헬름 차트도 있는데, 이건 그냥 CRD를 내가 까냐 아니면 헬름이 까냐 차이임. 난 그냥 jaeger-tracing 을 차트로 깔았음

 

예거 DB도 2종류댜

1. ES : 범용 검색엔진. 그냥 얘가 쉬우니 이거로 까셈.

2. 카산드라 : k-v nosql이댜. 잘 구성할 줄 모르는 사람은 객기부리지 말고 ES로 깔아서 가는거 추천함.

 

예거 에이전트도 2종류댜

1. 데몬셋 : 그냥 각 노드마다 데몬으로 깐다. 제일 쉽다. 추적정보 보낼 때, 앱에서 목적지를 예거 에이전트 데몬의 SVC명으로 입력하면 알아서 집어넣는다. 단점으로, 트레이서 클라이언트 없는 애들의 노드 입장에선 이건 비용 낭비임. 근데 예거 데몬 깔 때, 어떤 노드한테만 줄래? 이것도 선택 가능함 ㅇㅇ

2. 사이드카 컨테이너 : 파드 = 컨테이너1 이 가장 관리하기 쉬운데, 원래 파드는 컨테이너 n개를 조합해서 하나의 서비스로 구성하고, 내부를 로컬호스트로 통신할 수 있게 했다. (아 말은 쉽지 운영관리가 어려워요..) 그래서 실제 어플리케이션 옆으로 예거에이전트 사이드카 컨테이너를 붙여서, 로컬호스트로 추적정보를 컨테이너 로컬호스트로 보내는거다. 인프라 관리 입장에선 쉬운데, 개발자나 데브옵스 입장에서 환장할 노릇 펼쳐지지.. 이거까지 관리하긴 싫거든 ㅇㅇ;

결론 : 모르면 그냥 데몬셋으로 까셈

 

예거 에이전트에 넣어야하는, 실제 추적정보를 수집하는 트레이서 라이브러리 또한 2개댜

이건 그냥 오픈텔레메트리 쓰셈. 필수임.

1. 예거 클라이언트 : 원래 초창기 라이브러리. 지금은 지원 안함. 예거 공홈가서 보셈.

2. 오픈텔레메트리 : 최신버전임. 근데 가이드나 메뉴얼이 참 보는사람으로 하여금 불편하게 되어있음. 앵간한 샘플코드도 없어. 내가 조만간 올려줄테니 기둘리셈 ㅡㅡ; 무튼 강제적으로라도 오픈 텔레메트리 쓰셈. 

 

 

대강 개요는 이렇고, 미술점수가 항상 안좋았고 정장빼고 옷입는거에도 크게 관심없고 꾸미지도 못해서 그냥 하얀건 바탕이요 검정건 글씨다 타입임 ㅇㅇㅇ 이해좀 해줘요들

이 글은 조만간 내가 샘플 개발 앱이랑 도커파일, 헬름차트 등등 어떻게 설치했는지 그 파일들은 공유해서 수정토록 할게 ㅇㅇ

 

 

 

반응형

설정

트랙백

댓글

EKS nginx 인그레스 Dynamic Config 관련 no connection drop

IT/EKS 2022. 8. 1. 10:13
반응형

nginx 인그레스 리스너 패스 적용 시, 간간히 몇개의 커넥션 리셋 / 드랍 에러가 튀 나옴

별로 보고 싶지 않아서 여러개를 찾아보다가, enable-dynamic-configuration 이 최신 버전 들어서면서부터 default로 적용된 것을 확인헀댜 ㅇㅇㅇ

 

과거 버전에서는 false로 되어있던 것을, true로 켜줘야만 했던 것 같다. 그래봤자 2019년이지만..

이 스레드는 동적 컨피그 적용이 안된다고 하는 문제댜

https://github.com/kubernetes/ingress-nginx/issues/2985 

 

Nginx ingress keeps reloading and dropping connections · Issue #2985 · kubernetes/ingress-nginx

Is this a request for help? I don't know. Either it is a bug or I am misunderstanding some concept What keywords did you search in NGINX Ingress controller issues before filing this one? (If yo...

github.com

 

이 qna 스레드는 동적 컨피그 적용 시, 커넥션 드랍 / 클로즈를 피하는 방법을 문의하는건데, 똑같이 enable-dynamic-config 옵션 모드를 통해 설정하라 되어있댜

https://github.com/kubernetes/ingress-nginx/issues/2461

 

Ingress controller dropping websocket connections when performing backend reload · Issue #2461 · kubernetes/ingress-nginx

NGINX Ingress controller version: 0.12.0 and 0.14.0 Kubernetes version (use kubectl version): v1.8.0 Environment: aws with elb Cloud provider or hardware configuration: aws m4 medium OS (e.g. from ...

github.com

 

 

 

 

nginx 0.12.0 에서 enable-dynamic-config 아규먼트가 등장했고.

0.22.0 에서 아예 이 아규먼트가 사라졌다.

https://github.com/kubernetes/ingress-nginx/pull/3252

 

remove the command args of enable-dynamic-configuration by hchenxa · Pull Request #3252 · kubernetes/ingress-nginx

What this PR does / why we need it: as PR 74c2f93 have only support dynamic configuration enabled, so the command args can not be used any more. Which issue this PR fixes (optional, in fixes #<issu...

github.com

 

지금은 1.0 버전이상으로 되니, 아예 동적 컨피그를 끌 수 있는 방법이 없어졌댜.

https://github.com/kubernetes/ingress-nginx/issues/2985

 

Nginx ingress keeps reloading and dropping connections · Issue #2985 · kubernetes/ingress-nginx

Is this a request for help? I don't know. Either it is a bug or I am misunderstanding some concept What keywords did you search in NGINX Ingress controller issues before filing this one? (If yo...

github.com

 

오래전 스레드에 그레이스풀 셧다운을 높이라고는 되어있는데, 0.3x 버전 nginx에서는 디폴트가 240초, 4분이다.

이정도의 기간에도 불구하고 커넥션 드랍 / 순단이 생기는 것은 영 어쩔수 없나봉가...

정답은 dynamic config를 끄고, 수동으로 재적용 시키는 방법을 쓰고 싶은데 현재로선 방법이 도저히 없는 것 같댜 ㅇㅇ 

 

 

반응형

설정

트랙백

댓글

헬름차트 - 예거 트레이서와 프로메테우스 상호간 버그

IT/EKS 2022. 7. 22. 11:54
반응형

헬름차트로 예거를 설치하고 프로메테우스를 설치하면, 프로메테우스가 기동되지 않는 상태

예거 헬름차트 설치 후, 프로메테우스 파드 재기동이 안됨 ㅇㅇ;

  • 추정 사유 : 예거 에이전트가 환경변수를 프로메테우스 파드로 주입 시, 프로메테우스 측에서 이를 명시하지 않을 경우 오류 발생 
  • 프로메테우스 커뮤니티 측에서는 예거보다는 프로메테우스의 버그로 취급하는 모양이며, 명확한 솔루션이 제공되어 있음 → 예거에이전트 환경변수를 명시적으로 프로메테우스 파드에 추가
  • 레퍼런스
 

[stable/prometheus-operator] JAEGER_AGENT_PORT invalid syntax · Issue #22769 · helm/charts

Describe the bug See report here: prometheus/prometheus#7286. level=error ts=2020-05-23T09:56:29.187Z caller=main.go:508 msg="Unable to init tracing" err="unable to get tracing confi...

github.com

 

오퍼레이터와 CRD를 그렇게 좋아하지 않는 개인 입장에서, 가장 바닐라틱하게 쓰기 위해 예거를 헬름으로 설치했댜

 

근데 이 상태에서 프로메테우스 재기동할 때 이슈가 생겼던 부분이었는데, 한번 동일 이슈일경우 참고해보도록 하쟈 ㅇㅇㅇ

반응형

설정

트랙백

댓글