9장. 송신 IP 주소 구성
클러스터 관리자는 OVN-Kubernetes 컨테이너 네트워크 인터페이스(CNI) 네트워크 플러그인을 구성하여 네임스페이스 또는 네임스페이스의 특정 포드에 하나 이상의 송신 IP 주소를 할당할 수 있습니다.
9.1. 송신 IP 주소 아키텍처 설계 및 구현 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform 송신 IP 주소 기능을 사용하면 하나 이상의 네임스페이스에 있는 하나 이상의 Pod에서 발생하는 트래픽의 소스 IP 주소가 클러스터 네트워크 외부 서비스에 일관되게 표시되도록 할 수 있습니다.
예를 들어 클러스터 외부 서버에서 호스팅되는 데이터베이스를 주기적으로 쿼리하는 Pod가 있을 수 있습니다. 서버에 대한 액세스 요구 사항을 적용하기 위해 패킷 필터링 장치는 특정 IP 주소의 트래픽만 허용하도록 구성됩니다. 특정 Pod에서만 서버에 안정적으로 액세스할 수 있도록 허용하려면 서버에 요청하는 Pod에 대해 특정 송신 IP 주소를 구성하면 됩니다.
네임스페이스에 할당된 송신 IP 주소는 특정 대상으로 트래픽을 전송하는 데 사용되는 송신 라우터와 다릅니다.
일부 클러스터 구성에서는 애플리케이션 포드와 인그레스 라우터 포드가 동일한 노드에서 실행됩니다. 이 시나리오에서 애플리케이션 프로젝트에 대한 송신 IP 주소를 구성하는 경우 애플리케이션 프로젝트에서 경로로 요청을 보낼 때 해당 IP 주소는 사용되지 않습니다.
송신 IP 주소는 ifcfg-eth0
과 같은 Linux 네트워크 구성 파일에서 구성하지 않아야 합니다.
9.1.1. 플랫폼 지원 링크 복사링크가 클립보드에 복사되었습니다!
다음 표에는 다양한 플랫폼의 송신 IP 주소 기능에 대한 지원이 요약되어 있습니다.
플랫폼 | 지원됨 |
---|---|
베어 메탈 | 제공됨 |
VMware vSphere | 제공됨 |
Red Hat OpenStack Platform (RHOSP) | 제공됨 |
AWS(Amazon Web Services) | 제공됨 |
GCP(Google Cloud Platform) | 제공됨 |
Microsoft Azure | 제공됨 |
IBM Z® 및 IBM® LinuxONE | 제공됨 |
Red Hat Enterprise Linux(RHEL) KVM용 IBM Z® 및 IBM® LinuxONE | 제공됨 |
IBM Power® | 제공됨 |
Nutanix | 제공됨 |
Amazon Web Services(AWS)에서 프로비저닝된 클러스터에서는 EgressIP 기능을 사용하여 제어 평면 노드에 송신 IP 주소를 할당하는 것이 지원되지 않습니다. (BZ#2039656).
9.1.2. 퍼블릭 클라우드 플랫폼 고려 사항 링크 복사링크가 클립보드에 복사되었습니다!
일반적으로 퍼블릭 클라우드 제공업체는 이탈 IP에 제한을 둡니다. 즉, 퍼블릭 클라우드 인프라에 프로비저닝된 클러스터의 경우 노드당 할당 가능한 IP 주소의 절대 수에 제약이 있습니다. 노드당 할당 가능한 IP 주소의 최대 수 또는 IP 용량은 다음 공식으로 설명할 수 있습니다.
IP capacity = public cloud default capacity - sum(current IP assignments)
IP capacity = public cloud default capacity - sum(current IP assignments)
Egress IP 기능은 노드당 IP 주소 용량을 관리하지만 배포 시 이러한 제약 조건을 계획하는 것이 중요합니다. 예를 들어, 퍼블릭 클라우드 제공자가 노드당 IP 주소 용량을 10개로 제한하고 노드가 8개인 경우, 할당 가능한 IP 주소의 총 수는 80개에 불과합니다. 더 높은 IP 주소 용량을 확보하려면 추가 노드를 할당해야 합니다. 예를 들어, 할당 가능한 IP 주소가 150개 필요한 경우 7개의 추가 노드를 할당해야 합니다.
퍼블릭 클라우드 환경에서 모든 노드의 IP 용량과 서브넷을 확인하려면 oc get node <노드 이름> -o yaml
명령을 입력하면 됩니다. cloud.network.openshift.io/egress-ipconfig
주석에는 노드의 용량 및 서브넷 정보가 포함되어 있습니다.
주석 값은 기본 네트워크 인터페이스에 대한 다음 정보를 제공하는 필드가 있는 단일 객체가 있는 배열입니다.
-
interface
: AWS 및 Azure의 인터페이스 ID와 GCP의 인터페이스 이름을 지정합니다. -
ifaddr
: 하나 또는 두 개의 IP 주소 패밀리에 대한 서브넷 마스크를 지정합니다. -
용량
: 노드의 IP 주소 용량을 지정합니다. AWS에서는 IP 주소 용량이 IP 주소 패밀리별로 제공됩니다. Azure와 GCP에서는 IP 주소 용량에 IPv4 주소와 IPv6 주소가 모두 포함됩니다.
노드 간 트래픽에 대한 이그레스 IP 주소를 자동으로 연결하고 분리할 수 있습니다. 이를 통해 네임스페이스의 여러 포드에서 발생하는 트래픽이 클러스터 외부 위치로 일관된 소스 IP 주소를 가질 수 있습니다. 이는 또한 OpenShift Container Platform 4.19의 Red Hat OpenShift Networking의 기본 네트워킹 플러그인인 OpenShift SDN 및 OVN-Kubernetes도 지원합니다.
RHOSP 송신 IP 주소 기능은 egressip-<IP 주소>
라는 Neutron 예약 포트를 생성합니다. OpenShift Container Platform 클러스터 설치에 사용된 것과 동일한 RHOSP 사용자를 사용하면 이 예약 포트에 부동 IP 주소를 할당하여 송신 트래픽에 대한 예측 가능한 SNAT 주소를 가질 수 있습니다. 예를 들어 노드 장애 조치로 인해 RHOSP 네트워크의 송신 IP 주소가 한 노드에서 다른 노드로 이동되면 Neutron 예약 포트가 제거되고 다시 생성됩니다. 즉, 플로팅 IP 연결이 끊어졌고 플로팅 IP 주소를 새 예약 포트에 수동으로 다시 할당해야 합니다.
RHOSP 클러스터 관리자가 예약 포트에 플로팅 IP를 할당하면 OpenShift Container Platform은 예약 포트를 삭제할 수 없습니다. CloudPrivateIPConfig
개체는 RHOSP 클러스터 관리자가 예약 포트에서 플로팅 IP를 할당 해제할 때까지 삭제 및 이동 작업을 수행할 수 없습니다.
다음 예는 여러 퍼블릭 클라우드 공급자의 노드에서 주석을 설명한 것입니다. 가독성을 위해 주석은 들여쓰기되어 있습니다.
AWS의 cloud.network.openshift.io/egress-ipconfig
주석 예시
GCP의 cloud.network.openshift.io/egress-ipconfig
주석 예시
다음 섹션에서는 용량 계산에 사용할 수 있는 지원되는 퍼블릭 클라우드 환경의 IP 주소 용량을 설명합니다.
9.1.2.1. Amazon Web Services(AWS) IP 주소 용량 제한 링크 복사링크가 클립보드에 복사되었습니다!
AWS에서 IP 주소 할당에 대한 제약은 구성된 인스턴스 유형에 따라 달라집니다. 자세한 내용은 인스턴스 유형별 네트워크 인터페이스당 IP 주소를 참조하세요.
9.1.2.2. Google Cloud Platform(GCP) IP 주소 용량 제한 링크 복사링크가 클립보드에 복사되었습니다!
GCP에서 네트워킹 모델은 IP 주소 할당이 아닌 IP 주소 별칭을 통해 추가 노드 IP 주소를 구현합니다. 그러나 IP 주소 용량은 IP 별칭 용량에 직접 매핑됩니다.
IP 별칭 할당에는 다음과 같은 용량 제한이 있습니다.
- 노드당 IP 별칭의 최대 개수는 IPv4와 IPv6 모두 100개입니다.
- VPC당 IP 별칭의 최대 개수는 지정되어 있지 않지만, OpenShift Container Platform 확장성 테스트 결과 최대 개수가 약 15,000개로 나타났습니다.
자세한 내용은 인스턴스당 할당량 및 별칭 IP 범위 개요를 참조하세요.
9.1.2.3. Microsoft Azure IP 주소 용량 제한 링크 복사링크가 클립보드에 복사되었습니다!
Azure에서는 IP 주소 할당에 대해 다음과 같은 용량 제한이 있습니다.
- NIC당 할당 가능한 IP 주소의 최대 수는 IPv4와 IPv6 모두 256입니다.
- 가상 네트워크당 할당된 IP 주소의 최대 수는 65,536을 초과할 수 없습니다.
자세한 내용은 네트워킹 제한을 참조하세요.
9.1.3. 추가 네트워크 인터페이스에서 이그레스 IP를 사용하기 위한 고려 사항 링크 복사링크가 클립보드에 복사되었습니다!
OpenShift Container Platform에서 송신 IP는 관리자에게 네트워크 트래픽을 제어할 수 있는 방법을 제공합니다. 탈출 IP는 br-ex
Open vSwitch(OVS) 브리지 인터페이스 및 IP 연결이 활성화된 모든 물리적 인터페이스와 함께 사용할 수 있습니다.
다음 명령을 실행하여 네트워크 인터페이스 유형을 검사할 수 있습니다.
ip -details link show
$ ip -details link show
기본 네트워크 인터페이스에는 서브넷 마스크도 포함된 노드 IP 주소가 지정됩니다. 클러스터 내의 각 노드에 대한 Kubernetes 노드 개체에서 k8s.ovn.org/node-primary-ifaddr
주석을 검사하여 이 노드 IP 주소에 대한 정보를 검색할 수 있습니다. IPv4 클러스터에서 이 주석은 다음 예와 유사합니다: "k8s.ovn.org/node-primary-ifaddr: {"ipv4":"192.168.111.23/24"}"
.
송신 IP가 기본 네트워크 인터페이스 서브넷의 서브넷 내에 없는 경우 기본 네트워크 인터페이스 유형이 아닌 다른 Linux 네트워크 인터페이스에서 송신 IP를 사용할 수 있습니다. 이를 통해 OpenShift Container Platform 관리자는 라우팅, 주소 지정, 세분화, 보안 정책 등의 네트워킹 측면에 대해 더 높은 수준의 제어권을 확보할 수 있습니다. 이 기능은 사용자에게 트래픽 분할이나 특수 요구 사항 충족 등의 목적으로 특정 네트워크 인터페이스를 통해 워크로드 트래픽을 라우팅하는 옵션을 제공합니다.
송신 IP가 기본 네트워크 인터페이스의 서브넷 내에 없으면 노드에 다른 네트워크 인터페이스가 있을 경우 송신 트래픽에 대해 다른 네트워크 인터페이스가 선택될 수 있습니다.
k8s.ovn.org/host-cidrs
Kubernetes 노드 주석을 검사하면 어떤 다른 네트워크 인터페이스가 송신 IP를 지원하는지 확인할 수 있습니다. 이 주석에는 기본 네트워크 인터페이스에 대해 발견된 주소와 서브넷 마스크가 포함되어 있습니다. 여기에는 추가적인 네트워크 인터페이스 주소와 서브넷 마스크 정보도 포함되어 있습니다. 이러한 주소와 서브넷 마스크는 가장 긴 접두사 일치 라우팅 메커니즘을 사용하여 어떤 네트워크 인터페이스가 출구 IP를 지원하는지 확인하는 네트워크 인터페이스에 할당됩니다.
OVN-Kubernetes는 특정 네임스페이스와 포드에서 나가는 네트워크 트래픽을 제어하고 지시하는 메커니즘을 제공합니다. 이렇게 하면 특정 네트워크 인터페이스와 특정 출구 IP 주소를 통해 클러스터에서 나갈 수 있습니다.
기본 네트워크 인터페이스가 아닌 네트워크 인터페이스에 출구 IP를 할당하기 위한 요구 사항
기본 네트워크 인터페이스가 아닌 특정 인터페이스를 통해 송신 IP 및 트래픽을 라우팅하려는 사용자의 경우 다음 조건을 충족해야 합니다.
- OpenShift Container Platform은 베어 메탈 클러스터에 설치됩니다. 이 기능은 클라우드나 하이퍼바이저 환경에서는 비활성화됩니다.
- OpenShift Container Platform 포드가 호스트 네트워크 로 구성되지 않았습니다.
- 네트워크 인터페이스가 제거되거나, 인터페이스에서 송신 IP를 호스팅할 수 있게 하는 IP 주소와 서브넷 마스크가 제거되면 송신 IP가 재구성됩니다. 따라서 출구 IP는 다른 노드와 인터페이스에 할당될 수 있습니다.
- 보조 네트워크 인터페이스 카드(NIC)에서 Egress IP 주소를 사용하는 경우 노드 튜닝 운영자를 사용하여 보조 NIC에서 IP 전달을 활성화해야 합니다.
9.1.4. Pod에 송신 IP 할당 링크 복사링크가 클립보드에 복사되었습니다!
하나 이상의 송신 IP를 네임스페이스 또는 네임스페이스의 특정 Pod에 할당하려면 다음 조건을 충족해야 합니다.
-
클러스터에서 하나 이상의 노드에
k8s.ovn.org/egress-assignable: ""
레이블이 있어야 합니다. -
네임스페이스의 Pod에서 클러스터를 떠나는 트래픽의 소스 IP 주소로 사용할 하나 이상의 송신 IP 주소를 정의하는
EgressIP
오브젝트가 있습니다.
송신 IP 할당을 위해 클러스터의 노드에 레이블을 지정하기 전에 EgressIP
오브젝트를 생성하면 OpenShift Container Platform에서 모든 송신 IP 주소를 k8s.ovn.org/egress-assignable: ""
레이블이 있는 첫 번째 노드에 할당할 수 있습니다.
송신 IP 주소가 클러스터의 여러 노드에 널리 분산되도록 하려면 EgressIP
오브젝트를 만들기 전에 송신 IP 주소를 호스팅할 노드에 항상 레이블을 적용하십시오.
9.1.5. 노드에 송신 IP 할당 링크 복사링크가 클립보드에 복사되었습니다!
EgressIP
오브젝트를 생성할 때 k8s.ovn.org/egress-assignable: ""
레이블이 지정된 노드에 다음 조건이 적용됩니다.
- 송신 IP 주소는 한 번에 두 개 이상의 노드에 할당되지 않습니다.
- 송신 IP 주소는 송신 IP 주소를 호스팅할 수 있는 사용 가용한 노드 간에 균형을 이룹니다.
EgressIP
오브젝트의spec.EgressIPs
배열에서 둘 이상의 IP 주소를 지정하는 경우 다음 조건이 적용됩니다.- 지정된 IP 주소 중 두 개 이상을 호스팅할 노드는 없습니다.
- 지정된 네임스페이스에 대해 지정된 IP 주소 간에 트래픽이 거의 동일하게 분산됩니다.
- 노드를 사용할 수 없게 되면 할당된 모든 송신 IP 주소가 이전에 설명한 조건에 따라 자동으로 재할당됩니다.
Pod가 여러 EgressIP
오브젝트의 선택기와 일치하는 경우 EgressIP
오브젝트에 지정된 송신 IP 주소 중 어느 것이 Pod의 송신 IP 주소로 할당되는지 보장할 수 없습니다.
또한, EgressIP
객체가 여러 개의 송신 IP 주소를 지정하는 경우 어떤 송신 IP 주소가 사용될지 보장할 수 없습니다. 예를 들어, 포드가 두 개의 송신 IP 주소( 10.10.20.1
및 10.10.20.2
)를 갖는 EgressIP
객체에 대한 선택기와 일치하는 경우 각 TCP 연결 또는 UDP 대화에 두 주소가 사용될 수 있습니다.
9.1.6. 송신 IP 주소 구성에 대한 아키텍처 다이어그램 링크 복사링크가 클립보드에 복사되었습니다!
다음 다이어그램에서는 송신 IP 주소 구성을 보여줍니다. 다이어그램은 클러스터의 세 개 노드에서 실행 중인 두 개의 다른 네임스페이스에 있는 포드 4개를 설명합니다. 노드는 호스트 네트워크의 192.168.126.0/18
CIDR 블록에서 할당된 IP 주소입니다.
노드 1과 노드 3은 모두 k8s.ovn.org/egress-assignable: ""
로 레이블이 지정되어 있으므로 송신 IP 주소 할당에 사용할 수 있습니다.
다이어그램에 있는 점선은 노드 1 및 노드 3에서 클러스터를 나가기 위해 포드 네트워크를 통해 이동하는 pod1, pod2, pod3의 트래픽 흐름을 나타냅니다. 외부 서비스에서 예제의 EgressIP
오브젝트에서 선택한 Pod 중 하나에서 트래픽을 수신하는 경우 소스 IP 주소는 192.168.126.10
또는 192.168.126.102
입니다. 트래픽은 이 두 노드 간에 대략적으로 균등하게 분산됩니다.
다이어그램의 다음 리소스는 자세히 설명되어 있습니다.
Namespace
오브젝트네임스페이스는 다음 매니페스트에 정의됩니다.
네임스페이스 오브젝트
Copy to Clipboard Copied! Toggle word wrap Toggle overflow EgressIP
오브젝트다음
EgressIP
오브젝트는env
라벨이prod
로 설정된 모든 포드를 선택하는 구성을 설명합니다. 선택한 포드의 송신 IP 주소는192.168.126.10
및192.168.126.102
입니다.EgressIP
오브젝트Copy to Clipboard Copied! Toggle word wrap Toggle overflow 이전 예제의 구성에 대해 OpenShift Container Platform은 두 송신 IP 주소를 사용 가능한 노드에 할당합니다.
status
필드는 송신 IP 주소가 할당되었는지 여부와 위치를 반영합니다.