19.5. 추가 네트워크에 pod 연결
클러스터 사용자는 pod를 추가 네트워크에 연결할 수 있습니다.
19.5.1. 추가 네트워크에 Pod 추가
추가 네트워크에 Pod를 추가할 수 있습니다. Pod는 기본 네트워크를 통해 정상적인 클러스터 관련 네트워크 트래픽을 계속 전송합니다.
Pod가 생성되면 추가 네트워크가 연결됩니다. 그러나 Pod가 이미 있는 경우에는 추가 네트워크를 연결할 수 없습니다.
Pod는 추가 네트워크와 동일한 네임스페이스에 있어야 합니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. - 클러스터에 로그인합니다.
프로세스
Pod
오브젝트에 주석을 추가합니다. 다음 주석 형식 중 하나만 사용할 수 있습니다.사용자 정의 없이 추가 네트워크를 연결하려면 다음 형식으로 주석을 추가합니다.
<network>
를 Pod와 연결할 추가 네트워크의 이름으로 변경합니다.metadata: annotations: k8s.v1.cni.cncf.io/networks: <network>[,<network>,...] 1
- 1
- 둘 이상의 추가 네트워크를 지정하려면 각 네트워크를 쉼표로 구분합니다. 쉼표 사이에 공백을 포함하지 마십시오. 동일한 추가 네트워크를 여러 번 지정하면 Pod에 해당 네트워크에 대한 인터페이스가 여러 개 연결됩니다.
사용자 정의된 추가 네트워크를 연결하려면 다음 형식으로 주석을 추가합니다.
metadata: annotations: k8s.v1.cni.cncf.io/networks: |- [ { "name": "<network>", 1 "namespace": "<namespace>", 2 "default-route": ["<default-route>"] 3 } ]
Pod를 생성하려면 다음 명령을 입력합니다.
<name>
을 Pod 이름으로 교체합니다.$ oc create -f <name>.yaml
선택사항:
Pod
CR에 주석이 있는지 확인하려면 다음 명령을 입력하고<name>
을 Pod 이름으로 교체합니다.$ oc get pod <name> -o yaml
다음 예에서
example-pod
Pod는net1
추가 네트워크에 연결되어 있습니다.$ oc get pod example-pod -o yaml apiVersion: v1 kind: Pod metadata: annotations: k8s.v1.cni.cncf.io/networks: macvlan-bridge k8s.v1.cni.cncf.io/networks-status: |- 1 [{ "name": "openshift-sdn", "interface": "eth0", "ips": [ "10.128.2.14" ], "default": true, "dns": {} },{ "name": "macvlan-bridge", "interface": "net1", "ips": [ "20.2.2.100" ], "mac": "22:2f:60:a5:f8:00", "dns": {} }] name: example-pod namespace: default spec: ... status: ...
- 1
k8s.v1.cni.cncf.io/networks-status
매개변수는 JSON 오브젝트 배열입니다. 각 오브젝트는 Pod에 연결된 추가 네트워크의 상태를 설명합니다. 주석 값은 일반 텍스트 값으로 저장됩니다.
19.5.1.1. Pod별 주소 지정 및 라우팅 옵션 지정
추가 네트워크에 Pod를 연결할 때 특정 Pod에서 해당 네트워크에 대한 추가 속성을 지정할 수 있습니다. 이를 통해 라우팅의 일부 측면을 변경하고 고정 IP 주소 및 MAC 주소를 지정할 수 있습니다. 이를 위해 JSON 형식의 주석을 사용할 수 있습니다.
사전 요구 사항
- Pod는 추가 네트워크와 동일한 네임스페이스에 있어야 합니다.
-
OpenShift CLI(
oc
)를 설치합니다. - 클러스터에 로그인해야 합니다.
프로세스
주소 지정 및/또는 라우팅 옵션을 지정하는 동안 추가 네트워크에 Pod를 추가하려면 다음 단계를 완료하십시오.
Pod
리소스 정의를 편집합니다. 기존Pod
리소스를 편집하는 경우 다음 명령을 실행하여 기본 편집기에서 정의를 편집합니다.<name>
을 편집할Pod
리소스의 이름으로 교체합니다.$ oc edit pod <name>
Pod
리소스 정의에서k8s.v1.cni.cncf.io/networks
매개변수를 Podmetadata
매핑에 추가합니다.k8s.v1.cni.cncf.io/networks
는 추가 특성을 지정하는 것 외에도NetworkAttachmentDefinition
Custom Resource(CR) 이름을 참조하는 오브젝트 목록의 JSON 문자열을 허용합니다.metadata: annotations: k8s.v1.cni.cncf.io/networks: '[<network>[,<network>,...]]' 1
- 1
- 다음 예제와 같이
<network>
를 JSON 오브젝트로 변경합니다. 작은 따옴표를 사용해야 합니다.
다음 예에서 주석은
default-route
매개변수를 사용하여 기본 경로로 지정될 네트워크 연결을 지정합니다.apiVersion: v1 kind: Pod metadata: name: example-pod annotations: k8s.v1.cni.cncf.io/networks: ' { "name": "net1" }, { "name": "net2", 1 "default-route": ["192.0.2.1"] 2 }' spec: containers: - name: example-pod command: ["/bin/bash", "-c", "sleep 2000000000000"] image: centos/tools
기본 경로는 다른 경로에 지정되지 않은 모든 트래픽이 게이트웨이로 라우팅되도록 합니다.
OpenShift Container Platform의 기본 네트워크 인터페이스 이외의 인터페이스로 기본 경로를 설정하면 Pod 사이에서 트래픽이 라우팅될 것으로 예상되는 트래픽이 다른 인터페이스를 통해 라우팅될 수 있습니다.
Pod의 라우팅 속성을 확인하려면 oc
명령을 사용하여 Pod에서 ip
명령을 실행하십시오.
$ oc exec -it <pod_name> -- ip route
JSON 형식의 오브젝트 목록에 default-route
키가 있으면 Pod의 k8s.v1.cni.cncf.io/networks-status
를 참조하여 어떤 추가 네트워크에 기본 경로가 할당되었는지를 확인할 수도 있습니다.
Pod의 고정 IP 주소 또는 MAC 주소를 설정하려면 JSON 형식의 주석을 사용하면 됩니다. 이를 위해서는 이러한 기능을 특별하게 허용하는 네트워크를 생성해야 합니다. 이는 다음과 같이 CNO의 rawCNIConfig에서 지정할 수 있습니다.
다음 명령을 실행하여 CNO CR을 편집합니다.
$ oc edit networks.operator.openshift.io cluster
다음 YAML은 CNO의 구성 매개변수를 설명합니다.
CNO(Cluster Network Operator) YAML 구성
name: <name> 1 namespace: <namespace> 2 rawCNIConfig: '{ 3 ... }' type: Raw
다음 오브젝트는 macvlan CNI 플러그인을 사용하여 고정 MAC 주소 및 IP 주소를 사용하기 위한 구성 매개변수를 설명합니다.
고정 IP 및 MAC 주소를 사용하는 macvlan CNI 플러그인 JSON 구성 오브젝트
{ "cniVersion": "0.3.1", "name": "<name>", 1 "plugins": [{ 2 "type": "macvlan", "capabilities": { "ips": true }, 3 "master": "eth0", 4 "mode": "bridge", "ipam": { "type": "static" } }, { "capabilities": { "mac": true }, 5 "type": "tuning" }] }
그런 다음 위의 네트워크 연결을 키와 함께 JSON 형식 주석에서 참조하여 지정된 Pod에 할당할 고정 IP 및 MAC 주소를 지정할 수 있습니다.
다음을 사용하여 Pod를 편집합니다.
$ oc edit pod <name>
고정 IP 및 MAC 주소를 사용하는 macvlan CNI 플러그인 JSON 구성 오브젝트
apiVersion: v1 kind: Pod metadata: name: example-pod annotations: k8s.v1.cni.cncf.io/networks: '[ { "name": "<name>", 1 "ips": [ "192.0.2.205/24" ], 2 "mac": "CA:FE:C0:FF:EE:00" 3 } ]'
고정 IP 주소와 MAC 주소를 동시에 사용할 필요는 없으며 개별적으로 또는 함께 사용할 수 있습니다.
추가 네트워크가 있는 Pod의 IP 주소 및 MAC 속성을 확인하려면 oc
명령을 사용하여 Pod에서 ip 명령을 실행합니다.
$ oc exec -it <pod_name> -- ip a