30.5. IP 주소 풀에 대한 알림 정보
IP 주소가 계층 2 프로토콜, BGP 프로토콜 또는 둘 다와 함께 알리도록 MetalLB를 구성할 수 있습니다. 계층 2를 사용하면 MetalLB에서 내결함성 외부 IP 주소를 제공합니다. BGP를 사용하면 MetalLB에서 외부 IP 주소 및 로드 밸런싱에 대한 내결함성을 제공합니다.
MetalLB는 동일한 IP 주소 세트에 대해 L2 및 BGP를 사용한 광고를 지원합니다.
MetalLB는 특정 BGP 피어에 주소 풀을 네트워크의 노드 하위 집합에 효과적으로 할당할 수 있는 유연성을 제공합니다. 이를 통해 더 복잡한 구성(예: 노드 분리 또는 네트워크의 세그먼트화)이 가능합니다.
30.5.1. BGPAdvertisement 사용자 정의 리소스 정보
BGPAdvertisements
오브젝트의 필드는 다음 표에 정의되어 있습니다.
필드 | 유형 | 설명 |
---|---|---|
|
| BGP 광고의 이름을 지정합니다. |
|
| BGP 광고의 네임스페이스를 지정합니다. MetalLB Operator에서 사용하는 동일한 네임스페이스를 지정합니다. |
|
|
선택 사항: 32비트 CIDR 마스크에 포함할 비트 수를 지정합니다. 발표자가 BGP 피어에 알리는 경로를 집계하기 위해 마스크는 여러 서비스 IP 주소의 경로에 적용되고 발표자는 집계된 경로를 알립니다. 예를 들어 집계 길이가 |
|
|
선택 사항: 128비트 CIDR 마스크에 포함할 비트 수를 지정합니다. 예를 들어 집계 길이가 |
|
| 선택 사항: 하나 이상의 BGP 커뮤니티를 지정합니다. 각 커뮤니티는 콜론 문자로 구분된 두 개의 16비트 값으로 지정됩니다. 잘 알려진 커뮤니티는 16비트 값으로 지정해야 합니다.
|
|
| 선택 사항: 이 광고의 로컬 기본 설정을 지정합니다. 이 BGP 속성은 Autonomous System 내의 BGP 세션에 적용됩니다. |
|
|
선택 사항: 이 광고와 함께 광고할 |
|
|
선택 사항: 이 광고와 함께 광고되는 |
|
|
선택 사항: |
|
| 선택 사항: 피어는 선택한 풀의 IP를 알리도록 BGP 피어를 제한합니다. 비어 있으면 로드 밸런서 IP가 구성된 모든 BGP 피어에게 발표됩니다. |
30.5.2. BGP 광고 및 기본 사용 사례를 사용하여 MetalLB 구성
피어 BGP 라우터가 203.0.113.200/32
경로를 수신하고 MetalLB에서 서비스에 할당하는 각 로드 밸런서 IP 주소에 대해 fc00:f853:ccd:e799::1/128
경로를 수신하도록 MetalLB를 다음과 같이 구성합니다. localPref
및 community 필드를 지정하지 않으므로 localPref
가 0으로 설정되고 BGP 커뮤니티가 없는 상태에서 경로가 광고됩니다.
30.5.2.1. 예: BGP를 사용하여 기본 주소 풀 구성 알림
IPAddressPool
이 BGP 프로토콜과 함께 알리도록 다음과 같이 MetalLB를 구성합니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. -
cluster-admin
권한이 있는 사용자로 로그인합니다.
프로세스
IP 주소 풀을 만듭니다.
다음 예와 같은 콘텐츠를 사용하여
ipaddresspool.yaml
과 같은 파일을 만듭니다.apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: namespace: metallb-system name: doc-example-bgp-basic spec: addresses: - 203.0.113.200/30 - fc00:f853:ccd:e799::/124
IP 주소 풀의 구성을 적용합니다.
$ oc apply -f ipaddresspool.yaml
BGP 광고를 만듭니다.
다음 예와 같은 콘텐츠를 사용하여
bgpadvertisement.yaml
과 같은 파일을 만듭니다.apiVersion: metallb.io/v1beta1 kind: BGPAdvertisement metadata: name: bgpadvertisement-basic namespace: metallb-system spec: ipAddressPools: - doc-example-bgp-basic
설정을 적용합니다.
$ oc apply -f bgpadvertisement.yaml
30.5.3. BGP 광고 및 고급 사용 사례를 사용하여 MetalLB 구성
MetalLB가 203.0.113.200
과 203.0.113.203
사이의 범위에서 로드 밸런서 서비스에 IP 주소를 할당하고 fc00:f853:ccd:e799::0
및 fc00:f853:ccd:e799::f
.
두 개의 BGP 알림을 설명하려면 MetalLB에서 203.0.113.200
의 IP 주소를 서비스에 할당할 때 인스턴스를 고려하십시오. 이 IP 주소를 예로 들어, 발표자는 BGP 피어에 두 경로를 알립니다.
-
203.0.113.200/32
,localPref
가100
으로 설정되고 커뮤니티는NO_ADVERTISE
커뮤니티의 숫자 값으로 설정됩니다. 이 사양은 피어 라우터에 이 경로를 사용할 수 있지만 이 경로에 대한 정보를 BGP 피어로 전파해서는 안 됩니다. -
203.0.113.200/30
은 MetalLB에서 할당한 로드 밸런서 IP 주소를 단일 경로로 집계합니다. MetalLB는8000:800
으로 설정된 커뮤니티 특성을 사용하여 집계된 경로를 BGP 피어로 알립니다. BGP 피어는203.0.113.200/30
경로를 다른 BGP 피어에 전파합니다. 트래픽이 speaker가 있는 노드로 라우팅되는 경우203.0.113.200/32
경로는 트래픽을 클러스터로 전달하고 서비스와 연결된 Pod에 사용됩니다.
더 많은 서비스를 추가하고 MetalLB는 풀에서 더 많은 로드 밸런서 IP 주소를 할당하면 피어 라우터는 각 서비스에 대해 하나의 로컬 경로와 203.0.113.200/30
집계 경로를 수신합니다. 추가하는 각 서비스는
/30
경로를 생성하지만 MetalLB는 피어 라우터와 통신하기 전에 경로를 하나의 BGP 광고에 중복시킵니다.
30.5.3.1. 예: BGP를 사용하여 고급 주소 풀 구성 알림
IPAddressPool
이 BGP 프로토콜과 함께 알리도록 다음과 같이 MetalLB를 구성합니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. -
cluster-admin
권한이 있는 사용자로 로그인합니다.
프로세스
IP 주소 풀을 만듭니다.
다음 예와 같은 콘텐츠를 사용하여
ipaddresspool.yaml
과 같은 파일을 만듭니다.apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: namespace: metallb-system name: doc-example-bgp-adv labels: zone: east spec: addresses: - 203.0.113.200/30 - fc00:f853:ccd:e799::/124 autoAssign: false
IP 주소 풀의 구성을 적용합니다.
$ oc apply -f ipaddresspool.yaml
BGP 광고를 만듭니다.
다음 예와 같은 콘텐츠를 사용하여
bgpadvertisement1.yaml
과 같은 파일을 만듭니다.apiVersion: metallb.io/v1beta1 kind: BGPAdvertisement metadata: name: bgpadvertisement-adv-1 namespace: metallb-system spec: ipAddressPools: - doc-example-bgp-adv communities: - 65535:65282 aggregationLength: 32 localPref: 100
설정을 적용합니다.
$ oc apply -f bgpadvertisement1.yaml
다음 예와 같은 콘텐츠를 사용하여
bgpadvertisement2.yaml
과 같은 파일을 만듭니다.apiVersion: metallb.io/v1beta1 kind: BGPAdvertisement metadata: name: bgpadvertisement-adv-2 namespace: metallb-system spec: ipAddressPools: - doc-example-bgp-adv communities: - 8000:800 aggregationLength: 30 aggregationLengthV6: 124
설정을 적용합니다.
$ oc apply -f bgpadvertisement2.yaml
30.5.4. 노드의 하위 집합에서 IP 주소 풀 광고
특정 노드 세트에서만 IP 주소 풀에서 IP 주소를 알리려면 BGPAdvertisement 사용자 정의 리소스에서 .spec.nodeSelector
사양을 사용합니다. 이 사양은 IP 주소 풀을 클러스터의 노드 집합과 연결합니다. 이는 클러스터의 다른 서브넷에 노드가 있고 특정 서브넷의 주소 풀에서 IP 주소를 알립니다(예: 공용 서브넷만 해당).
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. -
cluster-admin
권한이 있는 사용자로 로그인합니다.
프로세스
사용자 정의 리소스를 사용하여 IP 주소 풀을 생성합니다.
apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: namespace: metallb-system name: pool1 spec: addresses: - 4.4.4.100-4.4.4.200 - 2001:100:4::200-2001:100:4::400
BGPAdvertisement 사용자 정의 리소스에서
.spec.nodeSelector
값을 정의하여 클러스터의 IP 주소를 알릴 노드를 제어합니다.apiVersion: metallb.io/v1beta1 kind: BGPAdvertisement metadata: name: example spec: ipAddressPools: - pool1 nodeSelector: - matchLabels: kubernetes.io/hostname: NodeA - matchLabels: kubernetes.io/hostname: NodeB
이 예에서 pool1
의 IP 주소는 NodeA
및 NodeB
에서만 알립니다.
30.5.5. L2Advertisement 사용자 정의 리소스 정보
l2Advertisements
오브젝트의 필드는 다음 표에 정의되어 있습니다.
필드 | 유형 | 설명 |
---|---|---|
|
| L2 광고의 이름을 지정합니다. |
|
| L2 광고의 네임스페이스를 지정합니다. MetalLB Operator에서 사용하는 동일한 네임스페이스를 지정합니다. |
|
|
선택 사항: 이 광고와 함께 광고할 |
|
|
선택 사항: 이 광고와 함께 광고되는 |
|
|
선택 사항: 중요 노드를 다음 홉으로 알리도록 제한하는 것은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다. Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오. |
|
|
선택 사항: 로드 밸런서 IP를 알리는 데 사용되는 |
30.5.6. L2 광고를 사용하여 MetalLB 구성
IPAddressPool
이 L2 프로토콜과 함께 알리도록 다음과 같이 MetalLB를 구성합니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. -
cluster-admin
권한이 있는 사용자로 로그인합니다.
프로세스
IP 주소 풀을 만듭니다.
다음 예와 같은 콘텐츠를 사용하여
ipaddresspool.yaml
과 같은 파일을 만듭니다.apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: namespace: metallb-system name: doc-example-l2 spec: addresses: - 4.4.4.0/24 autoAssign: false
IP 주소 풀의 구성을 적용합니다.
$ oc apply -f ipaddresspool.yaml
L2 광고를 생성합니다.
다음 예와 같은 콘텐츠를 사용하여
l2advertisement.yaml
과 같은 파일을 생성합니다.apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: l2advertisement namespace: metallb-system spec: ipAddressPools: - doc-example-l2
설정을 적용합니다.
$ oc apply -f l2advertisement.yaml
30.5.7. L2 광고 및 라벨을 사용하여 MetalLB 구성
BGPAdvertisement
및 L2Advertisement
사용자 정의 리소스 정의의 ipAddressPoolSelectors
필드는 이름 자체 대신 IPAddressPool
에 할당된 레이블을 기반으로 IPAddressPool
을 광고에 연결하는 데 사용됩니다.
이 예제에서는 ipAddressPoolSelectors
필드를 구성하여 IPAddressPool
Pool이 L2 프로토콜로 광고되도록 MetalLB를 구성하는 방법을 보여줍니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. -
cluster-admin
권한이 있는 사용자로 로그인합니다.
프로세스
IP 주소 풀을 만듭니다.
다음 예와 같은 콘텐츠를 사용하여
ipaddresspool.yaml
과 같은 파일을 만듭니다.apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: namespace: metallb-system name: doc-example-l2-label labels: zone: east spec: addresses: - 172.31.249.87/32
IP 주소 풀의 구성을 적용합니다.
$ oc apply -f ipaddresspool.yaml
ipAddressPoolSelectors
를 사용하여 IP를 알리는 L2 광고를 만듭니다.다음 예와 같은 콘텐츠를 사용하여
l2advertisement.yaml
과 같은 파일을 생성합니다.apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: l2advertisement-label namespace: metallb-system spec: ipAddressPoolSelectors: - matchExpressions: - key: zone operator: In values: - east
설정을 적용합니다.
$ oc apply -f l2advertisement.yaml
30.5.8. 선택한 인터페이스에 대해 L2 알림을 사용하여 MetalLB 구성
기본적으로 서비스에 할당된 IP 주소 풀의 IP 주소는 모든 네트워크 인터페이스에서 광고됩니다. L2Advertisement
사용자 정의 리소스 정의의 interfaces
필드는 IP 주소 풀을 알리는 네트워크 인터페이스를 제한하는 데 사용됩니다.
이 예제에서는 IP 주소 풀이 모든 노드의 interfaces
필드에 나열된 네트워크 인터페이스에서만 광고되도록 MetalLB를 구성하는 방법을 보여줍니다.
사전 요구 사항
-
OpenShift CLI(
oc
)가 설치되어 있습니다. -
cluster-admin
권한이 있는 사용자로 로그인합니다.
프로세스
IP 주소 풀을 만듭니다.
ipaddresspool.yaml
과 같은 파일을 생성하고 다음 예와 같은 구성 세부 정보를 입력합니다.apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: namespace: metallb-system name: doc-example-l2 spec: addresses: - 4.4.4.0/24 autoAssign: false
다음 예와 같이 IP 주소 풀에 대한 구성을 적용합니다.
$ oc apply -f ipaddresspool.yaml
인터페이스
선택기를 사용하여 IP를 알리는 L2 광고를 만듭니다.l2advertisement.yaml
과 같은 YAML 파일을 생성하고 다음 예와 같은 구성 세부 정보를 입력합니다.apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: l2advertisement namespace: metallb-system spec: ipAddressPools: - doc-example-l2 interfaces: - interfaceA - interfaceB
다음 예와 같이 광고에 대한 구성을 적용합니다.
$ oc apply -f l2advertisement.yaml
인터페이스 선택기는 L2를 사용하여 지정된 IP를 알리기 위해 MetalLB가 노드를 선택하는 방식에 영향을 미치지 않습니다. 노드에 선택한 인터페이스가 없는 경우 선택한 노드에서 서비스를 알리지 않습니다.
30.5.9. 보조 네트워크를 사용하여 MetalLB 구성
OpenShift Container Platform 4.14에서 기본 네트워크 동작은 네트워크 인터페이스 간에 IP 패킷 전달을 허용하지 않는 것입니다. 따라서 보조 인터페이스에 MetalLB를 구성할 때 필요한 인터페이스에 대해서만 IP 전달을 활성화하려면 머신 구성을 추가해야 합니다.
4.13에서 업그레이드된 OpenShift Container Platform 클러스터는 글로벌 IP 전달을 활성화하기 위해 업그레이드 중에 글로벌 매개변수가 설정되어 있으므로 영향을 받지 않습니다.
보조 인터페이스에 대한 IP 전달을 활성화하려면 다음 두 가지 옵션이 있습니다.
- 모든 인터페이스에 대해 IP 전달을 활성화합니다.
특정 인터페이스에 대해 IP 전달을 활성화합니다.
참고특정 인터페이스에 대해 IP 전달을 활성화하면 보다 세분화된 제어를 제공하는 동시에 모든 인터페이스에 대해 활성화하면 글로벌 설정이 적용됩니다.
프로세스
MachineConfig
CR을 생성하고 적용하여bridge-net
과 같은 특정 보조 인터페이스에 대한 전달을 활성화합니다.-
MachineConfig
CR을 생성하여bridge-net
이라는 지정된 보조 인터페이스에 대한 IP 전달을 활성화합니다. 다음 YAML을
enable-ip-forward.yaml
파일에 저장합니다.apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: <node_role> 1 name: 81-enable-global-forwarding spec: config: ignition: version: 3.2.0 storage: files: - contents: source: data:text/plain;charset=utf-8;base64,`echo -e "net.ipv4.conf.bridge-net.forwarding = 1\nnet.ipv6.conf.bridge-net.forwarding = 1\nnet.ipv4.conf.bridge-net.rp_filter = 0\nnet.ipv6.conf.bridge-net.rp_filter = 0" | base64 -w0` verification: {} filesystem: root mode: 644 path: /etc/sysctl.d/enable-global-forwarding.conf osImageURL: ""
- 1
- IP 전달을 활성화하려는 노드 역할(예:
worker
)
다음 명령을 실행하여 구성을 적용합니다.
$ oc apply -f enable-ip-forward.yaml
-
또는 다음 명령을 실행하여 IP 전달을 전역적으로 활성화할 수 있습니다.
$ oc patch network.operator cluster -p '{"spec":{"defaultNetwork":{"ovnKubernetesConfig":{"gatewayConfig":{"ipForwarding": "Global"}}}}}