4.2. ovnkube-trace 실행


ovn-trace를 실행하여 OVN 논리 네트워크 내에서 패킷 전달을 시뮬레이션합니다.

사전 요구 사항

  • OpenShift CLI(oc)를 설치합니다.
  • cluster-admin 권한이 있는 사용자로 클러스터에 로그인합니다.
  • 로컬 호스트에 ovnkube-trace를 설치했습니다.

예: 배포된 Pod에서 DNS 확인이 작동하는지 테스트

이 예제에서는 클러스터에서 실행되는 핵심 DNS 포드에 대한 배포된 포드의 DNS 확인을 테스트하는 방법을 보여줍니다.

프로세스

  1. 다음 명령을 입력하여 기본 네임스페이스에서 웹 서비스를 시작합니다.

    $ oc run web --namespace=default --image=quay.io/openshifttest/nginx --labels="app=web" --expose --port=80
    Copy to Clipboard Toggle word wrap
  2. openshift-dns 네임스페이스에서 실행 중인 포드를 나열하세요.

    oc get pods -n openshift-dns
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                  READY   STATUS    RESTARTS   AGE
    dns-default-8s42x     2/2     Running   0          5h8m
    dns-default-mdw6r     2/2     Running   0          4h58m
    dns-default-p8t5h     2/2     Running   0          4h58m
    dns-default-rl6nk     2/2     Running   0          5h8m
    dns-default-xbgqx     2/2     Running   0          5h8m
    dns-default-zv8f6     2/2     Running   0          4h58m
    node-resolver-62jjb   1/1     Running   0          5h8m
    node-resolver-8z4cj   1/1     Running   0          4h59m
    node-resolver-bq244   1/1     Running   0          5h8m
    node-resolver-hc58n   1/1     Running   0          4h59m
    node-resolver-lm6z4   1/1     Running   0          5h8m
    node-resolver-zfx5k   1/1     Running   0          5h
    Copy to Clipboard Toggle word wrap

  3. 다음 ovnkube-trace 명령을 실행하여 DNS 확인이 작동하는지 확인하세요.

    $ ./ovnkube-trace \
      -src-namespace default \ 
    1
    
      -src web \ 
    2
    
      -dst-namespace openshift-dns \ 
    3
    
      -dst dns-default-p8t5h \ 
    4
    
      -udp -dst-port 53 \ 
    5
    
      -loglevel 0 
    6
    Copy to Clipboard Toggle word wrap
    1
    소스 포드의 네임스페이스
    2
    소스 포드 이름
    3
    목적지 포드의 네임스페이스
    4
    목적지 포드 이름
    5
    UDP 전송 프로토콜을 사용합니다. 포트 53은 DNS 서비스가 사용하는 포트입니다.
    6
    로그 수준을 0으로 설정합니다(0은 최소이고 5는 디버그입니다)

    src&dst pod가 같은 노드에 도착하는 경우의 출력 예

    ovn-trace source pod to destination pod indicates success from web to dns-default-p8t5h
    ovn-trace destination pod to source pod indicates success from dns-default-p8t5h to web
    ovs-appctl ofproto/trace source pod to destination pod indicates success from web to dns-default-p8t5h
    ovs-appctl ofproto/trace destination pod to source pod indicates success from dns-default-p8t5h to web
    ovn-detrace source pod to destination pod indicates success from web to dns-default-p8t5h
    ovn-detrace destination pod to source pod indicates success from dns-default-p8t5h to web
    Copy to Clipboard Toggle word wrap

    src&dst pod가 다른 노드에 도착하는 경우의 출력 예

    ovn-trace source pod to destination pod indicates success from web to dns-default-8s42x
    ovn-trace (remote) source pod to destination pod indicates success from web to dns-default-8s42x
    ovn-trace destination pod to source pod indicates success from dns-default-8s42x to web
    ovn-trace (remote) destination pod to source pod indicates success from dns-default-8s42x to web
    ovs-appctl ofproto/trace source pod to destination pod indicates success from web to dns-default-8s42x
    ovs-appctl ofproto/trace destination pod to source pod indicates success from dns-default-8s42x to web
    ovn-detrace source pod to destination pod indicates success from web to dns-default-8s42x
    ovn-detrace destination pod to source pod indicates success from dns-default-8s42x to web
    Copy to Clipboard Toggle word wrap

    출력은 배포된 포드에서 DNS 포트로의 성공과 반대 방향으로의 회신도 성공함을 나타냅니다. 따라서 웹 포드가 핵심 DNS에서 DNS 확인을 수행하려는 경우 UDP 포트 53에서 양방향 트래픽이 지원된다는 것을 알 수 있습니다.

예를 들어 이 방법이 효과가 없고 ovn-trace , proto/traceovs-appctl , ovn-detrace , 그리고 더 많은 디버그 유형 정보를 얻고 싶다면 로그 수준을 2로 높이고 다음과 같이 명령을 다시 실행하세요.

$ ./ovnkube-trace \
  -src-namespace default \
  -src web \
  -dst-namespace openshift-dns \
  -dst dns-default-467qw \
  -udp -dst-port 53 \
  -loglevel 2
Copy to Clipboard Toggle word wrap

이렇게 증가된 로그 수준에서 발생하는 출력은 여기에 모두 나열하기에는 너무 많습니다. 장애 상황에서 이 명령의 출력은 어떤 흐름이 해당 트래픽을 삭제하는지 보여줍니다. 예를 들어, 해당 트래픽을 허용하지 않는 유입 또는 유출 네트워크 정책이 클러스터에 구성될 수 있습니다.

예: 디버그 출력을 사용하여 구성된 기본 거부 확인

이 예제에서는 디버그 출력을 사용하여 수신 기본 거부 정책이 트래픽을 차단한다는 것을 식별하는 방법을 보여줍니다.

