클래식 클러스터: 오염된 노드를 사용할 때 소스 IP를 유지하는 데 실패하는 이유가 무엇입니까?

클래식 인프라

클래식 클러스터에서 오염된 노드를 사용할 경우 소스 IP 보존이 실패하여 트래픽이 앱에 도달하지 못합니다.

클래식 클러스터에서는 서비스의 구성 파일에서로 변경하여 externalTrafficPolicy버전 1.0 로드 밸런서Local 서비스에 대해 소스 IP 보존을 사용으로 설정했습니다. 그러나 앱의 백엔드 서비스에 트래픽이 도달하지 않습니다.

로드 밸런서 서비스에 대한 소스 IP 주소 보존을 사용으로 설정하면 클라이언트 요청의 소스 IP 주소가 보존됩니다.

해당 서비스는 요청 패킷의 IP 주소가 변경되지 않았음을 보장하기 위해 동일한 작업자 노드에 있는 앱 팟(Pod)에만 트래픽을 전달합니다. 일반적으로 로드 밸런서 서비스 팟(Pod)은 앱 팟(Pod)이 배치된 것과 동일한 작업자 노드에 배치됩니다. 그러나 서비스 팟(Pod)과 앱 팟(Pod)이 동일한 작업자 노드에 스케줄되지 않는 상황 또한 있습니다. 워커 노드에서 Kubernetes 틴트를 사용하면, 틴트 톨러레이션이 없는 모든 파드는 틴트된 워커 노드에서 실행되지 않습니다. 소스 IP 주소 보존은 사용하는 오염 유형에 따라 작동하지 않을 수 있습니다.

  • 에지 노드 오염: 로드 밸런서 팟(pod)이 작업자 노드에만 배치하는지 확인하기 위해 각 공용 VLAN에서 둘 이상의 작업자 노드에 dedicated=edge 레이블을 추가했습니다. 그 후에는 이러한 에지 노드 또한 오염시켜 다른 워크로드가 이러한 에지 노드에서 실행되지 않도록 하였습니다. 그러나 앱 배치에 에지 노드 친화성 규칙 및 오염 허용을 추가하지는 않았습니다. 앱 팟(Pod)이 서비스 팟(Pod)과 동일한 오염된 노드에 스케줄될 수 없으므로 앱의 백엔드 서비스에 트래픽이 도달하지 않습니다.

  • 사용자 정의 오염: 사용자가 여러 노드에 사용자 정의 오염을 사용하여 해당 오염 허용이 있는 팟(Pod)만 이러한 노드에 배치될 수 있도록 하였습니다. 팟(Pod)이 해당 노드에만 배치되도록 앱 및 로드 밸런서 서비스의 배치에 친화성 규칙 및 오염 허용을 추가했습니다. 그러나 ibm-cloud-provider-ip 네임스페이스에서 자동으로 작성된 keepalived ibm-system 팟(Pod)은 로드 밸런서 및 앱 팟(Pod)이 항상 동일한 작업자 노드로 스케줄되도록 보장합니다. 이러한 keepalived 팟(Pod)에는 사용된 사용자 정의 오염에 대한 오염 허용이 없습니다. 이들은 앱 팟(Pod)이 실행 중인 동일한 오염된 노드에 스케줄될 수 없으므로 앱의 백엔드 서비스에 트래픽이 도달하지 않습니다.

다음 선택사항 중 하나를 선택하여 문제를 해결하십시오.

에지 노드 오염: 로드 밸런서 및 앱 팟(Pod)이 오염된 에지 노드에 배치되도록 하려면 앱 배치에 에지 노드 친화성 규칙 및 오염 허용을 추가하십시오. 로드 밸런서 팟(Pod)에는 기본적으로 이러한 친화성 규칙 및 오염 허용이 있습니다.

사용자 정의 오염: keepalived 팟(Pod)에 오염 허용이 없는 사용자 정의 오염을 제거하십시오. 대신 작업자 노드를 에지 노드로 레이블 지정한 후 이러한 에지 노드를 오염시킬 수 있습니다.

이전 옵션 중 하나를 완료했지만 keepalived 파드가 여전히 예약되지 않은 경우 keepalived 포드에 대한 자세한 정보를 얻을 수 있습니다:

  1. keepalived 팟(Pod)을 가져오십시오.

    oc get pods -n ibm-system
    
  2. 출력에서 ibm-cloud-provider-ipStatus**가 **인 Pending 팟(Pod)을 찾으십시오. 예:

    ibm-cloud-provider-ip-169-61-XX-XX-55967b5b8c-7zv9t     0/1       Pending   0          2m        <none>          <none>
    ibm-cloud-provider-ip-169-61-XX-XX-55967b5b8c-8ptvg     0/1       Pending   0          2m        <none>          <none>
    
  3. keepalived 팟(Pod)에 대한 설명을 출력하고 Events 섹션을 찾으십시오. 나열된 모든 오류 또는 경고 메시지를 처리하십시오.

    oc describe pod ibm-cloud-provider-ip-169-61-XX-XX-55967b5b8c-7zv9t -n ibm-system
    
  4. 문제를 해결한 후 로드 밸런서 서비스 엔드포인트를 확인하여 트래픽이 앱에 도달하는지 확인합니다.

    oc get svc -o wide