쿠버네티스 일반/Network 7

EKS External DNS - Terraform IRSA + Helm

TL; DR; . IRSA(by 테라폼) + 헬름으로 External DNS 설치 경험을 공유합니다. . eksctl도 가능하지만 테라폼을 이용하여 IRSA를 설치하면 코드(IaC)로 남아서 좀 더 관리가 용이합니다. 1. External DNS IRSA 테라폼으로 EKS 관련 모듈(ebs-csi-controller, aws load balancer controller)을 IRSA + 헬름까지 설치할 수 있습니다. 하지만 테라폼으로 헬름까지 설치하는 것은 테라폼 State가 맞지 않는 경우 디버깅을 해야 하는 위험 + 번거로움이 있어 개인적으로는 테라폼은 IRSA까지만 설치하는 것을 선호합니다. AWS 관련 리소스(IAM, VPC 등)는 테라폼으로 쿠버네티스 애플리케이션은 헬름 + ArgoCD로 설치, ..

gRPC in EKS ALB + aws lb controller

TL; DR; . grpc는 nlb + ingress-nginx-controller 설정으로 에러가 발생하여 alb + aws load balancer controller로 해결하였다. . ingress로 설정한 alb는 특이하게 path를 '/'가 아닌 '/*'로 지정해야 한다. 작업 내역 기존 REST 방식이 아닌 gprc는 nlb + ingress-nginx-controller로 설정하면 에러가 발생하였다. ### SERVER SIDE ingress-nginx-controller-6997b74f67-fgbb7 controller 10.0.197.170 - - [15/Jun/2023:05:11:33 +0000] "PRI * HTTP/2.0" 400 150 "-" "-" 0 0.003 [] [] - -..

AWS NLB EKS 환경에서 사용자 IP 파드로 전달

사용자의 IP를 파드까지 정상적으로 전달하도록 작업한 내역을 공유한다. TL;DR AWS NLB는 L4 기반이라 L7 Application LB의 x-forwarded-for 설정없이 client-ip 전달이 가능 하지만 쿠버네티스의 Proxy 구조 상 외부 LB에서 받은 트래픽이 전체 클러스터의 노드를 거쳐서 파드로 전달되기 때문에 파드에는 client ip가 아닌 노드 IP가 기록됨 externalTrafficPolicy을 Local로 변경하면 노드 IP가 아닌 client ip 전달 가능. 하지만 설정을 변경하면 전체 클러스터의 노드가 아닌 ingress controller가 설치된 노드에서만 트래픽을 전달하여 ingress controller가 설치된 노드(통상 이중화를 위한 2개의 노드)만 트래..

Tailscale VPN for 쿠버네티스 & VPC

최근에 EKS, AWS VPC 환경에서 Tailscale VPN을 잘 사용하고 있어 내용을 공유한다. TL;DR Tailscale VPN을 1) EKS 환경에서 LoadBalancer, Ingress 등을 추가 설정하지 않고 ClusterIP 타입 그대로 VPN을 사용하는 사용자에게 외부 노출 2) EC2 사용하는 VPC의 전체 네트워크를 Tailscale VPN으로 연결 EC2 VM이 아닌 쿠버네티스 파드로 실행할 수 있어 EC2 VM 비용을 절감할 수 있다. 추가로 Deployment로 실행하면 파드 다운 시 자동 실행되니 관리 포인트도 줄어든다. ClusterIP는 YAML 파일에서 ClusterIP를 고정할 수 있어, 서비스를 재시작해도 IP가 변경되지 않는다. 쿠버네티스 DNS 이름을 그대로 사..

Kubernetes Ingress-NGINX on EKS

이직하고 EKS에 ingress-nginx 설정한 내용들 정리합니다. 1. Ingress-nginx on EKS 설정 내용 헬름 파일 이용 설치 LB 타입으로 CLB가 아닌 NLB 사용 AWS 인증서 적용 - 헬름 배포 시 변수 파일로 지정하여 설치 시 자동으로 적용되도록 AWS LB에서 TLS Termination 처리 설정 : NLB가 TLS 처리하고 이 후 백엔드는 Https to Http로 전달 443 port 남기고 default 80 port는 삭제 Default 헬름 차트 변수 파일(values.yaml) 수정 내역 서비스 annotations 수정 annotations: service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp ..

쿠버네티스 칼리코 네트워크

오늘은 쿠버네티스 칼리코(calico) CNI에 관하여 정리한다. 가시다님 네트워크 스터디 3주차 예습 내용이다. 1) 같은 노드 내 파드 - 파드 통신 2) 파드와 외부 인터넷 통신 3) 다른 노드의 파드와 파드 통신 내용 실습한 걸 정리하였다. 가시다님, 3주차 스터디 실습 환경은 아래와 같다. 3대의 컨트롤 플레인 + 워커 노드 + 1대의 워커 노드. 쿠버 버전 1.22.4, CRI containerd. [spkr@erdia22 ~ (ubun81:default)]$ kgn # k get node -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME ubun20-81 R..

sniff - kubectl 환경 패킷 캡쳐 유틸리디

가시다님 스터디에서 ‘stewart’ 님이 공유해 주신 파드 패깃덤프 플러그인 sniff 사용 예제를 공유한다. sniff 사용하면 파드에 접속해서 tcpdump 명령어 실행하지 않아도 로컬PC에서 kubectl 명령어로 원격 파드의 패킷 덤프를 바로 실행할 수 있다. 패킷덤프는 그동안 귀찮아서 네트워크 엔지니어에게 미루었는데 내가 해보게 되고 여러모로 도움이 되는 스터디다. sniff 참고 https://github.com/eldadru/ksniff GitHub - eldadru/ksniff: Kubectl plugin to ease sniffing on kubernetes pods using tcpdump and wireshark Kubectl plugin to ease sniffing on kube..