728x90
반응형
안녕하세요 늑대양입니다 😍
이번에 CloudNet@에서 진행하는 Production Kubernetes Online Study(PKOS)에 참여하여 관련 내용을 공유드리고자 합니다.
오늘은 PKOS 스터디 2주차 학습 내용을 안내해드리록하겠습니다.
CloudNet@ 팀 블로그 Main URL:
https://www.notion.so/gasidaseo/CloudNet-Blog-c9dfa44a27ff431dafdd2edacc8a1863
Production Kubernetes Online Study - 2주차
2주차 학습 주제: 쿠버네티스 네트워크 (서비스, AWS LoadBalancer Controller)
Index.
- AWS kOps 원클릭 배포 가이드
- Parameter
- AWS VCP CNI 소개
- k8s CNI
- AWS VPC CNI
- 노드에서 기본 네트워크 정보 확인
- 노드 간 파드 통신
- 파드에서 외부 통신
- 노드에 파드 생성 개수 제한
- 해결방안
- 서비스 소개
- 서비스란
- ClusterIP
- NodePort
- LoadBalancer
- NLB 모드 정리
- ExternalDNS
- 과제
- 과제 1. 파드간 통신 시 tcpdump 내용을 확인하고 관련 스크린샷을 올려주세요
- 과제 2. 워커 노드 1대에 100대 이상의 파드가 배포되게 설정하고 관련 스크린샷을 올려주세요
- 과제 3. 서비스(NLB)/파드 배포 시, ExternalDNS 설정해서, 각자 자신의 도메인으로 NLB를 통해 애플리케이션(파드)로 접속해보고 관련 스크린샷을 올려주세요
- 과제 4. 활용 - 아래 활용 기능 중 1개를 선택해서 실습 후 결과 내용을 올려주세요
- NLB에 TLS 적용하기
- NLB에 타겟을 Instance mode로 설정해보기
- kOps dns-controller compatibility mode
- NLB IP Target & Proxy Protocol v2 활성화(NLB에서 바로 파드로 인입 및 ClientIP 확인 설정)
- AWS kOps Private Cluster 설정하기
- 자원 삭제
AWS kOps 원클릭 배포 가이드
- 가시다님께서 작성해주신 AWS kOps 원클릭 배포 가이드를 통해 실습 환경 배포 😘
- CloudFormation Source: https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/kops-oneclick.yaml
Parameter:
아래 빨간색 부분은 설정해주는어야 할 것, 그외 부분은 기본값 사용을 권장
<<<<< Deploy EC2 : kops-ec2 >>>>>
- KeyName : kops-ec2에 SSH 접속을 위한 SSH 키페어 선택 ← 미리 SSH 키 생성 해두자!
- MyIamUserAccessKeyID : 관리자 수준의 권한을 가진 IAM User의 액세스 키ID 입력
- MyIamUserSecretAccessKey : 관리자 수준의 권한을 가진 IAM User의 시크릿 키ID 입력 ← 노출되지 않게 보안 주의
- SgIngressSshCidr : kops-ec2에 SSH 접속 가능한 IP 입력 (집 공인IP/32 입력), 보안그룹 인바운드 규칙에 반영됨
- 터미널에서 공인 ip 확인 방법:
- curl ipinfo.io/ip
- LatestAmiId : kops-ec2에 사용할 AMI는 아마존리눅스2 최신 버전 사용, 기본값 그대로 사용
<<<<< AWS kOps Config >>>>>
- KubernetesVersion : 쿠버네티스 설치 버전 (기본 v1.24.9) ⇒ 변경 가능
- ClusterBaseName : kOps 클러스터 이름이며, 사용하게될 도메인 이름이다. ‘퍼블릭 도메인’ or ‘프라이빗 도메인’ or ‘Gossip DNS’ 가능
- S3StateStore : kOps 클러스터의 설정/상태 정보가 저장될 S3 버킷의 이름을 지정 ← 미리 S3 버킷을 생성 해두자!
- MasterNodeInstanceType & WorkerNodeInstanceType: 마스터(기본 t3.medium) & 워커 노드 EC2 인스턴스의 타입 (기본 t3.medium) ⇒ 변경 가능
- WorkerNodeCount : 워커노드의 개수를 입력 ⇒ 변경 가능
- VpcBlock : kOps 배포되고 동작할 VPC 네트워크 대역, 기본값 그대로 사용
<<<<< Region AZ >>>>>
- 리전과 가용영역을 지정, 기본값 그대로 사용
AWS VCP CNI 소개
k8s CNI:
- CNI(Container Network Interface)는 k8s 네트워크 환경을 구성!!
- 다양한 플러그인 존재
- Kubernetes CNI (kubenet): Kubernetes에서 기본으로 제공하는 CNI 플러그인
- Calico: IP-in-IP 트래픽을 사용하여 네트워크를 구성하며, 보안 그룹과 네트워크 정책을 적용 가능
- Flannel: VXLAN 기술을 사용하여 네트워크를 구성하며, 일반적으로 쿠버네티스 클러스터를 구성할 때 사용
- Cilium: BPF(Berkeley Packet Filter) 기술을 사용하여 네트워크를 구성하며, 보안 그룹과 네트워크 정책을 적용 가능
- Weave Net: IP-over-UDP 기술을 사용하여 네트워크를 구성하며, 네트워크 통신에 대한 압축, 암호화 및 안정성 기능을 제공
- Canal: Calico와 Flannel을 혼합한 플러그인
- Contiv: 컨테이너 네트워크 관리를 위한 플러그인
- 위와 같은 CNI 플러그인들은 쿠버네티스 네트워크를 구성하는데 사용되며, 선택은 구축 환경에 맞는 것을 선택하는 것이 좋습니다🤭
AWS VPC CNI:
- Supports native VPC networking with the Amazon VPC Container Network Interface (CNI) plugin for Kubernetes.
- VPC 와 통합 : VPC Flow logs , VPC 라우팅 정책을 사용 가능함 →
아쉽지만kOps 는 Security group for Pod 미지원 - This plugin assigns an IP address from your VPC to each pod
- 파드의 IP를 할당하며, 파드의 IP 대역과 노드(워커)의 IP 대역이 동일!!
- 이러한 특성으로 인하여 직접 통신이 가능!!
- VPC ENI 에 미리 할당된 IP를 파드에서 사용할 수 있음
노드에서 기본 네트워크 정보 확인
- Network 네임스페이스는 호스트(Root)와 파드 별(Per Pod)로 구분
- 특정한 파드(kube-proxy, aws-node)는 호스트(Root)의 IP를 그대로 사용
- t3.medium 의 경우 ENI 에 최대 6개의 IP를 가질 수 있음
- ENI0, ENI1 으로 2개의 ENI는 자신의 IP 이외에 추가적으로 5개의 보조 프라이빗 IP를 가질수 있음
- coredns 파드는 veth 으로 호스트에는 eniY@ifN 인터페이스와 파드에 eth0 과 연결되어 있다!!
노드 간 파드 통신
Image source:
https://github.com/aws/amazon-vpc-cni-k8s/blob/master/docs/cni-proposal.md
파드에서 외부 통신
- VPC CNI 의 External source network address translation(SNAT) 설정에 따라, 외부(인터넷) 통신 시, SNAT 하거나 혹은 SNAT 없이 통신을 할 수 있음!!
- Refernce URL: https://docs.aws.amazon.com/eks/latest/userguide/external-snat.html
노드에 파드 생성 개수 제한
- Secondary IPv4 addresses : 인스턴스 유형에 최대 ENI 개수와 할당 가능 IP 수를 조합하여 선정
- 워커 노드의 인스턴스 타입 별 파드 생성 개수 제한
- 인스턴스 타입 별, ENI 최대 개수와 할당 가능한 최대 IP 개수에 따라서 파드 배치 개수가 결정됨
- 단, aws-node 와 kube-proxy 파드는 호스트의 IP를 사용함으로 최대 개수에서 제외함
최대 파드 생성 개수 공식:
(Number of network interfaces for the instance type × (the number of IP addressess per network interface - 1)) + 2
*t3.medium의 예시:
(3 * (6-1)) + 2 = 17 (aws-node, kube-proxy 로 인해, 2개 추가하여 17 > 커스텀하게 할당 가능한 것은 15)
해결방안:
- Prefix Delegation
- WARM & MIN IP/Prefix Targets
- Change instance type
서비스 소개
서비스란
- k8s 에서 서비스란, 클러스터 내에서 실행되는 파드들에 대해서 공용 IP 주소를 할당하는 개념
- 파드들을 통해 실행되고 있는 애플리케이션을 네트워크에 노출시키는 가상의 컴포넌트
- 서비스를 통해 파드들을 식별하고 접근할 수 있게 해줌!!
ClusterIP
NodePort
LoadBalancer
NLB 모드 정리:
- 인스턴스 유형
- externalTrafficPolicy : ClusterIP ⇒ 2번 분산 및 SNAT으로 Client IP 확인 불가능 ← LoadBalancer 타입 (기본 모드) 동작
- externalTrafficPolicy : Local ⇒ 1번 분산 및 ClientIP 유지, 워커 노드의 iptables 사용함
- IP 유형 ⇒ 반드시 AWS LoadBalancer 컨트롤러 파드 및 정책 설정이 필요함!
- Proxy Protocol v2 비활성화 ⇒ NLB에서 바로 파드로 인입, 단 ClientIP가 NLB로 SNAT 되어 Client IP 확인 불가능
- Proxy Protocol v2 활성화 ⇒ NLB에서 바로 파드로 인입 및 ClientIP 확인 가능
(→ 단 PPv2 를 애플리케이션이 인지할 수 있게 설정 필요)
ExternalDNS
- k8s 서비스/인그레스 생성 시, 도메인을 설정하면 AWS(Route 53), Azure(DNS), GCP(Cloud DNS) 에 A 레코드(TXT 레코드)로 자동 생성/삭제
Image source:
https://edgehog.blog/a-self-hosted-external-dns-resolver-for-kubernetes-111a27d6fc2c
과제
과제 1. 파드간 통신 시 tcpdump 내용을 확인하고 관련 스크린샷을 올려주세요
과제 2. 워커 노드 1대에 100대 이상의 파드가 배포되게 설정하고 관련 스크린샷을 올려주세요
과제 3. 서비스(NLB)/파드 배포 시, ExternalDNS 설정해서, 각자 자신의 도메인으로 NLB를 통해 애플리케이션(파드)로 접속해보고 관련 스크린샷을 올려주세요
과제 4. 활용 - 아래 활용 기능 중 1개를 선택해서 실습 후 결과 내용을 올려주세요
- NLB에 TLS 적용하기
- 사전 준비 사항
- 공인도메인 소유
- AWS Route53 도메인등록 상태
- NLB 가 위치한 리전(서울)의 인증서 요청/발급 완료상태
- ExternalDNS 준비완료상태
- 사전 준비 사항
자원 삭제
- 실습 완료 후, 자원 삭제 진행
# kOps 클러스터 삭제 & AWS CloudFormation 스택 삭제
# --stack-name의 경우, 실습 환경 구성 시, 사용한 CloudFormation stack 이름으로 설정
kops delete cluster --yes && aws cloudformation delete-stack --stack-name mykops
긴 글 읽어주셔서 감사합니다
728x90
반응형
'k8s > CloudNet@' 카테고리의 다른 글
[CloudNet@] Production Kubernetes Online Study - 6주차. (0) | 2023.02.25 |
---|---|
[CloudNet@] Production Kubernetes Online Study - 5주차. (3) | 2023.02.19 |
[CloudNet@] Production Kubernetes Online Study - 4주차. (0) | 2023.02.12 |
[CloudNet@] Production Kubernetes Online Study - 3주차. (0) | 2023.02.05 |
[CloudNet@] Production Kubernetes Online Study - 1주차. (2) | 2023.01.10 |