7.5. 네트워크 문제 해결
7.5.1. 네트워크 인터페이스 선택 방법
베어 메탈 또는 둘 이상의 NIC(네트워크 인터페이스 컨트롤러)가 있는 가상 머신에 설치할 경우 OpenShift Container Platform이 Kubernetes API 서버와의 통신에 사용하는 NIC는 노드가 부팅될 때 systemd에서 실행하는 nodeip-configuration.service
서비스 유닛에 의해 결정됩니다. 서비스는 노드의 네트워크 인터페이스와 서브넷으로 구성된 첫 번째 네트워크 인터페이스를 반복합니다. OpenShift Container Platform 통신에 대해 API 서버의 IP 주소를 호스팅할 수 있습니다.
nodeip-configuration.service
서비스에서 올바른 NIC를 확인한 후 서비스는 /etc/systemd/system/kubelet.service.d/20-nodenet.conf
파일을 만듭니다. 20-nodenet.conf
파일은 KUBELET_NODE_IP
환경 변수를 서비스가 선택한 IP 주소로 설정합니다.
kubelet 서비스가 시작되면 20-nodenet.conf
파일에서 환경 변수 값을 읽고 IP 주소를 --node-ip
kubelet 명령줄 인수 값으로 설정합니다. 결과적으로 kubelet 서비스는 선택한 IP 주소를 노드 IP 주소로 사용합니다.
설치 후 하드웨어 또는 네트워킹을 재구성하는 경우 재부팅 후 nodeip-configuration.service
서비스에서 다른 NIC를 선택할 수 있습니다. 경우에 따라 oc get nodes -o wide
명령의 출력에서 INTERNAL-IP
열을 검토하여 다른 NIC가 선택되었는지 감지할 수 있습니다.
다른 NIC가 선택되어 네트워크 통신이 중단되거나 잘못 구성된 경우 선택 프로세스를 재정의하는 한 가지 전략은 올바른 IP 주소를 명시적으로 설정하는 것입니다. 다음 목록은 높은 수준의 단계 및 고려 사항을 나타냅니다.
-
OpenShift Container Platform 통신에 사용할 IP 주소를 결정하는 쉘 스크립트를 생성합니다. 스크립트가
/etc/systemd/system/kubelet.service.d/98-nodenet-override.conf
와 같은 사용자 지정 유닛 파일을 생성하도록 합니다. 사용자 지정 유닛 파일인nmcli-nodenet-override.conf
를 사용하여KUBELET_NODE_IP
환경 변수를 IP 주소로 설정합니다. -
/etc/systemd/system/kubelet.service.d/20-nodenet.conf
파일을 덮어쓰지 마십시오. 동일한 디렉토리 경로에서98-nodenet-override.conf
와 같이 숫자가 더 높은 파일 이름을 지정합니다. 목표는20-nodenet.conf
다음에 사용자 지정 유닛 파일을 실행하고 환경 변수의 값을 재정의하는 것입니다. -
쉘 스크립트를 base64로 인코딩된 문자열로 사용하여 머신 구성 오브젝트를 생성하고 Machine Config Operator를 사용하여
/usr/local/bin/override-node-ip.sh
와 같은 파일 시스템 경로에 있는 노드에 스크립트를 배포합니다. -
쉘 스크립트가 실행된 후
systemctl daemon-reload
가 실행되는지 확인합니다. 가장 간단한 방법은 다음 샘플과 같이 시스템 구성에ExecStart=systemctl daemon-reload
를 지정하는 것입니다.
kubelet의 네트워크 인터페이스를 재정의하는 샘플 머신 구성
apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: worker name: 98-nodenet-override spec: config: ignition: version: 3.2.0 storage: files: - contents: source: data:text/plain;charset=utf-8;base64,<encoded_script> mode: 0755 overwrite: true path: /usr/local/bin/override-node-ip.sh systemd: units: - contents: | [Unit] Description=Override node IP detection Wants=network-online.target Before=kubelet.service After=network-online.target [Service] Type=oneshot ExecStart=/usr/local/bin/override-node-ip.sh ExecStart=systemctl daemon-reload [Install] WantedBy=multi-user.target enabled: true name: nodenet-override.service