프로세스

  1. 모든 네임스페이스의 모든 포드에서 들어오는 트래픽을 거부하는 기본 거부 정책을 정의하는 다음 YAML을 만듭니다. deny-by-default.yaml 파일에 YAML을 저장합니다.

    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      name: deny-by-default
      namespace: default
    spec:
      podSelector: {}
      ingress: []
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 입력하여 정책을 적용합니다.

    $ oc apply -f deny-by-default.yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    networkpolicy.networking.k8s.io/deny-by-default created
    Copy to Clipboard Toggle word wrap

  3. 다음 명령을 입력하여 기본 네임스페이스에서 웹 서비스를 시작합니다.

    $ oc run web --namespace=default --image=quay.io/openshifttest/nginx --labels="app=web" --expose --port=80
    Copy to Clipboard Toggle word wrap
  4. 다음 명령을 실행하여 prod 네임스페이스를 만듭니다.

    $ oc create namespace prod
    Copy to Clipboard Toggle word wrap
  5. 다음 명령을 실행하여 prod 네임스페이스에 레이블을 지정합니다.

    $ oc label namespace/prod purpose=production
    Copy to Clipboard Toggle word wrap
  6. 다음 명령을 실행하여 prod 네임스페이스에 alpine 이미지를 배포하고 셸을 시작합니다.

    $ oc run test-6459 --namespace=prod --rm -i -t --image=alpine -- sh
    Copy to Clipboard Toggle word wrap
  7. 다른 터미널 세션을 엽니다.
  8. 이 새로운 터미널 세션에서 ovn-trace를 실행하여 네임스페이스 prod 에서 실행되는 소스 포드 test-6459기본 네임스페이스에서 실행되는 대상 포드 간 통신에 오류가 있는지 확인합니다.

    $ ./ovnkube-trace \
     -src-namespace prod \
     -src test-6459 \
     -dst-namespace default \
     -dst web \
     -tcp -dst-port 80 \
     -loglevel 0
    Copy to Clipboard Toggle word wrap

    출력 예

    ovn-trace source pod to destination pod indicates failure from test-6459 to web
    Copy to Clipboard Toggle word wrap

  9. 다음 명령을 실행하여 실패 이유를 파악하려면 로그 수준을 2로 높이세요.

    $ ./ovnkube-trace \
     -src-namespace prod \
     -src test-6459 \
     -dst-namespace default \
     -dst web \
     -tcp -dst-port 80 \
     -loglevel 2
    Copy to Clipboard Toggle word wrap

    출력 예

    ...
    ------------------------------------------------
     3. ls_out_acl_hint (northd.c:7454): !ct.new && ct.est && !ct.rpl && ct_mark.blocked == 0, priority 4, uuid 12efc456
        reg0[8] = 1;
        reg0[10] = 1;
        next;
     5. ls_out_acl_action (northd.c:7835): reg8[30..31] == 0, priority 500, uuid 69372c5d
        reg8[30..31] = 1;
        next(4);
     5. ls_out_acl_action (northd.c:7835): reg8[30..31] == 1, priority 500, uuid 2fa0af89
        reg8[30..31] = 2;
        next(4);
     4. ls_out_acl_eval (northd.c:7691): reg8[30..31] == 2 && reg0[10] == 1 && (outport == @a16982411286042166782_ingressDefaultDeny), priority 2000, uuid 447d0dab
        reg8[17] = 1;
        ct_commit { ct_mark.blocked = 1; }; 
    1
    
        next;
    ...
    Copy to Clipboard Toggle word wrap

    1
    기본 거부 정책이 적용되어 유입 트래픽이 차단됩니다.
  10. 특정 네임스페이스에 있는 모든 포드의 트래픽을 허용하는 정책을 purpose=production 레이블로 만듭니다. web-allow-prod.yaml 파일에 YAML을 저장합니다.

    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      name: web-allow-prod
      namespace: default
    spec:
      podSelector:
        matchLabels:
          app: web
      policyTypes:
      - Ingress
      ingress:
      - from:
        - namespaceSelector:
            matchLabels:
              purpose: production
    Copy to Clipboard Toggle word wrap
  11. 다음 명령을 입력하여 정책을 적용합니다.

    $ oc apply -f web-allow-prod.yaml
    Copy to Clipboard Toggle word wrap
  12. 다음 명령을 입력하여 ovnkube-trace를 실행하여 트래픽이 이제 허용되는지 확인하세요.

    $ ./ovnkube-trace \
     -src-namespace prod \
     -src test-6459 \
     -dst-namespace default \
     -dst web \
     -tcp -dst-port 80 \
     -loglevel 0
    Copy to Clipboard Toggle word wrap

    예상 출력

    ovn-trace source pod to destination pod indicates success from test-6459 to web
    ovn-trace destination pod to source pod indicates success from web to test-6459
    ovs-appctl ofproto/trace source pod to destination pod indicates success from test-6459 to web
    ovs-appctl ofproto/trace destination pod to source pod indicates success from web to test-6459
    ovn-detrace source pod to destination pod indicates success from test-6459 to web
    ovn-detrace destination pod to source pod indicates success from web to test-6459
    Copy to Clipboard Toggle word wrap

  13. 6단계에서 열린 셸에서 다음 명령을 실행하여 nginx를 웹 서버에 연결합니다.

     wget -qO- --timeout=2 http://web.default
    Copy to Clipboard Toggle word wrap

    예상 출력

    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
      body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
      }
    </style>
    </head>
    <body>
    <h1>Welcome to nginx!</h1>
    <p>If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.</p>
    
    <p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>
    
    <p><em>Thank you for using nginx.</em></p>
    </body>
    </html>
    Copy to Clipboard Toggle word wrap

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat