컨테이너 네트워크 인터페이스 선택

가상 사설 클라우드

컨테이너 네트워크 인터페이스(CNI)를 선택하려면 다음 정보를 검토하세요.

Red Hat OpenShift on IBM Cloud 버전 4.20 이상에서는 Calico 가 기본 CNI이지만, RHCOS 워커 노드를 사용하는 VPC 클러스터는 클러스터 CNI로 OVN(개방형 가상 네트워크)을 선택할 수 있습니다.

Calico 기본값
Calico 는 클라우드, 온프레미스 또는 엣지의 모든 Kubernetes 배포를 위한 네트워킹, 네트워크 보안 및 통합 가시성을 위한 단일 플랫폼입니다. 이제 막 Kubernetes 을 시작하든 대규모로 운영하든, Calico 의 오픈 소스, 엔터프라이즈 및 클라우드 에디션은 필요한 네트워킹, 보안 및 통합 가시성을 제공합니다. 자세한 내용은 Calico 문서를 참조하세요.
OVN- Kubernetes (OVN) 4.20 이후 RHCOS 워커 노드 전용
OVN- Kubernetes 은 오픈 가상 네트워크(OVN)를 기반으로 하며 오버레이 기반 네트워킹 구현을 제공합니다. OVN- Kubernetes 플러그인을 사용하는 클러스터는 각 노드에서 Open vSwitch (OVS)도 실행합니다. OVN은 선언된 네트워크 구성을 구현하기 위해 각 노드에서 OVS를 구성합니다. 자세한 내용은 Red Hat 문서를 참조하세요

Calico 및 OVN 비교

다음 표를 검토하여 Calico 및 OVN의 기능을 비교하세요.

OVN을 사용할 때는 VPC 서브넷이 다음 표에 지정된 추가 서브넷과 겹치지 않는지 확인해야 합니다. 서브넷이 겹치면 파드 간 네트워킹이 실패합니다.

Layer2 또한 layer3 사용자 정의 네트워크(UDN)는 OpenShift 가상화 VM과 같이 DHCP를 사용하는 워크로드에서는 지원되지 않습니다.

Calico 및 OVN 비교표
컴포넌트 Calico OVN- Kubernetes
캡슐화
  • IP 프로토콜의 IP ( UDP 또는 TCP 아님 )
  • 다른 서브넷에 있는 노드에서 실행되는 파드의 파드 간 트래픽만 캡슐화합니다.
  • Geneve: UDP 포트 6081의 프로토콜
  • 모든 파드 간 트래픽을 캡슐화합니다
기본 클러스터 네트워크/파드 MTU 기본값은 1480바이트(20바이트 IPinIP 헤더)입니다. 이는 변경할 수 있습니다. 기본값은 1400바이트(100바이트 제네브 헤더)입니다. 이는 변경할 수 있습니다. 데몬셋은 ip link set dev ens3 mtu 을 실행하는 대신 NetworkManager 파일을 생성해야 합니다. 또한 새 워커 노드를 다시 시작해야 합니다.
파드 IPAM Calico 는 처음에 각 새 노드에 /26 서브넷을 할당합니다(64개 IP, 최소 하나는 일반적으로 tunl0 IP로 사용되며 나머지는 파드에 사용 가능). 26의 모든 파드 IP가 사용되는 경우 Calico 는 두 번째 /26 서브넷을 노드에 할당하고 필요한 경우 더 많은 서브넷을 할당합니다. calicoctl ipam check 에서 각 노드에 할당된 서브넷을 확인할 수 있습니다. OVN은 처음에 각각의 새 클러스터 노드에 /24 포드 서브넷(256개 IP)을 할당합니다. 더 이상 파드 서브넷을 추가할 수 있는 옵션이 없습니다. 또한 각 새 노드에 조인 서브넷 IP를 할당하여 OVN에서 내부적으로 사용합니다
파드 간 라우팅
  • 리눅스 경로를 사용합니다.
  • BGP를 사용하여 경로를 배포합니다.
  • tunl0 인터페이스를 사용하여 캡슐화합니다.
  • Open vSwitch (OVS)는 각 노드에서 실행되며 파드 간 트래픽을 라우팅한다.
  • OVN은 파드 간 라우팅을 정의하기 위해 OVS 플로우를 구성합니다.
  • 각 노드에는 다음과 같은 다른 많은 인터페이스가 생성된다: ovs-system, genev_sys_6081, ovn-k8s-mp0, br-int, br-ex 와 같은 많은 다른 인터페이스가 각 노드에서 생성되며 OVN과 OVS에서 사용된다
