레이블이 Kubernates인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Kubernates인 게시물을 표시합니다. 모든 게시물 표시

2019년 10월 19일 토요일

쿠버네티스 네트워크 정리

본 문서는 쿠버네티스의 공식문서(https://kubernetes.io/docs/concepts/cluster-administration/networking/)의 일부를 번역하고 링크를 정리하여 붙이는 것에서 시작한 문서입니다.
일부 링크는 정상적이지 않거나 통합되지 않아, 원 문서에서 삭제하였습니다.
일부 추가된 부분은 이해를 돕기위한 링크입니다.
​
​
* Cluster Network
네트워킹은 쿠버네티스의 중요한 부분이다 하지만 정확한 이해를 위해서는 이해하기 위한 노력이 필요하다.
여기 4개의 주소에 대한 독립적인 문제가 있다.
1. 높은 결합도의 컨테이너간 통신 : 이 문제는 pods와 localhost의 통신으로 해결된다.
2. Pod 간의 통신 : 이것이 이 문서의 주제다.
3. Pod와 서비스 간의 통신 : 이 영역은 서비스를 통해 해결한다.
4. 외부와 서비스간의 통신 : 이 영역도 서비스를 통해 해결한다.
​
+ 쿠버네티스 네트워크 모델
+ 구버네티스 네트워크 모델을 구현하는 법
​
쿠버네티스는 기계의 모든것을 응용프로그램 간에 공유한다. 일반적으로 한대의 머신을 두개의 응용플그램이 공유하려면 해당 응용프로그램이 같은 포트를 사용하지 않도록 해야한다. 여러명의 개발자가 사용하는 포트를 적절하게 조절하는 것은 매우 어렵다. 이 문제는 사용자의 영역을 벗어난 클러스터 레벨의 문제이다.
​
동적포트 할당은 시스템에 많은 문제를 불러온다 - 모든 응용프로그램은 사용하는 포트들을 플래그로 가져가야 하고, API 서버는 동적포트번호를 설정블럭에 집어넣는 방법을 알아야 한다. 서비스는 이들을 어떻게 찾는지 알아야 한다. 쿠버네티스는 다른 방법을 취합니다.
​
* 쿠버네티스 네트워크 모델
​
모든 Pod는 각각의 IP를 갖는다. Pod 간의 통신을 위해서 링크를 만들 필요가 없다는 것과 대부분의 경우 컨테이너와 호트스에 대한 연결을 위한 고려를 할 필요가 없다는 것을 의미한다.이렇게하면 포트 할당, 이름 지정, 서비스 검색,로드 밸런싱, 애플리케이션 구성 및 마이그레이션 측면에서 Pod를 VM 또는 물리적 호스트처럼 취급 할 수있는 명시적인 모델이 생성된다.
​
쿠버네티스는 모든 네트워크 구현에 다음과 같은 기본요구 사항을 적용한다.(의도적 네트워크 세분화 정책 제외)
- 노드에 있는 Pod 들은 모든 노드들과 NAT 없이 통신이 가능하다.
- 노드에 설치되어 있는 Agent()들은 해당 노드에 있는 모든 Pod들과 통신이 가능하다.
주의 : 호스트 노트에서 Pod의 실행을 지원하는 경우(ex :Linux or Mac?)
- 노드의 호스트 네트워크에있는 포드는 NAT없이 모든 노드에 있는 모든 포드와 통신 할 수 있다.
​
이 모델은 전체적으로 덜 복잡 할뿐만 아니라 Kubernetes가 VM에서 컨테이너로 응용 프로그램을 이행하려고 할때 유효하다. 작업이 이전에 VM에서 실행 된 경우 VM에 IP가 있고 프로젝트의 다른 VM과 통신 할 수 있다. 이것은 동일한 기본 모델이다.
​
Kubernetes의 IP주소는 Pod영역에 존재한다. - 컨테이너들은 Pod와 Network namespace와 IP address를 공유한다. 이는 동일 Pod에 존재하는 컨테이너들이 localhost를 통해 연결될 수 있음을 의미한다. 이는 컨테이너의 사용 Port에 대해서 Pod가 조율해야 함을 의미한다. 이것은 프로세스에 VM에서 프로세스를 관리하는 것과 다르지 않다. 이 모델을 "IP per pod"라고 부른다.
​
이에 대한 구현은 사용중인 컨테이너의 내부 동작의 일부이다.
​
노드 자체에서 포트로 전달되는 포트 (호스트 포트라고 함)를 요청할 수 있지만 이는 적당한(niche) 작업이다. 전달이 구현되는 방법은 컨테이너 런타임에처 처리한다. 포드 자체는 호스트 포트의 존재 여부를 감춘다.
​
* 쿠버네티스 네트워크 모델의 구현
이 네트워크 모델을 구현할 수있는 여러 가지 방법이 있다. 이 문서는 다양한 방법에 대한 철저한 연구는 아니지만 다양한 기술에 대한 소개가 되기를 희망한다.
​
다음 네트워킹 옵션은 알파벳순으로 정렬되어 있다. 순서는 우선 순위를 의미하지 않는다.
​
[ACI]
ACI는 Cisco Application Centric Infrastructure의 줄임말로 세부 내용은 하단의 링크를 통해 확인 할 수 있다.
컨테이너, 가상 머신 및 베어 메탈 서버를 지원하는 통합 오버레이 및 언더 레이 SDN 솔루션을 제공한다. ACI는 ACI를위한 컨테이너 네트워킹 통합을 제공한다.
​
​
[Apstra의 AOS]
AOS는 단순한 통합 플랫폼에서 복잡한 데이터 센터 환경을 생성하고 관리하는 인 텐트 기반 네트워킹 (Intent-Based Networking)시스템이다. AOS는 확장 성이 뛰어난 분산 설계를 활용하여 네트워크 중단을 제거하면서 비용을 최소화한다.
​
IBS에 대한 참조자료.
AOS Reference Design은 현재 레거시 Layer-2 스위칭 문제를 제거하는 Layer-3 연결 호스트를 지원한다. 이 Layer-3 호스트는 Linux 서버 (Debian, Ubuntu, CentOS) 일 수 있으며 맨 위 랙 스위치 (TOR)와 직접 BGP(Border Gateway Protocol) 인접 관계를 만든다. AOS는 라우팅 인접성을 자동화 한 다음 Kubernetes 배포에서 일반적으로 사용되는 RHI (Route Health Injection)에 대한 세밀한 제어를 제공한다.
​
BGP 관련 참조 자료.
AOS에는 Kubernetes가 애플리케이션 요구 사항에 따라 네트워크 정책을 신속하게 변경할 수있는 풍부한 REST API 엔드 포인트 세트가 있다. 네트워크 설계에 사용 된 AOS 그래프 모델을 워크로드 프로비저닝과 통합하여 프라이빗 및 퍼블릭 클라우드 모두에 대한 종단간 관리 시스템을 향상시킬 수 있다.
​
AOS는 Cisco, Arista, Dell, Mellanox, HPE 및 Microsoft SONiC, Dell OPX 및 Cumulus Linux와 같은 개방형 네트워크 운영 체제 및 수많은 화이트 박스 시스템을 포함한 제조업체의 일반적인 공급 업체 장비 사용을 지원한다.
​
자세한 AOS 시스템 동작에 대한 내용은 아래의 링크를 참조하라.
[쿠버네티스를 위한 ​AWS VPC CNI]
​
AWS VPC CNI는 Kubernetes 클러스터를위한 통합 AWS Virtual Private Cloud (VPC) 네트워킹을 제공한다. 이 CNI 플러그인은 높은 처리량 및 가용성, 낮은 대기 시간 및 최소 네트워크 지터(대기시간의 변동)를 제공한다. 또한 사용자는 Kubernetes 클러스터 구축을 위해 기존 AWS VPC 네트워킹 및 보안 모범 사례를 적용 할 수 있다. 여기에는 VPC 흐름 로그, VPC 라우팅 정책 및 네트워크 트래픽 격리를 위한 보안 그룹을 사용하는 기능이 포함된다.
​
이 CNI 플러그인을 사용하면 Kubernetes 포드가 VPC 네트워크에서와 동일한 포드 내부의 IP 주소를 가질 수 있다. CNI는 각 Kubernetes 노드에 노드의 포드에 대해 각 ENI의 보조 IP 범위를 사용하여 AWS Elastic Networking Interfaces (ENI)를 할당한다. CNI에는 빠른 포드 시작 시간을위한 ENI 및 IP 주소의 사전 할당 제어 기능이 포함되어 있으며 최대 2,000 개의 노드로 구성된 대규모 클러스터가 가능하다.
​
또한 네트워크 정책 시행을 위해 CNI를 Calico와 함께 실행할 수 있다. AWS VPC CNI 프로젝트는 GitHub에 대한 설명서가 포함 된 오픈 소스입니다.
​
​
[대용량 스위칭 네트워크에서의 대용량 패브릭(Big Cloud Fabric from Big Switch Networks)]
​
Big Cloud Fabric은 클라우드 네이티브 네트워킹 아키텍처로, 개인 클라우드 / 온-프레미스 환경에서 Kubernetes를 실행하도록 설계되었다. Big Cloud Fabric은 통합 된 물리적 및 가상 SDN을 사용하여로드 밸런싱, 가시성, 문제 해결, 보안 정책 및 컨테이너 트래픽 모니터링과 같은 고유 한 컨테이너 네트워킹 문제를 해결한다.
​
Big Cloud Fabric의 가상 포드 다중 테넌트 아키텍처(다중 고객을 완전히 분리하는 모델)를 통해 Kubernetes, RedHat OpenShift, Mesosphere DC / OS 및 Docker Swarm과 같은 컨테이너 오케스트레이션 시스템은 VMware, OpenStack & Nutanix와 같은 VM 오케스트레이션 시스템과 함께 기본적으로 통합된다. 고객은 원하는 수의 클러스터를 안전하게 상호 연결할 수 있으며 필요한 경우 이들간에 테넌트 간 통신이 가능하다.
​
BCF는 Gartner에 의해 최신 Magic Quadrant에서 선각자로 인식되었다.BCF Kubernetes 온-프레미스 배포 중 하나 (여러 지역에 걸쳐 여러 DC에서 실행되는 Kubernetes, DC / OS 및 VMware 포함)도 여기에서 참조된다.
​
[​Cilium]
Cilium은 애플리케이션 컨테이너간에 네트워크 연결을 제공하고 투명하게 보호하기위한 오픈 소스 소프트웨어이다. Cilium은 L7 / HTTP를 인식하며 네트워크 주소 지정에서 분리 된 ID 기반 보안 모델을 사용하여 L3-L7에서 네트워크 정책을 시행 할 수 있다.
​
[화웨이의 CNI-Genie]
CNI-Genie는 Kubernetes가 런타임시 Kubernetes 네트워크 모델의 다른 구현에 동시에 액세스 할 수 있도록하는 CNI 플러그인이다. 여기에는 Flannel, Calico, Romana, Weave-net과 같은 CNI 플러그인으로 실행되는 모든 구현이 포함된다.
​
CNI-Genie는 각기 다른 CNI 플러그인의 포드에 여러 개의 IP 주소를 할당 할 수 있다.
​
[cni-ipvlan-vpc-k8s]
cni-ipvlan-vpc-k8s에는 Amazon을 사용하여 Amazon Virtual Private Cloud (VPC) 환경에서 Kubernetes를위한 간단한 호스트 로컬 저 지연 시간, 높은 처리량 및 호환 네트워킹 스택을 제공하는 CNI 및 IPAM 플러그인 세트가 포함되어 있다. L2 모드에서 Linux 커널의 IPvlan 드라이버를 사용하여 ENI (Elastic Network Interfaces) 및 AWS 관리 IP를 포드에 바인딩한다.
​
플러그인은 VPC 내에서 구성하고 배포 할 수 있도록 간단하게 설계되었다. Kubelets는 오버레이 네트워크 관리, BGP 관리, 소스 / 대상 검사 비활성화 또는 VPC 라우팅 테이블을 조정하여 각 호스트에 인스턴스 별 서브넷을 제공하는 등의 권장 복잡성을 요구하지 않고 필요에 따라 IP 사용량을 부팅 한 다음 자체 구성 및 확장한다. VPC 당 50-100 개 항목으로 제한). 즉, cni-ipvlan-vpc-k8s는 AWS 내에서 Kubernetes를 대규모로 배포하는 데 필요한 네트워크 복잡성을 크게 줄인다.
​
[Contiv]
Contiv는 다양한 사용 사례에 대해 구성 가능한 네트워킹 (BGP를 사용하는 기본 l3, vxlan을 사용하는 오버레이, 클래식 l2 또는 Cisco-SDN / ACI)을 제공합니다. Contiv는 모두 오픈소스이다.
[Contrail / Tungsten Fabric]
Tungsten Fabric을 기반으로하는 Contrail은 진정한 개방형 멀티 클라우드 네트워크 가상화 및 정책 관리 플랫폼이다. Contrail 및 Tungsten Fabric은 Kubernetes, OpenShift, OpenStack 및 Mesos와 같은 다양한 오케스트레이션 시스템과 통합되어 있으며 가상 머신, 컨테이너 / 포드 및 베어 메탈 워크로드에 대해 서로 다른 격리 모드를 제공한다.
[DANM]
DANM은 Kubernetes 클러스터에서 실행되는 통신 워크로드를위한 네트워킹 솔루션이다. 다음과 같은 구성 요소로 구성된다.
- 고급 기능으로 IPVLAN 인터페이스를 프로비저닝 할 수있는 CNI 플러그인
- 여러 클러스터 전체의 불연속 L3 네트워크를 관리하고 요청시 동적, 정적 또는 IP 할당 체계를 제공하지 않는 내장 IPAM 모듈
- 자체 CNI를 통해 또는 SRI-OV 또는 Flannel과 같은 널리 사용되는 CNI 솔루션에 작업을 동시에 위임하여 여러 네트워크 인터페이스를 컨테이너에 연결할 수있는 CNI 메타 플러그인
- 모든 Kubernetes 호스트의 VxLAN 및 VLAN 인터페이스를 중앙에서 관리 할 수있는 Kubernetes 컨트롤러
- Kubernetes의 서비스 기반 서비스 검색 개념을 확장하여 포드의 모든 네트워크 인터페이스에서 작동하는 다른 Kubernetes 컨트롤러
​
이 도구 세트를 통해 DANM은 여러 개의 분리 된 네트워크 인터페이스를 제공 할 수 있으며 포드에 대해 다른 네트워킹 백엔드 및 고급 IPAM 기능을 사용할 수 있다.
​
[​Flannel]
Flannel은 Kubernetes 요구 사항을 충족하는 매우 간단한 오버레이 네트워크이다. 많은 경우 성공적으로 적용이 가능하다.
[​Google Compute Engine (GCE)]
​
Google Compute Engine 클러스터 구성 스크립트의 경우 고급 라우팅을 사용하여 각 VM에 서브넷을 할당한다 (기본값은 / 24-254 IP). 해당 서브넷에 바인딩 된 모든 트래픽은 GCE 네트워크 패브릭에 의해 VM으로 직접 라우팅된다. 이것은 아웃 바운드 인터넷 액세스를 위해 NAT 인 VM에 할당 된 "기본"IP 주소에 추가되며. Linux 브리지 (cbr0)는 해당 서브넷에 존재하도록 구성되며 docker의 --bridge 플래그로 전달된다.
​
Docker를 다음과 같은 옵션으로 실행한다.
DOCKER_OPTS="--bridge=cbr0 --iptables=false --ip-masq=false"
이 브리지는 노드의 .spec.podCIDR에 따라 Kubelet (-network-plugin = kubenet 플래그로 제어)에 의해 생성된다.
​
Docker는 이제 cbr-cidr 블록에서 IP를 할당합니다. 컨테이너는 cbr0 브리지를 통해 서로 노드에 도달 할 수 있다. 이러한 IP는 모두 GCE 프로젝트 네트워크 내에서 라우팅 가능하다.
​
그러나 GCE 자체는 이러한 IP에 대해 전혀 알지 못하므로 아웃 바운드 인터넷 트래픽을 위해 IP를 NAT하지 않는다. iptables 규칙을 사용하여 GCE 프로젝트 네트워크 외부의 IP (10.0.0.0/8)에 바인딩 된 트래픽을 가장하는 (일명 SNAT-마치 패킷이 노드 자체에서 온 것처럼 보이도록 만들기 위해) 사용된다.
iptables -t nat -A POSTROUTING ! -d 10.0.0.0/8 -o eth0 -j MASQUERADE
마지막으로 커널에서 IP 전달이 활성화되어 있으므로 커널은 브리지 된 컨테이너에 대한 패킷을 처리한다.
sysctl net.ipv4.ip_forward=1
결과적으로 모든 포드는 각자에게 연결되고 인터넷을 통해서 트래픽을 전달할 수 있다.
[Jaguar]
Jaguar는 OpenDaylight 기반의 Kubernetes 네트워크를위한 오픈 소스 솔루션이다. Jaguar는 vxlan을 사용하여 오버레이 네트워크를 제공하고 Jaguar CNIPlugin은 포드 당 하나의 IP 주소를 제공한다.
[k-vswitch]
k-vswitch는 Open vSwitch를 기반으로하는 간단한 Kubernetes 네트워킹 플러그인이다. Open vSwitch의 기존 기능을 활용하여 작동하기 쉽고 성능이 뛰어나고 안전한 강력한 네트워킹 플러그인을 제공한다.
[Knitter]
Knitter는 Kubernetes에서 여러 네트워킹을 지원하는 네트워크 솔루션이다. 테넌트 관리 및 네트워크 관리 기능을 제공한다. Knitter에는 응용 프로그램의 IP 주소 유지, IP 주소 마이그레이션 등과 같은 여러 네트워크 계층 외에 엔드 투 엔드 NFV 컨테이너 네트워킹 솔루션 세트가 포함되어 있다.
[Kube-OVN]
Kube-OVN은 기업을위한 OVN 기반 kubernetes 네트워크 패브릭입니다. OVN / OVS의 도움으로 서브넷, QoS, 고정 IP 할당, 트래픽 미러링, 게이트웨이, 오픈 플로우 기반 네트워크 정책 및 서비스 프록시와 같은 고급 오버레이 네트워크 기능을 제공한다.
[Kube-router]
Kube-router는 Kubernetes를위한 특수 목적의 네트워킹 솔루션으로 고성능 및 운영 단순성을 제공한다. Kube-router는 Linux LVS / IPVS 기반 서비스 프록시, 오버레이가없는 Linux 커널 전달 기반 포드 대 포드 네트워킹 솔루션 및 iptables / ipset 기반 네트워크 정책 집행자를 제공한다.
[L2네트워크와 리눅스 브리징]
"베어 메탈"환경의 간단한 스위치와 같은 "dumb"L2 네트워크가있는 경우 위의 GCE 설정과 유사한 작업을 수행 할 수 있어야한다. 이 지침은 매우 우연히 시도되었지만 작동하는 것으로 보이지만 철저히 테스트되지 않았다. 이 기술을 사용하여 프로세스를 완료 한 경우 알려주십시오. 이에 대한 훌륭한 튜토리얼이 있습니다. 항목에서 "리눅스 브릿지 장치들"을 참고 하세요.
​
[Mutlus(다중 네트워크 플러그인)]
Multus는 Kubernetes의 CRD 기반 네트워크 객체를 사용하여 Kubernetes의 멀티 네트워킹 기능을 지원하는 멀티 CNI 플러그인이다.
​
Multus는 CNI 사양을 구현하는 모든 참조 플러그인 (예 : Flannel, DHCP, Macvlan) 및 타사 플러그인 (예 : Calico, Weave, Cilium, Contiv)을 지원하며, Multus는 Kubernetes의 클라우드 네이티브 및 NFV 기반 응용 프로그램과 함께 Kubernetes의 SRIOV, DPDK, OVS-DPDK 및 VPP 워크로드를 지원한다.
​
[NSX-T]
VMware NSX-T는 네트워크 가상화 및 보안 플랫폼이다. NSX-T는 다중 클라우드 및 다중 하이퍼 바이저 환경에 네트워크 가상화를 제공 할 수 있으며 이기종 엔드 포인트 및 기술 스택이있는 새로운 애플리케이션 프레임 워크 및 아키텍처에 중점을 둔다. 이러한 환경에는 vSphere 하이퍼 바이저 외에도 KVM, 컨테이너 및 베어 메탈과 같은 다른 하이퍼 바이저가 포함된다.
NSX-T Container Plug-in (NCP)은 NSX-T와 Kubernetes와 같은 컨테이너 오케 스트레이터 간의 통합뿐만 아니라 NSX-T와 PKS (Pivotal Container Service) 및 OpenShift와 같은 컨테이너 기반 CaaS / PaaS 플랫폼 간의 통합을 제공합니다.
​
Plugin Document는 여기(
서 확인할 수 있다.
​
[​Nuage Networks VCS (Virtualized Cloud Services)]
Nuage(https://www.nuagenetworks.net)는 확장 성이 뛰어난 정책 기반 SDN (Software-Defined Networking) 플랫폼을 제공한다. Nuage는 개방형 표준을 기반으로하는 풍부한 기능의 SDN 컨트롤러와 함께 데이터 플레인 용 오픈 소스 Open vSwitch를 사용한다.
​
Nuage 플랫폼은 오버레이를 사용하여 Kubernetes Pod와 비 Kubernetes 환경 (VM 및 베어 메탈 서버)간에 완벽한 정책 기반 네트워킹을 제공하며, Nuage의 정책 추상화 모델은 애플리케이션을 염두에두고 설계되었으며 애플리케이션에 대한 세분화 된 정책을 쉽게 선언 할 수 있게 한다. 플랫폼의 실시간 분석 엔진을 통해 Kubernetes 애플리케이션에 대한 가시성과 보안 모니터링이 가능하다.
​
[OpenVSwitch]
OpenVSwitch는 다소 발달된 오버레이 네트워크를 구축하는 복잡한 방법으로, 이것은 네트워킹 영역의 몇몇 “Big Shop- 대형 벤더를 의미” 에 의해 승인되었다.
​
[​OVN (Open Virtual Networking)]
OVN은 Open vSwitch 커뮤니티에서 개발 한 오픈 소스 네트워크 가상화 솔루션이다. 논리적 스위치, 논리적 라우터, 상태 저장 ACL,로드 밸런서 등을 만들어 서로 다른 가상 네트워킹 토폴로지를 구축 할 수 있다. 이 프로젝트에는 ovn-kubernetes에 특정 Kubernetes 플러그인 및 설명서가 있다.
[Project Calico]
Project Calico는 오픈 소스 컨테이너 네트워킹 공급자 및 네트워크 정책 엔진이다.
​
Calico는 Linux (오픈 소스) 및 Windows (독점-Tigera에서 사용 가능)에 대해 인터넷과 동일한 IP 네트워킹 원칙을 기반으로 Kubernetes 포드를 연결하기위한 확장 성이 뛰어난 네트워킹 및 네트워크 정책 솔루션을 제공한다. Calico는 캡슐화 또는 오버레이없이 구축되어 고성능의 대규모 데이터 센터 네트워킹을 제공 할 수 있다. 또한 Calico는 분산 방화벽을 통해 Kubernetes 포드에 대해 세분화 된 의도 기반 네트워크 보안 정책을 제공한다.
​
Calico는 Flannel, 일명 운하(aka canal - 문서가 project calico로 이행되었다.) 또는 기본 GCE, AWS 또는 Azure 네트워킹과 같은 다른 네트워킹 솔루션과 함께 정책 시행 모드로 실행될 수도 있다.
[Romana]
Romana는 오버레이 네트워크없이 Kubernetes를 배포 할 수있는 오픈 소스 네트워크 및 보안 자동화 솔루션이다. Romana는 Kubernetes 네트워크 정책을 지원하여 네트워크 네임 스페이스에서 격리를 제공한다.
[Waveworks의 Weave Net]
Weave Net은 Kubernetes 및 호스팅 응용 프로그램에 탄력적이고 사용하기 쉬운 네트워크이다. Weave Net은 CNI 플러그인 또는 독립형으로 실행된다. 두 버전 모두 실행하기 위해 구성이나 추가 코드가 필요하지 않으며 두 경우 모두 Kubernetes의 표준과 같이 네트워크에서 포드 당 하나의 IP 주소를 제공한다.

쿠버네티스 네트워크 정리

본 문서는 쿠버네티스의 공식문서( https://kubernetes.io/docs/concepts/cluster-administration/networking/ )의 일부를 번역하고 링크를 정리하여 붙이는 것에서 시작한 문서입니다. 일부 링크는 ...