26.5. ovnkube-trace를 사용하여 Openflow 추적
OVN 및 OVS 트래픽 흐름은 ovnkube-trace
라는 단일 유틸리티에서 시뮬레이션할 수 있습니다. ovnkube-trace
유틸리티는 ovn-trace
,ovs-appctl ofproto/trace
및 ovn-detrace
를 실행하고 단일 출력에서 해당 정보와 관련이 있습니다.
전용 컨테이너에서 ovnkube-trace
바이너리를 실행할 수 있습니다. OpenShift Container Platform 4.7 이후 릴리스의 경우 바이너리를 로컬 호스트에 복사하고 해당 호스트에서 실행할 수도 있습니다.
26.5.1. 로컬 호스트에 ovnkube-trace 설치 링크 복사링크가 클립보드에 복사되었습니다!
ovnkube-trace
툴은 OVN-Kubernetes 기반 OpenShift Container Platform 클러스터의 지점 간 임의의 UDP 또는 TCP 트래픽에 대한 패킷 시뮬레이션을 추적합니다. ovnkube-trace
바이너리를 로컬 호스트에 복사하여 클러스터에 대해 실행할 수 있도록 합니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. -
cluster-admin
권한이 있는 사용자로 클러스터에 로그인합니다.
프로세스
다음 명령을 사용하여 Pod 변수를 생성합니다.
POD=$(oc get pods -n openshift-ovn-kubernetes -l app=ovnkube-control-plane -o name | head -1 | awk -F '/' '{print $NF}')
$ POD=$(oc get pods -n openshift-ovn-kubernetes -l app=ovnkube-control-plane -o name | head -1 | awk -F '/' '{print $NF}')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 로컬 호스트에서 다음 명령을 실행하여
ovnkube-control-plane
Pod에서 바이너리를 복사합니다.oc cp -n openshift-ovn-kubernetes $POD:/usr/bin/ovnkube-trace -c ovnkube-cluster-manager ovnkube-trace
$ oc cp -n openshift-ovn-kubernetes $POD:/usr/bin/ovnkube-trace -c ovnkube-cluster-manager ovnkube-trace
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고RHEL(Red Hat Enterprise Linux) 8을 사용하여
ovnkube-trace
툴을 실행하는 경우/usr/lib/rhel8/ovnkube-trace
파일을 로컬 호스트에 복사해야 합니다.다음 명령을 실행하여
ovnkube-trace
를 실행 가능하게 만듭니다.chmod +x ovnkube-trace
$ chmod +x ovnkube-trace
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
ovnkube-trace
에서 사용할 수 있는 옵션을 표시합니다../ovnkube-trace -help
$ ./ovnkube-trace -help
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예상 출력
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 지원되는 명령줄 인수는 네임스페이스, 포드, 서비스와 같이 친숙한 Kubernetes 구성이므로 MAC 주소, 대상 노드의 IP 주소 또는 ICMP 유형을 찾을 필요가 없습니다.
로그 수준은 다음과 같습니다.
- 0 (최소 출력)
- 2 (추적 명령의 결과를 보여주는 더 자세한 출력)
- 5 (디버그 출력)
26.5.2. ovnkube-trace 실행 링크 복사링크가 클립보드에 복사되었습니다!
ovn-trace
를 실행하여 OVN 논리 네트워크 내에서 패킷 전달을 시뮬레이션합니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다. -
cluster-admin
권한이 있는 사용자로 클러스터에 로그인합니다. -
로컬 호스트에
ovnkube-trace
를 설치했습니다.
예: 배포된 Pod에서 DNS 확인이 작동하는지 테스트
이 예에서는 배포된 Pod에서 클러스터에서 실행되는 코어 DNS Pod로 DNS 확인을 테스트하는 방법을 보여줍니다.
프로세스
다음 명령을 입력하여 기본 네임스페이스에서 웹 서비스를 시작합니다.
oc run web --namespace=default --image=quay.io/openshifttest/nginx --labels="app=web" --expose --port=80
$ oc run web --namespace=default --image=quay.io/openshifttest/nginx --labels="app=web" --expose --port=80
Copy to Clipboard Copied! Toggle word wrap Toggle overflow openshift-dns
네임스페이스에서 실행 중인 Pod를 나열합니다.oc get pods -n openshift-dns
oc get pods -n openshift-dns
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음
ovnkube-trace
명령을 실행하여 DNS 확인이 작동하는지 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow src&dst
포드가 동일한 노드에 배치되는 경우 출력의 예:Copy to Clipboard Copied! Toggle word wrap Toggle overflow src&dst
포드가 다른 노드에 배치되는 경우 출력의 예:Copy to Clipboard Copied! Toggle word wrap Toggle overflow ouput은 배포된 Pod에서 DNS 포트로의 성공 여부를 나타내며 다른 방향으로 돌아가고 있음을 나타냅니다. 따라서 웹 pod가 코어 DNS에서 DNS 확인을 수행하는 경우 UDP 포트 53에서 양방향 트래픽이 지원됩니다.
예를 들어 작동하지 않고 ovn-trace
, proto/trace
및 ovn-detrace
의 ovs-appctl
을 가져오고 더 많은 디버그 유형 정보는 로그 수준을 2로 늘리고 다음과 같이 명령을 다시 실행합니다.
이 증가된 로그 수준의 출력은 여기에 나열하기에는 너무 많습니다. 오류가 발생하면 이 명령의 출력에서 해당 트래픽을 삭제하는 흐름이 표시됩니다. 예를 들어 송신 또는 수신 네트워크 정책은 해당 트래픽을 허용하지 않는 클러스터에 구성할 수 있습니다.
예: 디버그 출력을 사용하여 구성된 기본 거부 확인
이 예에서는 Ingress 기본 거부 정책이 트래픽을 차단하는 디버그 출력을 사용하여 식별하는 방법을 보여줍니다.
프로세스
모든 네임스페이스의 모든 포드의 수신을
거부하도록 기본
거부 정책을 정의하는 다음 YAML을 생성합니다. YAML을deny-by-default.yaml
파일에 저장합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 입력하여 정책을 적용합니다.
oc apply -f deny-by-default.yaml
$ oc apply -f deny-by-default.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
networkpolicy.networking.k8s.io/deny-by-default created
networkpolicy.networking.k8s.io/deny-by-default created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 입력하여
기본
네임스페이스에서 웹 서비스를 시작합니다.oc run web --namespace=default --image=quay.io/openshifttest/nginx --labels="app=web" --expose --port=80
$ oc run web --namespace=default --image=quay.io/openshifttest/nginx --labels="app=web" --expose --port=80
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
prod
네임스페이스를 생성합니다.oc create namespace prod
$ oc create namespace prod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
prod
네임스페이스에 레이블을 지정합니다.oc label namespace/prod purpose=production
$ oc label namespace/prod purpose=production
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여
prod
네임스페이스에alpine
이미지를 배포하고 쉘을 시작합니다.oc run test-6459 --namespace=prod --rm -i -t --image=alpine -- sh
$ oc run test-6459 --namespace=prod --rm -i -t --image=alpine -- sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 다른 터미널 세션을 엽니다.
이 새 터미널 세션에서
ovn-trace
를 실행하여 네임스페이스prod
에서 실행되는 소스 Podtest-6459
와default
네임스페이스에서 실행되는 대상 Pod 간의 통신 실패를 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
ovn-trace source pod to destination pod indicates failure from test-6459 to web
ovn-trace source pod to destination pod indicates failure from test-6459 to web
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 실행하여 실패 이유를 노출하려면 로그 수준을 2로 늘립니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 기본 거부 정책이 적용되어 수신 트래픽이 차단됩니다.
purpose=production
레이블이 있는 특정 네임스페이스의 모든 Pod의 트래픽을 허용하는 정책을 생성합니다. YAML을web-allow-prod.yaml
파일에 저장합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 다음 명령을 입력하여 정책을 적용합니다.
oc apply -f web-allow-prod.yaml
$ oc apply -f web-allow-prod.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ovnkube-trace
를 실행하여 다음 명령을 입력하여 트래픽이 지금 허용되는지 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예상 출력
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 6단계에서 열린 쉘에서 다음 명령을 실행하여 nginx를 web-server에 연결합니다.
wget -qO- --timeout=2 http://web.default
wget -qO- --timeout=2 http://web.default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예상 출력
Copy to Clipboard Copied! Toggle word wrap Toggle overflow