7.4. 네트워크 문제 해결

7.4.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.1.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