Kubernetes는 아키텍처 구조상 일반적인 레거시 환경과는 다른 워크로드 밸런싱 및 노출 방식을 선택하고 있습니다.
일반적인 컨테이너에 대한 네트워크 서비스를 외부로 노출하는 방식에는 구축한 K8s 환경의 네트워크 제공 방식에 따라서 다르게 선택될 수 있습니다. 많은 K8s에 기여하고 제공하는 업체들은 다양한 오픈 소스 CNI를 이용하고, 자신들만의 업스트림 네트워크 환경을 이용하기도 합니다.
K8s는 크게 노출하는 방식에 따라서 K8s network service로서 "LoadBalancer", "NodePort", "Ingress" 3가지 형태를 이용합니다.
1) LoadBalancer는 HAProxy, MetalLB, VMware NSX Advanced LB(Avi Networks)등 외부 구성 요소를 이용하여 외부 노출
로드밸런서는 K8s 환경에서 서비스 트래픽을 제어하는데 있어서 많은 이점을 제공하며, 주로 퍼블릭 클라우드에 의존하였으나, 많은 오픈소스 및 클라우드형 로드밸런서들이 지원을 하고 있습니다.
2) NodePort: 호스트가 지닌 외부로 노출된 노드 IP 주소를 기반으로 port를 사용하여 외부 노출 (ie: 192.168.100.10:5994), 별도의 에코시스템에 의존하지 않고서 자신의 환경을 이용하나, NodePort 노출 방식은 많은 관리의 어려움을 발생
3) Ingress: 일반적인 Network 레벨에서 지칭하는 Ingress는 모든 인바운드 트래픽을 나타내는 반면, Kubernetes에서는 SSL Termination과 같은 트래픽 라우팅 규칙을 관리하는 API를 지칭합니다. Ingress는 Kubernetes의 Loadbalancer와는 엄연히 다른 서비스 영역입니다. ingress는 이러한 규칙을 구현하기 위해 배포되는 Proxy로서 내부 서비스 라우팅을 사용하여 트래픽이 어디로 가는지를 나타냅니다. 내부적으로 Ingress는 NodePort 혹은 LoadBalancer 서비스를 이용하여 해당 Proxy로서 외부에 자신을 노출합니다.
Kubernetes의 Network service type에는 위에서 언급한 LoadBalancer, NodePort 외에 ClusterIP가 존재합니다.
ClusterIP는 Kubernetes의 network service를 설정하게 되면, Cluster 내부에서만 존재하고 소비할 수 있는 통신 IP를 제공합니다. K8s 클러스터 내부에서 얼마나 많은 POD들이 있고 어떻게 네트워크를 소비하는지 걱정할 필요가 없습니다. 그러나, 우리는 대부분의 서비스를 외부에 노출하여 소비하며, 이에 따라 LoadBalancer, NodePort를 이용하여 외부로 노출을 하게 되는 것입니다.
Kubernetes의 "LoadBalancer"는 Layer 4 트래픽에 대한 외부로 IP를 노출하고, 해당 IP로 수신되는 트래픽에 대하여 각 노드로 경로를 제공합니다.
Kubernetes의 "Ingress"는 Layer 7 트래픽에 대한 외부로 IP를 노출하고, 해당 IP로 수신되는 트래픽에 대하여 지정된 규칙에 따라 경로를 제공합니다.
VMware TANZU 솔루션은 보다 쉽게 배포하고, 업데이트에 대한 수명 주기 관리, 노드 확장 등 IT운영팀의 부담을 축소하며, 개발팀에서 애플리케이션 개발 이외의 인프라 영역을 학습할 필요 없이 즉시 Kubernetes 환경을 이용 가능하도록 Tanzu Kubernetes Grid(TKG) 제품을 제공하고 있습니다.
(Tanzu Community Edition은 누구나 목적에 상관없이 TKG 제품을 사용 가능하도록 제공하고 있습니다. Production, 개발, 테스트, 개인 학습 목적등 어디에도 이용할 수 있으며, email을 통한 troubleshooting 및 tech support를 지원하고 있습니다.)
- Tanzu Community Edition: https://tanzucommunityedition.io/
완전한 Opensource 플랫폼으로서 Kubernetes 구축을 위한 학습, 노드(운영 체제) 구축, 도커 설치, 쿠버네티스 구축 및 환경 설정 등의 모든 작업을 필요로 하지 않으며, 배포 이후 Kuberentes 버전 업데이트에 따라서 수명 주기 관리를 제공합니다.
VMware는 위와 같이 Kubernetes Opensource Platform을 제공하는 것뿐 아니라, Google에 이어서 가장 많이 Kubernetes 환경에 기여를 하고 있습니다. 즉, Kubernetes 환경에서 가장 많이 이용할 수 있는 가치 있는 opensource를 제공하고 있다는 것입니다.
L4 로드밸런서 기능을 위하여 VMware는 NSX Advanced LB Essential 에디션 기능에 한하여 TKG 플랫폼에 통합 제공을 하고 있습니다. NSX Advanced LB는 기존 AVI Networks의 엔터프라이즈급 상용 로드밸런서로서 TKG의 K8s Loadbalancer에 대한 L4 서비스 기능에 한하여 무료 버전으로 이용이 가능합니다.
L7 로드밸런서 기능을 위하여 VMware는 Contour Ingress(오픈소스)를 TKG의 설치팩으로서 제공을 하고 있으며, 기술 지원을 제공하고 있습니다.
Contour Ingress는 수신 트래픽에 대한 SSL 처리 및 FQDN 기반의 라우팅 규칙을 제공합니다. 레거시 환경의 애플리케이션 서비스 제공을 위한 요구 사항들은 Kubernetes 환경에서는 이러한 Ingress를 통해서 서비스를 제공받게 됩니다.
- SSL 처리, HTTP header 설정, XFF(X_Forwarded_For), Keepalive, Connection timout 등등....
Contour Ingress는 이러한 트래픽 제어 및 정책를 제공하며, 실 트래픽에 대한 처리는 Opensource인 Envoy Proxy(Lift사 개발)를 이용합니다. (Envoy는 NGINX 이후 가장 혁신적인 Proxy 로서 인정받고 있습니다.)
VMware는 Kubernetes에 POD로서 설치되는 Contour Ingress 뿐 아니라, 관리, 기능 및 성능적인 엔터프라이즈급 서비스 제공을 위한 한 NSX Advanced LB(Enterprise 버전)를 K8s 환경에 통합하여 Ingress 서비스를 제공할 수 있습니다. NSX ALB는 Ingress를 위한 수신 트래픽 처리 뿐만 아니라, Domain기반의 Global Server LoadBalancer(GSLB)를 통한 Kubernetes Cluster 간 혹은 지역 간 서비스를 제공하며, WAF(Web Application Firewall) 서비스를 서비스 단위별로 활성화/비활성화를 지원합니다.
* VMware TKG 사용 경로
첫째, VMware TKG Community Edition을 다운로드
둘째, TKG 플랫폼을 설치 호환되는 인프라에(VMware vSphere, VMC on AWS, AWS등) 구축(TKG 노드 배포, NSX ALB 혹은 HAproxy로 LB 통합 구성 혹은 TKG 설치 이후 선호하는 LB 구성)
셋째, L7 트래픽 처리를 위한 Tanzu Pack 설치를 통한 Contour Ingress 설치 혹은 NSX Advanced LB를 통합 구성
- Tanzu Pack은 Kubernetes 환경에서의 애플리케이션 통합 설치를 위한 이미지 패키징 기능(Knative)을 이용하여 부가적인 설정을 간소화 하고, 애플리케이션을 설치 마법사를 이용한 설치와 같이 즉시 배포 지원되도록 주요 오픈 소스를 패키지 팩으로 제공
넷째, VMware가 제공하는 추가적인 오픈 소스를 Tanzu Pack를 이용한 설치
- CertManager(인증), FluentBit(로그 배출), Grafana(메트릭 시각화), Prometheous(메트릭 수집), Velero(백업) 등..
Tanzu Pack은 주요 Kubernetes 플랫폼 운영에 있어서 필요한 필수 구성 요소를 VMware가 직접 간소화된 설치 방식으로 제공함으로서 사용자는 신속하게 클러스터를 배포하고 운영 상태로 전환할 수 있도록 돕습니다.
- https://tanzucommunityedition.io/docs/latest/package-management/
Documentation
Work with Packages ¶ Tanzu Community Edition employs the tanzu package command to discover, configure, and manage packages running in a cluster. A package is a bundle of software that translates to one or many Kubernetes primitives such as Deployments, Se
tanzucommunityedition.io
'VMware TANZU > TKG: Tanzu Kubernetes Grid' 카테고리의 다른 글
Antrea Networking (1) | 2022.09.30 |
---|---|
Why VMware Tanzu Kubernetes Grid...? - part 1 (0) | 2022.09.30 |
Contour L7 Ingress 환경 설정 (0) | 2022.09.30 |
DevSecOps for IT TEAM (0) | 2022.09.16 |
Octant by VMware - kubernetes Dashboard (0) | 2021.06.04 |