Kubernetes 네트워크 정책
  • calico-node 에서 iptables 규칙을 추가하여 구현했습니다.
  • 네트워크 정책에 의해 차단된 트래픽을 로깅할 수 있지만 복잡합니다. "로그" 작업을 사용하는 추가 Calico 정책과 이러한 로그 작업을 어디에/언제 배치할지에 대한 약간의 생각과 계획이 필요합니다.
  • 작업자 노드의 syslog 로그를 검색하기 어려울 수 있습니다.
  • 로그에는 어떤 정책이 트래픽을 허용하거나 차단했는지는 포함되지 않습니다.
  • 논리적 포트(iptable이 아닌)에서 ACL을 사용하여 OVS에서 구현합니다.
  • 주석을 사용하면 네트워크 정책 삭제 및/또는 허용된 트래픽을 훨씬 쉽게 기록할 수 있습니다.
  • 정책 활동을 기록할 네임스페이스에 주석을 달고 허용, 거부 또는 둘 다 기록할지 여부를 지정하세요.
  • 로그는 ovnkube-node 파드의 /var/log/ovn/acl-audit-log.log 파일로 전송됩니다.
  • 이러한 로그를 다른 로그 대상으로 보내기 위한 구성 옵션이 있습니다.
  • 정책은 허용 전용이므로 로그에는 어떤 정책이 트래픽을 허용했는지는 포함되지만 어떤 정책이 트래픽을 거부했는지는 포함되지 않습니다.
  • 허용된 트래픽을 기록하려면 적어도 하나의 정책이 있어야 합니다.
호스트 네트워크 정책 Calico GlobalNetworkPolicies 없음
추가 서브넷 없음
  • 서브넷 가입: 100.64.0.0/16 ( OpenShift 기본값).
  • 마스커레이드 서브넷: 169.254.64.0/18. 이는 169.254.0.0/17 의 OpenShift 기본값과 다릅니다. 이 차이는 로컬 레지스트리 하프록시에 사용되는 169.254.2.0/24 IP와의 충돌을 피하기 위한 것입니다.
  • 트랜짓 서브넷:100.88.0.0/16 ( OpenShift 기본값).
API서버 시계
  • calico-typha 리소스 워치를 등록하고 calico-node 파드에 대한 프록시 역할을 수행하여 변경 사항을 알립니다.
  • calico-node calico-typha 파드 중 하나에 연결하여 리소스 변경 알림을 등록합니다.
  • 컨트롤 플레인의 ovnkube-cluster-manager 컨테이너는 새 노드를 감시합니다.
  • 각 클러스터 노드의 ovnkube-controller 컨테이너는 리소스를 감시하고 이를 nbdb의 OVN 논리 항목으로 변환합니다.
CNI calicocalico-ipam CNI 바이너리는 calico-node 파드의 install-cni initContainer 에 의해 각 노드에 복사됩니다. ovnkube-node 파드의 ovnkube-controller 컨테이너는 추가 및 삭제 호출을 위한 CNI 바이너리를 실행합니다.
리소스가 작성됨
  • calico-apiserver 네임스페이스
  • calico-apiserver (배포, 2개 파드)
  • calico-system 네임스페이스
  • calico-node (각 노드)
  • calico-typha (배포, 2개~10개 파드).
  • calico-kube-controllers (1 노드).
  • openshift-kube-proxy 네임스페이스.
  • openshift-kube-proxy (각 노드).
  • tigera-operator 네임스페이스.
  • tigera-operator (배포, 파드 1개).
  • calico CNI 바이너리, calico-ipam CNI 바이너리 및 기타 다양한 CNI 바이너리는 calico-node 에서 install-cni initContainer 에 의해 각 노드에 복사된다.
  • openshift-ovn-kubernetes 네임스페이스, ovnkube-node 는 8개 컨테이너가 있는 각 노드에서, ovnkube-controller 는 리소스를 감시하고, 파드 IP를 할당하고, 리소스를 nbdb 에서 OVN 논리적 항목으로 변환한다. CNI 추가 및 삭제도 처리합니다.
  • nbdb 논리 항목을 저장합니다.
  • northd nbdb 의 논리적 항목을 sbdb 의 논리적 흐름으로 변환합니다.
  • sbdb 는 논리적 흐름을 저장합니다.
  • ovn-controller sbdb 에서 논리적 흐름을 변환하고 OVS 스위치를 프로그래밍합니다.
  • ovn-acl-logging
  • kube-rbac-proxy-node 노드 메트릭을 보호하여 권한이 있는 사용자만 스크랩할 수 있도록 합니다.
  • kube-rbac-proxy-ovn-metrics 인증된 사용자만 스크래핑할 수 있도록 OVN 메트릭을 보호합니다.
파드 간 연결
  • calico-node 파드는 처음에 TCP 172.20.0.1:2040 의 프록시 파드 리스닝에서 로컬 하프록시를 통해 kube apiserver에 연결하여 calico-typha 파드 목록을 가져옵니다.
  • calico-node 파드는 TCP 포트 5473의 calico-typha 파드 중 하나에 연결하여 클러스터 리소스 업데이트를 수신합니다.
  • calico-node 파드는 TCP 포트 179의 다른 모든 calico-node bird BGP 데몬에 풀 메시로 연결되는 bird BGP 데몬을 실행합니다.
  • 파드 간 트래픽은 동일한 서브넷에 있는 노드의 파드에 대해 직접 발생합니다.
  • 다른 서브넷에 있는 노드의 파드 간 파드 간 트래픽은 IPinIP 인캡슐레이션(또는 Satellite 클러스터의 경우 VxLAN )을 사용하여 인캡슐레이션된다.
  • 각 노드의 ovnkube-controller 컨테이너는 리소스 워치를 위해 TCP 172.20.0.1:2040 의 프록시 파드 리스닝에서 로컬 하프록시를 통해 kube apiserver에 연결한다.
  • 모든 파드-투-파드 트래픽은 Geneve를 사용하여 캡슐화되며 UDP 포트 6081을 통해 전송된다.
  • 자세한 내용은 방화벽 구성을 참조한다.