Ssoon
[8주차] Cilium CNI : 노드 간 파드 통신 확인 본문
CloudNet@ 가시다님이 진행하는 쿠버네티스 네트워크 스터디 3기
✅ TC(Traffic Control)
Linux 커널의 네트워크 트래픽을 조절하고 관리하기 위한 도구입니다. TC를 사용하면 네트워크의 대역폭을 제한하거나, 트래픽의 우선순위를 정하거나, 패킷을 필터링할 수 있습니다. 주로 다음과 같은 기능을 제공합니다:
- 대역폭 관리: 네트워크 대역폭을 조절하여 특정 애플리케이션이나 서비스가 사용하는 대역폭을 제한하거나 보장합니다.
- 우선순위 설정: 특정 유형의 트래픽에 더 높은 우선순위를 부여하여, 중요 데이터가 지연 없이 전송될 수 있도록 합니다.
- 패킷 필터링: 트래픽을 필터링하여 특정 패킷을 차단하거나 허용합니다.
🧿Cilium에서 TC의 역할
Cilium은 eBPF를 활용하여 Kubernetes 환경에서 네트워크 정책을 적용하는데, TC는 이러한 정책을 커널 레벨에서 구현하는 데 사용됩니다. Cilium에서 TC의 주요 기능은 다음과 같습니다:
- 네트워크 정책 구현: Cilium은 Kubernetes의 Custom Resource Definition (CRD)을 사용하여 네트워크 정책을 정의하고, 이러한 정책을 TC를 통해 실제로 적용합니다. 이로 인해 Kubernetes의 파드 간 통신을 제어할 수 있습니다.
- 고성능 패킷 처리: Cilium은 eBPF를 통해 TC를 사용하여 패킷을 커널 레벨에서 직접 처리합니다. 이는 사용자 공간과 커널 공간 간의 오버헤드를 줄이고, 성능을 극대화합니다.
- 지능형 트래픽 관리: TC를 활용하여 애플리케이션의 요구에 맞는 다양한 트래픽 관리 기능을 제공합니다. 예를 들어, 특정 서비스에 대해 대역폭을 제한하거나, QoS(서비스 품질) 정책을 적용할 수 있습니다.
🧿Cilium TC의 작동 방식
Cilium에서 TC가 작동하는 과정은 다음과 같습니다:
- 정책 정의: 사용자가 Kubernetes에서 Cilium 네트워크 정책을 정의합니다. 예를 들어, 특정 파드 간의 통신을 허용하거나 차단할 수 있습니다.
- TC 설정: Cilium은 이 정책을 기반으로 TC를 설정하여 패킷 필터링, 우선순위 지정 및 대역폭 관리를 수행합니다.
- eBPF와의 통합: Cilium은 eBPF를 사용하여 TC와 함께 패킷 처리를 최적화합니다. eBPF 프로그램은 TC의 액션을 수행하며, 패킷이 커널 네트워크 스택으로 넘어가기 전에 필터링할 수 있습니다.
- 실시간 트래픽 모니터링: Cilium은 TC를 통해 실시간으로 트래픽을 모니터링하고, 필요한 경우 정책을 동적으로 조정할 수 있습니다.
✅ XDP (Express Data Path)
XDP는 Linux 커널에서 제공하는 기능으로, 고성능 패킷 처리를 가능하게 합니
다. XDP의 주요 특징은 다음과 같습니다:
- 고성능 패킷 처리: XDP는 패킷을 커널의 네트워크 스택으로 전달하기 전에 사용자 정의 프로그램을 통해 패킷을 처리할 수 있게 합니다. 이를 통해 패킷 처리 속도를 크게 향상시킬 수 있습니다.
- eBPF와의 통합: XDP는 eBPF를 활용하여 고속 패킷 처리와 관련된 사용자 정의 로직을 작성할 수 있습니다. 이를 통해 복잡한 패킷 필터링이나 로깅, 트래픽 샘플링 등의 작업을 수행할 수 있습니다.
- 다양한 사용 사례: XDP는 DDoS 방어, 패킷 필터링, 로드 밸런싱 등 다양한 네트워크 관련 작업에 사용할 수 있습니다.
🧿 Cilium과 XDP의 관계
Cilium은 XDP를 활용하여 패킷 처리 성능을 최적화합니다. Cilium의 eBPF 프로그램은 XDP와 함께 작동하여 다음과 같은 방식으로 작용합니다:
- XDP를 통한 초기 패킷 처리: 패킷이 네트워크 인터페이스 카드(NIC)로부터 수신되면, XDP 프로그램이 먼저 실행되어 패킷을 필터링하거나 조작합니다. 이렇게 함으로써 불필요한 패킷이 커널 네트워크 스택으로 넘어가는 것을 방지하고, 성능을 향상시킵니다.
- 정교한 정책 적용: XDP에서 패킷이 처리된 후, Cilium의 eBPF 프로그램이 실행되어 L3/L7 정책을 적용합니다.
✅ BPF program
- L3/L4/L7 정책 적용:
- L3/L4 (Network and Transport Layer): Cilium은 IP 주소 및 포트를 기준으로 네트워크 트래픽을 필터링하는 정책을 BPF 프로그램으로 구현합니다.
- L7 (Application Layer): HTTP, gRPC와 같은 애플리케이션 프로토콜에 기반하여 더 세밀한 정책을 적용합니다.
- 네트워크 성능 향상: Cilium의 BPF 프로그램은 패킷을 커널에서 직접 처리하여 사용자 공간으로의 전환을 최소화합니다. 이를 통해 패킷 처리 속도가 향상되고, 성능이 극대화됩니다.
- 서비스 메쉬 기능: Cilium은 BPF를 사용하여 서비스 간의 통신을 추적하고, 모니터링할 수 있는 기능을 제공합니다. 이를 통해 마이크로서비스 아키텍처에서의 데이터 흐름을 이해하고 관리할 수 있습니다.
🧿 BPF 프로그램의 작동 방식
Cilium에서 BPF 프로그램이 작동하는 과정은 다음과 같습니다:
- 정책 정의: 사용자는 Kubernetes API를 통해 Cilium 네트워크 정책을 정의합니다. 예를 들어, 특정 파드 간의 트래픽을 허용하거나 차단할 수 있습니다.
- BPF 프로그램 생성: Cilium은 이 정책을 기반으로 BPF 프로그램을 생성하고, 이를 커널에 로드합니다.
- 패킷 처리: 패킷이 네트워크 인터페이스를 통해 들어오면, Cilium의 BPF 프로그램이 실행되어 정의된 정책에 따라 패킷을 처리합니다. 이 과정에서 패킷을 필터링하고, 로깅하며, 필요한 경우 수정할 수 있습니다.
✅ JIT (Just-In-Time Compilation)
- JIT는 프로그램이 실행되는 시점에 바이트코드를 머신 코드로 변환하는 기술입니다. 이를 통해 CPU가 직접 실행할 수 있도록 최적화된 코드를 생성합니다.
- JIT 컴파일을 통해 실행 시간 동안 필요할 때 즉시 코드를 컴파일하므로, 전통적인 컴파일 과정에 비해 성능이 크게 향상됩니다.
🧿 BPF JIT의 작동 방식
BPF JIT의 작동 방식은 다음과 같습니다:
- BPF 프로그램 로드: 사용자가 정의한 BPF 프로그램이 커널에 로드됩니다. 이 프로그램은 네트워크 패킷을 처리하기 위한 로직을 포함하고 있습니다.
- JIT 컴파일:
- BPF 프로그램이 커널에 로드될 때, JIT 컴파일러가 이를 감지합니다.
- JIT 컴파일러는 BPF 바이트코드를 분석하고, 이를 CPU에서 직접 실행할 수 있는 최적화된 머신 코드로 변환합니다.
- 머신 코드 실행: JIT 컴파일된 머신 코드는 CPU에서 직접 실행됩니다. 이 과정에서 BPF 프로그램의 성능이 크게 향상되며, 패킷 처리가 더 빠르게 이루어집니다.
✅ BPF map
Linux 커널의 BPF 시스템에서 사용되는 데이터 구조로, 데이터를 저장하고 효율적으로 액세스하는 데 사용됩니다. BPF는 주로 네트워크 패킷 필터링, 모니터링, 트레이싱 등의 용도로 활용되며, BPF 맵은 이러한 데이터 처리에서 중요한 역할을 합니다.
🧿 파드 생성 및 확인
netpod | app: netpod | k8s-s | nicolaka/netshoot | tail -f /dev/null | terminationGracePeriodSeconds: 0 |
webpod1 | app: webpod | k8s-w1 | traefik/whoami | - | terminationGracePeriodSeconds: 0 |
webpod2 | app: webpod | k8s-w2 | traefik/whoami | - | terminationGracePeriodSeconds: 0 |
- netpod는 무한 대기 상태로 유지되며, webpod1과 webpod2는 각각 다른 노드에서 traefik/whoami 이미지를 실행합니다.
(⎈|CiliumLab:N/A) root@k8s-s:~# cat <<EOF | kubectl create -f -
apiVersion: v1
kind: Pod
metadata:
name: netpod
labels:
app: netpod
spec:
nodeName: k8s-s
containers:
- name: netshoot-pod
image: nicolaka/netshoot
command: ["tail"]
args: ["-f", "/dev/null"]
terminationGracePeriodSeconds: 0
---
apiVersion: v1
kind: Pod
metadata:
name: webpod1
labels:
app: webpod
spec:
nodeName: k8s-w1
containers:
- name: container
image: traefik/whoami
terminationGracePeriodSeconds: 0
---
apiVersion: v1
kind: Pod
metadata:
name: webpod2
labels:
app: webpod
spec:
nodeName: k8s-w2
containers:
- name: container
image: traefik/whoami
terminationGracePeriodSeconds: 0
EOF
pod/netpod created
pod/webpod1 created
pod/webpod2 created
🧿 Cilium 네트워크의 상태 정보
- Allocated addresses: Cilium에서 현재 할당된 IP 주소 목록입니다. 각 주소는 특정 기능이나 Pod와 연결되어 있습니다.
172.16.0.12 | 라우터 주소: 클러스터의 네트워크 라우터 역할을 하는 주소입니다. 다른 네트워크와의 연결을 관리합니다. |
172.16.0.230 | Pod 주소: netpod라는 이름의 Pod에 할당된 IP 주소입니다. 이 주소를 통해 다른 Pod나 서비스와 통신할 수 있습니다. |
172.16.0.236 | 헬스 체크 주소: Cilium의 건강 상태를 확인하는 데 사용되는 주소입니다. Cilium이 제대로 작동하는지 모니터링합니다. |
(⎈|CiliumLab:N/A) root@k8s-s:~# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
netpod 1/1 Running 0 19s 172.16.0.230 k8s-s <none> <none>
webpod1 1/1 Running 0 19s 172.16.1.111 k8s-w1 <none> <none>
webpod2 1/1 Running 0 19s 172.16.2.180 k8s-w2 <none> <none>
(⎈|CiliumLab:N/A) root@k8s-s:~# c0 status --verbose | grep Allocated -A5
Allocated addresses:
172.16.0.12 (router)
172.16.0.230 (default/netpod)
172.16.0.236 (health)
IPv4 BIG TCP: Disabled
IPv6 BIG TCP: Disabled
172.16.1.111 | Pod 주소: webpod1이라는 이름의 Pod에 할당된 IP 주소입니다. 이 주소를 통해 webpod1가 다른 Pod나 서비스와 통신할 수 있습니다. |
172.16.1.159 | 헬스 체크 주소: Cilium의 상태를 확인하는 데 사용되는 주소입니다. Cilium이 정상적으로 작동하는지 모니터링합니다. |
172.16.1.198 | 라우터 주소: 클러스터 내의 네트워크 라우터 역할을 하는 주소입니다. 네트워크 간의 연결을 관리합니다. |
172.16.1.210 | Pod 주소: kube-system 네임스페이스의 coredns-55cb58b774-2xvk2라는 이름의 Pod에 할당된 IP 주소입니다. DNS 서비스를 제공합니다. |
172.16.1.221 | Pod 주소: kube-system 네임스페이스의 coredns-55cb58b774-7v788라는 이름의 Pod에 할당된 IP 주소입니다. DNS 서비스를 제공합니다. |
(⎈|CiliumLab:N/A) root@k8s-s:~# c1 status --verbose | grep Allocated -A5
Allocated addresses:
172.16.1.111 (default/webpod1)
172.16.1.159 (health)
172.16.1.198 (router)
172.16.1.210 (kube-system/coredns-55cb58b774-2xvk2 [restored])
172.16.1.221 (kube-system/coredns-55cb58b774-7v788 [restored])
172.16.2.116 | 라우터 주소: 클러스터 내의 네트워크 라우터 역할을 하는 주소입니다. 네트워크 간의 연결을 관리합니다. |
172.16.2.180 | Pod 주소: webpod2라는 이름의 Pod에 할당된 IP 주소입니다. 이 주소를 통해 webpod2가 다른 Pod나 서비스와 통신할 수 있습니다. |
172.16.2.73 | 헬스 체크 주소: Cilium의 상태를 확인하는 데 사용되는 주소입니다. Cilium이 정상적으로 작동하는지 모니터링합니다. |
(⎈|CiliumLab:N/A) root@k8s-s:~# c2 status --verbose | grep Allocated -A5
Allocated addresses:
172.16.2.116 (router)
172.16.2.180 (default/webpod2)
172.16.2.73 (health)
IPv4 BIG TCP: Disabled
IPv6 BIG TCP: Disabled
🧿 Cilium Endpoint 정보
- 보안 ID (SECURITY IDENTITY): 각 Pod에 할당된 고유한 보안 ID로, Cilium의 보안 정책 적용에 사용됩니다.
- 상태 (ENDPOINT STATE): 각 Endpoint의 상태로, ready는 정상적으로 작동하고 있음을 나타냅니다.
(⎈|CiliumLab:N/A) root@k8s-s:~# kubectl get ciliumendpoints
NAME SECURITY IDENTITY ENDPOINT STATE IPV4 IPV6
netpod 39126 ready 172.16.0.230
webpod1 25054 ready 172.16.1.111
webpod2 25054 ready 172.16.2.180
(⎈|CiliumLab:N/A) root@k8s-s:~# kubectl get ciliumendpoints -A
NAMESPACE NAME SECURITY IDENTITY ENDPOINT STATE IPV4 IPV6
default netpod 39126 ready 172.16.0.230
default webpod1 25054 ready 172.16.1.111
default webpod2 25054 ready 172.16.2.180
kube-system coredns-55cb58b774-2xvk2 39166 ready 172.16.1.210
kube-system coredns-55cb58b774-7v788 39166 ready 172.16.1.221
kube-system hubble-relay-88f7f89d4-jgwk2 44886 ready 172.16.1.78
kube-system hubble-ui-59bb4cb67b-vr67b 42840 ready 172.16.1.79
🧿 각 엔드포인트의 정보
- 엔드포인트 416: netpod 앱에 속하는 정상 작동 중인 Pod입니다.
- 엔드포인트 905: 헬스 체크를 위한 예약된 엔드포인트입니다.
- 엔드포인트 1541: Kubernetes의 컨트롤 플레인 역할을 하는 노드에 관련된 엔드포인트입니다.
ENDPOINT | 정책 (ingress) | 정책 (egress) | IDENTITY | 레이블 | IPv4 | 상태 |
416 | Disabled | Disabled | 39126 | k8s=netpod | 172.16.0.230 | ready |
905 | Disabled | Disabled | 4 | reserved
|
172.16.0.236 | ready |
1541 | Disabled | Disabled | 1 | k8s .kubernetes.io/control-plane k8s reserved |
- | ready |
(⎈|CiliumLab:N/A) root@k8s-s:~# c0 endpoint list
ENDPOINT POLICY (ingress) POLICY (egress) IDENTITY LABELS (source:key[=value]) IPv6 IPv4 STATUS
ENFORCEMENT ENFORCEMENT
416 Disabled Disabled 39126 k8s:app=netpod 172.16.0.230 ready
k8s:io.cilium.k8s.namespace.labels.kubernetes.io/metadata.name=default
k8s:io.cilium.k8s.policy.cluster=default
k8s:io.cilium.k8s.policy.serviceaccount=default
k8s:io.kubernetes.pod.namespace=default
905 Disabled Disabled 4 reserved:health 172.16.0.236 ready
1541 Disabled Disabled 1 k8s:node-role.kubernetes.io/control-plane ready
k8s:node.kubernetes.io/exclude-from-external-load-balancers
reserved:host
(⎈|CiliumLab:N/A) root@k8s-s:~# c0 bpf endpoint list
IP ADDRESS LOCAL ENDPOINT INFO
192.168.10.10:0 (localhost)
172.16.0.12:0 (localhost)
172.16.0.230:0 id=416 sec_id=39126 flags=0x0000 ifindex=10 mac=92:EF:86:7B:D1:D4 nodemac=5E:B5:9A:19:FB:B3
172.16.0.236:0 id=905 sec_id=4 flags=0x0000 ifindex=8 mac=22:1F:BD:B2:24:65 nodemac=BE:40:78:DD:72:24
(⎈|CiliumLab:N/A) root@k8s-s:~# c0 map get cilium_lxc
Key Value State Error
172.16.0.236:0 id=905 sec_id=4 flags=0x0000 ifindex=8 mac=22:1F:BD:B2:24:65 nodemac=BE:40:78:DD:72:24 sync
172.16.0.230:0 id=416 sec_id=39126 flags=0x0000 ifindex=10 mac=92:EF:86:7B:D1:D4 nodemac=5E:B5:9A:19:FB:B3 sync
(⎈|CiliumLab:N/A) root@k8s-s:~# c0 ip list
IP IDENTITY SOURCE
0.0.0.0/0 reserved:world
172.16.0.12/32 reserved:host
reserved:kube-apiserver
172.16.0.230/32 k8s:app=netpod custom-resource
k8s:io.cilium.k8s.namespace.labels.kubernetes.io/metadata.name=default
k8s:io.cilium.k8s.policy.cluster=default
k8s:io.cilium.k8s.policy.serviceaccount=default
k8s:io.kubernetes.pod.namespace=default
172.16.0.236/32 reserved:health
172.16.1.78/32 k8s:app.kubernetes.io/name=hubble-relay custom-resource
k8s:app.kubernetes.io/part-of=cilium
k8s:io.cilium.k8s.namespace.labels.kubernetes.io/metadata.name=kube-system
k8s:io.cilium.k8s.policy.cluster=default
k8s:io.cilium.k8s.policy.serviceaccount=hubble-relay
k8s:io.kubernetes.pod.namespace=kube-system
k8s:k8s-app=hubble-relay
172.16.1.79/32 k8s:app.kubernetes.io/name=hubble-ui custom-resource
k8s:app.kubernetes.io/part-of=cilium
k8s:io.cilium.k8s.namespace.labels.kubernetes.io/metadata.name=kube-system
k8s:io.cilium.k8s.policy.cluster=default
k8s:io.cilium.k8s.policy.serviceaccount=hubble-ui
k8s:io.kubernetes.pod.namespace=kube-system
k8s:k8s-app=hubble-ui
172.16.1.111/32 k8s:app=webpod custom-resource
k8s:io.cilium.k8s.namespace.labels.kubernetes.io/metadata.name=default
k8s:io.cilium.k8s.policy.cluster=default
k8s:io.cilium.k8s.policy.serviceaccount=default
k8s:io.kubernetes.pod.namespace=default
172.16.1.159/32 reserved:health
172.16.1.198/32 reserved:remote-node
172.16.1.210/32 k8s:io.cilium.k8s.namespace.labels.kubernetes.io/metadata.name=kube-system custom-resource
k8s:io.cilium.k8s.policy.cluster=default
k8s:io.cilium.k8s.policy.serviceaccount=coredns
k8s:io.kubernetes.pod.namespace=kube-system
k8s:k8s-app=kube-dns
172.16.1.221/32 k8s:io.cilium.k8s.namespace.labels.kubernetes.io/metadata.name=kube-system custom-resource
k8s:io.cilium.k8s.policy.cluster=default
k8s:io.cilium.k8s.policy.serviceaccount=coredns
k8s:io.kubernetes.pod.namespace=kube-system
k8s:k8s-app=kube-dns
172.16.2.73/32 reserved:health
172.16.2.116/32 reserved:remote-node
172.16.2.180/32 k8s:app=webpod custom-resource
k8s:io.cilium.k8s.namespace.labels.kubernetes.io/metadata.name=default
k8s:io.cilium.k8s.policy.cluster=default
k8s:io.cilium.k8s.policy.serviceaccount=default
k8s:io.kubernetes.pod.namespace=default
192.168.10.10/32 reserved:host
reserved:kube-apiserver
192.168.10.101/32 reserved:remote-node
192.168.10.102/32 reserved:remote-node
🧿 Kubernetes 클러스터 내에서 특정 파드의 IP 주소를 가져오고, 각 파드에 대한 간편한 명령어 실행을 위한 별칭을 설정
- NETPODIP: netpod라는 이름을 가진 파드의 IP 주소를 변수에 저장합니다.
- WEBPOD1IP: webpod1 파드의 IP 주소를 변수에 저장합니다.
- WEBPOD2IP: webpod2 파드의 IP 주소를 변수에 저장합니다.
- p0: netpod 파드에 대한 명령을 실행하기 위한 별칭입니다. 사용자가 p0 <command> 형식으로 입력하면 kubectl exec -it netpod -- <command>가 실행됩니다.
- p1: webpod1 파드에 대한 명령을 실행하기 위한 별칭입니다.
- p2: webpod2 파드에 대한 명령을 실행하기 위한 별칭입니다.
(⎈|CiliumLab:N/A) root@k8s-s:~# NETPODIP=$(kubectl get pods netpod -o jsonpath='{.status.podIP}')
WEBPOD1IP=$(kubectl get pods webpod1 -o jsonpath='{.status.podIP}')
WEBPOD2IP=$(kubectl get pods webpod2 -o jsonpath='{.status.podIP}')
(⎈|CiliumLab:N/A) root@k8s-s:~# alias p0="kubectl exec -it netpod -- "
alias p1="kubectl exec -it webpod1 -- "
alias p2="kubectl exec -it webpod2 -- "
🧿 netpod Kubernetes 파드 안에서 네트워크 인터페이스의 IP 주소와 라우팅 테이블을 확인
(⎈|CiliumLab:N/A) root@k8s-s:~# p0 ip -c -4 addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
9: eth0@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc noqueue state UP group default qlen 1000 link-netnsid 0
inet 172.16.0.230/32 scope global eth0
valid_lft forever preferred_lft forever
(⎈|CiliumLab:N/A) root@k8s-s:~# p0 route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.16.0.12 0.0.0.0 UG 0 0 0 eth0
172.16.0.12 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
🧿 netpod 파드에서 webpod1과 webpod2 파드로 각각 1회씩 Ping 테스트를 수행
(⎈|CiliumLab:N/A) root@k8s-s:~# p0 ping -c 1 $WEBPOD1IP && p0 ping -c 1 $WEBPOD2IP
PING 172.16.1.111 (172.16.1.111) 56(84) bytes of data.
64 bytes from 172.16.1.111: icmp_seq=1 ttl=62 time=0.214 ms
--- 172.16.1.111 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.214/0.214/0.214/0.000 ms
PING 172.16.2.180 (172.16.2.180) 56(84) bytes of data.
64 bytes from 172.16.2.180: icmp_seq=1 ttl=62 time=0.416 ms
--- 172.16.2.180 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.416/0.416/0.416/0.000 ms
🧿 netpod 파드에서 webpod1과 webpod2 파드에 대해 HTTP 요청 (80)
(⎈|CiliumLab:N/A) root@k8s-s:~# p0 curl -s $WEBPOD1IP && p0 curl -s $WEBPOD2IP
Hostname: webpod1
IP: 127.0.0.1
IP: ::1
IP: 172.16.1.111
IP: fe80::c8ae:93ff:feb3:dd53
RemoteAddr: 172.16.0.230:41320
GET / HTTP/1.1
Host: 172.16.1.111
User-Agent: curl/8.7.1
Accept: */*
Hostname: webpod2
IP: 127.0.0.1
IP: ::1
IP: 172.16.2.180
IP: fe80::a8bb:feff:fe60:8ad5
RemoteAddr: 172.16.0.230:60650
GET / HTTP/1.1
Host: 172.16.2.180
User-Agent: curl/8.7.1
Accept: */*
🧿 netpod 파드에서 webpod1과 webpod2 파드에 대해 HTTP 요청 (8080)
- exit code 7 는 "Failed to connect to the host"라는 오류를 의미합니다. 이는 curl이 요청을 보낼 대상(host)과 연결할 수 없다는 것을 뜻합니다.
(⎈|CiliumLab:N/A) root@k8s-s:~# p0 curl -s $WEBPOD1IP:8080 ; p0 curl -s $WEBPOD2IP:8080
command terminated with exit code 7
command terminated with exit code 7
🧿 netpod 포드에서 외부 DNS 서버와의 연결을 확인하고, 서울의 날씨를 출력
(⎈|CiliumLab:N/A) root@k8s-s:~# p0 ping -c 1 8.8.8.8 && p0 curl -s wttr.in/seoul
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=47 time=33.3 ms
--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 33.349/33.349/33.349/0.000 ms
Weather report: seoul
\ / Partly cloudy
_ /"".-. 19 °C
\_( ). ← 5 km/h
/(___(__) 10 km
0.0 mm
...
🧿 netpod 네트워크 트래픽 로그
소스 포드 | 소스 포드 ID | 목적지 포드 | 목적지 포드 ID | 포워드 방향 | 프로토콜 | TCP 플래그 |
default/netpod | 39126 | default/webpod2 | 25054 | to-endpoint | ICMPv4 | EchoRequest |
default/webpod2 | 25054 | default/netpod | 39126 | to-network | ICMPv4 | EchoReply |
default/netpod:60650 | 39126 | default/webpod2:80 | 25054 | to-endpoint | TCP | SYN |
default/webpod2:80 | 25054 | default/netpod:60650 | 39126 | to-network | TCP | SYN, ACK |
default/netpod:60650 | 39126 | default/webpod2:80 | 25054 | to-endpoint | TCP | ACK |
default/netpod:60650 | 39126 | default/webpod2:80 | 25054 | to-endpoint | TCP | ACK, PSH |
default/netpod:60650 | 39126 | default/webpod2 | 25054 | pre-xlate-rev | TCP | - |
default/netpod:60650 | 39126 | default/webpod2 | 25054 | pre-xlate-rev | TCP | - |
default/netpod:60650 | 39126 | default/webpod2 | 25054 | pre-xlate-rev | TCP | - |
default/netpod:60650 | 39126 | default/webpod2 | 25054 | pre-xlate-rev | TCP | - |
default/netpod:60650 | 39126 | default/webpod2:80 | 25054 | to-network | TCP | ACK, PSH |
default/netpod:60650 | 39126 | default/webpod2:80 | 25054 | to-endpoint | TCP | ACK, FIN |
default/webpod2:80 | 25054 | default/netpod:60650 | 39126 | to-network | TCP | ACK, FIN |
default/netpod:60650 | 39126 | default/webpod2:80 | 25054 | to-endpoint | TCP | ACK |
default/netpod:47608 | 39126 | default/webpod2:8080 | 25054 | to-endpoint | TCP | SYN |
default/webpod2:8080 | 25054 | default/netpod:47608 | 39126 | to-network | TCP | ACK, RST |
default/netpod:44939 | 39126 | kube-system/coredns-55cb58b774-2xvk2:53 | 39166 | to-endpoint | UDP | - |
default/netpod:44939 | 39126 | kube-system/coredns-55cb58b774-2xvk2 | 39166 | pre-xlate-rev | UDP | - |
default/netpod:44939 | 39126 | kube-system/coredns-55cb58b774-2xvk2 | 39166 | pre-xlate-rev | UDP | - |
default/netpod:44939 | 39126 | kube-system/coredns-55cb58b774-2xvk2 | 39166 | pre-xlate-rev | UDP | - |
kube-system/coredns-55cb58b774-2xvk2:53 | 39166 | default/netpod | 39126 | pre-xlate-rev | UDP | - |
kube-system/kube-dns:53 | world | default/netpod | 39126 | post-xlate-rev | UDP | - |
kube-system/coredns-55cb58b774-2xvk2:53 | 39166 | default/netpod | 39126 | pre-xlate-rev | UDP | - |
kube-system/kube-dns:53 | world | default/netpod | 39126 | post-xlate-rev | UDP | - |
default/netpod:44939 | 39126 | kube-system/coredns-55cb58b774-2xvk2 | 39166 | pre-xlate-rev | UDP | - |
default/netpod:44939 | 39126 | kube-system/coredns-55cb58b774-2xvk2 | 39166 | pre-xlate-rev | UDP | - |
kube-system/coredns-55cb58b774-2xvk2:53 | 39166 | default/netpod | 39126 | pre-xlate-rev | UDP | - |
kube-system/kube-dns:53 | world | default/netpod | 39126 | post-xlate-rev | UDP | - |
kube-system/coredns-55cb58b774-2xvk2:53 | 39166 | default/netpod | 39126 | pre-xlate-rev | UDP | - |
kube-system/kube-dns:53 | world | default/netpod | 39126 | post-xlate-rev | UDP | - |
default/netpod:40294 | 39126 | 5.9.243.187:80 | world | to-network | TCP | SYN |
default/netpod:40294 | 39126 | 5.9.243.187:80 | world | to-endpoint | TCP | SYN, ACK |
default/netpod:40294 | 39126 | 5.9.243.187:80 | world | to-network | TCP | ACK |
default/netpod:40294 | 39126 | 5.9.243.187:80 | world | to-network | TCP | ACK, PSH |
default/netpod:40294 | 39126 | 5.9.243.187:80 | world | to-endpoint | TCP | ACK, PSH |
default/netpod:40294 | 39126 | 5.9.243.187:80 | world | to-network | TCP | ACK, FIN |
default/netpod:40294 | 39126 | 5.9.243.187:80 | world | to-endpoint | TCP | ACK, FIN |
(⎈|CiliumLab:N/A) root@k8s-s:~# hubble observe --pod netpod
Oct 21 11:10:08.177: default/netpod (ID:39126) -> default/webpod2 (ID:25054) to-endpoint FORWARDED (ICMPv4 EchoRequest)
Oct 21 11:10:08.177: default/netpod (ID:39126) <- default/webpod2 (ID:25054) to-network FORWARDED (ICMPv4 EchoReply)
Oct 21 11:12:11.151: default/netpod:60650 (ID:39126) -> default/webpod2:80 (ID:25054) to-endpoint FORWARDED (TCP Flags: SYN)
Oct 21 11:12:11.151: default/netpod:60650 (ID:39126) <- default/webpod2:80 (ID:25054) to-network FORWARDED (TCP Flags: SYN, ACK)
Oct 21 11:12:11.151: default/netpod:60650 (ID:39126) -> default/webpod2:80 (ID:25054) to-endpoint FORWARDED (TCP Flags: ACK)
Oct 21 11:12:11.151: default/netpod:60650 (ID:39126) -> default/webpod2:80 (ID:25054) to-endpoint FORWARDED (TCP Flags: ACK, PSH)
Oct 21 11:12:11.151: default/netpod:60650 (ID:39126) <> default/webpod2 (ID:25054) pre-xlate-rev TRACED (TCP)
Oct 21 11:12:11.151: default/netpod:60650 (ID:39126) <> default/webpod2 (ID:25054) pre-xlate-rev TRACED (TCP)
Oct 21 11:12:11.151: default/netpod:60650 (ID:39126) <> default/webpod2 (ID:25054) pre-xlate-rev TRACED (TCP)
Oct 21 11:12:11.152: default/netpod:60650 (ID:39126) <> default/webpod2 (ID:25054) pre-xlate-rev TRACED (TCP)
Oct 21 11:12:11.152: default/netpod:60650 (ID:39126) <> default/webpod2 (ID:25054) pre-xlate-rev TRACED (TCP)
Oct 21 11:12:11.152: default/netpod:60650 (ID:39126) <- default/webpod2:80 (ID:25054) to-network FORWARDED (TCP Flags: ACK, PSH)
Oct 21 11:12:11.153: default/netpod:60650 (ID:39126) -> default/webpod2:80 (ID:25054) to-endpoint FORWARDED (TCP Flags: ACK, FIN)
Oct 21 11:12:11.153: default/netpod:60650 (ID:39126) <- default/webpod2:80 (ID:25054) to-network FORWARDED (TCP Flags: ACK, FIN)
Oct 21 11:12:11.153: default/netpod:60650 (ID:39126) -> default/webpod2:80 (ID:25054) to-endpoint FORWARDED (TCP Flags: ACK)
Oct 21 11:13:07.020: default/netpod:47608 (ID:39126) -> default/webpod2:8080 (ID:25054) to-endpoint FORWARDED (TCP Flags: SYN)
Oct 21 11:13:07.020: default/netpod:47608 (ID:39126) <- default/webpod2:8080 (ID:25054) to-network FORWARDED (TCP Flags: ACK, RST)
Oct 21 11:14:01.004: default/netpod:44939 (ID:39126) -> kube-system/coredns-55cb58b774-2xvk2:53 (ID:39166) to-endpoint FORWARDED (UDP)
Oct 21 11:14:01.004: default/netpod:44939 (ID:39126) <> kube-system/coredns-55cb58b774-2xvk2 (ID:39166) pre-xlate-rev TRACED (UDP)
Oct 21 11:14:01.004: default/netpod:44939 (ID:39126) <> kube-system/coredns-55cb58b774-2xvk2 (ID:39166) pre-xlate-rev TRACED (UDP)
Oct 21 11:14:01.004: default/netpod:44939 (ID:39126) <- kube-system/coredns-55cb58b774-2xvk2:53 (ID:39166) to-network FORWARDED (UDP)
Oct 21 11:14:01.005: default/netpod:44939 (ID:39126) <> kube-system/coredns-55cb58b774-2xvk2 (ID:39166) pre-xlate-rev TRACED (UDP)
Oct 21 11:14:01.005: default/netpod:44939 (ID:39126) <> kube-system/coredns-55cb58b774-2xvk2 (ID:39166) pre-xlate-rev TRACED (UDP)
Oct 21 11:14:01.005: default/netpod:44939 (ID:39126) <> kube-system/coredns-55cb58b774-2xvk2 (ID:39166) pre-xlate-rev TRACED (UDP)
Oct 21 11:14:01.005: default/netpod:44939 (ID:39126) <> kube-system/coredns-55cb58b774-2xvk2 (ID:39166) pre-xlate-rev TRACED (UDP)
Oct 21 11:14:01.006: kube-system/coredns-55cb58b774-2xvk2:53 (ID:39166) <> default/netpod (ID:39126) pre-xlate-rev TRACED (UDP)
Oct 21 11:14:01.006: kube-system/kube-dns:53 (world) <> default/netpod (ID:39126) post-xlate-rev TRANSLATED (UDP)
Oct 21 11:14:01.006: kube-system/coredns-55cb58b774-2xvk2:53 (ID:39166) <> default/netpod (ID:39126) pre-xlate-rev TRACED (UDP)
Oct 21 11:14:01.006: kube-system/kube-dns:53 (world) <> default/netpod (ID:39126) post-xlate-rev TRANSLATED (UDP)
Oct 21 11:14:01.006: default/netpod:44939 (ID:39126) <> kube-system/coredns-55cb58b774-2xvk2 (ID:39166) pre-xlate-rev TRACED (UDP)
Oct 21 11:14:01.006: default/netpod:44939 (ID:39126) <> kube-system/coredns-55cb58b774-2xvk2 (ID:39166) pre-xlate-rev TRACED (UDP)
Oct 21 11:14:01.007: kube-system/coredns-55cb58b774-2xvk2:53 (ID:39166) <> default/netpod (ID:39126) pre-xlate-rev TRACED (UDP)
Oct 21 11:14:01.007: kube-system/kube-dns:53 (world) <> default/netpod (ID:39126) post-xlate-rev TRANSLATED (UDP)
Oct 21 11:14:01.007: kube-system/coredns-55cb58b774-2xvk2:53 (ID:39166) <> default/netpod (ID:39126) pre-xlate-rev TRACED (UDP)
Oct 21 11:14:01.007: kube-system/kube-dns:53 (world) <> default/netpod (ID:39126) post-xlate-rev TRANSLATED (UDP)
Oct 21 11:14:01.008: default/netpod:44939 (ID:39126) <> kube-system/coredns-55cb58b774-2xvk2 (ID:39166) pre-xlate-rev TRACED (UDP)
Oct 21 11:14:01.008: default/netpod:44939 (ID:39126) <> kube-system/coredns-55cb58b774-2xvk2 (ID:39166) pre-xlate-rev TRACED (UDP)
Oct 21 11:14:01.266: kube-system/coredns-55cb58b774-2xvk2:53 (ID:39166) <> default/netpod (ID:39126) pre-xlate-rev TRACED (UDP)
Oct 21 11:14:01.266: kube-system/kube-dns:53 (world) <> default/netpod (ID:39126) post-xlate-rev TRANSLATED (UDP)
Oct 21 11:14:01.315: kube-system/coredns-55cb58b774-2xvk2:53 (ID:39166) <> default/netpod (ID:39126) pre-xlate-rev TRACED (UDP)
Oct 21 11:14:01.315: kube-system/kube-dns:53 (world) <> default/netpod (ID:39126) post-xlate-rev TRANSLATED (UDP)
Oct 21 11:14:01.315: default/netpod:40294 (ID:39126) -> 5.9.243.187:80 (world) to-network FORWARDED (TCP Flags: SYN)
Oct 21 11:14:01.609: default/netpod:40294 (ID:39126) <- 5.9.243.187:80 (world) to-endpoint FORWARDED (TCP Flags: SYN, ACK)
Oct 21 11:14:01.609: default/netpod:40294 (ID:39126) -> 5.9.243.187:80 (world) to-network FORWARDED (TCP Flags: ACK)
Oct 21 11:14:01.609: default/netpod:40294 (ID:39126) -> 5.9.243.187:80 (world) to-network FORWARDED (TCP Flags: ACK, PSH)
Oct 21 11:14:02.764: default/netpod:40294 (ID:39126) <- 5.9.243.187:80 (world) to-endpoint FORWARDED (TCP Flags: ACK, PSH)
Oct 21 11:14:02.765: default/netpod:40294 (ID:39126) -> 5.9.243.187:80 (world) to-network FORWARDED (TCP Flags: ACK, FIN)
Oct 21 11:14:03.058: default/netpod:40294 (ID:39126) <- 5.9.243.187:80 (world) to-endpoint FORWARDED (TCP Flags: ACK, FIN)
Oct 21 11:14:03.058: default/netpod:40294 (ID:39126) -> 5.9.243.187:80 (world) to-network FORWARDED (TCP Flags: ACK)
🧿 netpod와 webpod1 간의 네트워크 트래픽 로그
default/netpod | 39126 | default/webpod1 | 25054 | -> | ICMPv4 | EchoRequest |
default/netpod | 39126 | default/webpod1 | 25054 | <- | ICMPv4 | EchoReply |
default/netpod:41320 | 39126 | default/webpod1:80 | 25054 | -> | TCP | SYN |
default/webpod1:80 | 25054 | default/netpod:41320 | 39126 | <- | TCP | SYN, ACK |
default/netpod:41320 | 39126 | default/webpod1:80 | 25054 | -> | TCP | ACK |
default/netpod:41320 | 39126 | default/webpod1:80 | 25054 | -> | TCP | ACK, PSH |
default/webpod1:80 | 25054 | default/netpod:41320 | 39126 | <- | TCP | ACK, PSH |
default/netpod:41320 | 39126 | default/webpod1:80 | 25054 | -> | TCP | ACK, FIN |
default/webpod1:80 | 25054 | default/netpod:41320 | 39126 | <- | TCP | ACK, FIN |
default/netpod:38492 | 39126 | default/webpod1:8080 | 25054 | -> | TCP | SYN |
default/webpod1:8080 | 25054 | default/netpod:38492 | 39126 | <- | TCP | ACK, RST |
(⎈|CiliumLab:N/A) root@k8s-s:~# hubble observe --pod webpod1
Oct 21 11:10:08.023: default/netpod (ID:39126) -> default/webpod1 (ID:25054) to-network FORWARDED (ICMPv4 EchoRequest)
Oct 21 11:10:08.023: default/netpod (ID:39126) <- default/webpod1 (ID:25054) to-endpoint FORWARDED (ICMPv4 EchoReply)
Oct 21 11:12:10.998: default/netpod:41320 (ID:39126) -> default/webpod1:80 (ID:25054) to-network FORWARDED (TCP Flags: SYN)
Oct 21 11:12:10.998: default/netpod:41320 (ID:39126) <- default/webpod1:80 (ID:25054) to-endpoint FORWARDED (TCP Flags: SYN, ACK)
Oct 21 11:12:10.999: default/netpod:41320 (ID:39126) -> default/webpod1:80 (ID:25054) to-network FORWARDED (TCP Flags: ACK)
Oct 21 11:12:10.999: default/netpod:41320 (ID:39126) -> default/webpod1:80 (ID:25054) to-network FORWARDED (TCP Flags: ACK, PSH)
Oct 21 11:12:11.000: default/netpod:41320 (ID:39126) <- default/webpod1:80 (ID:25054) to-endpoint FORWARDED (TCP Flags: ACK, PSH)
Oct 21 11:12:11.001: default/netpod:41320 (ID:39126) -> default/webpod1:80 (ID:25054) to-network FORWARDED (TCP Flags: ACK, FIN)
Oct 21 11:12:11.001: default/netpod:41320 (ID:39126) <- default/webpod1:80 (ID:25054) to-endpoint FORWARDED (TCP Flags: ACK, FIN)
Oct 21 11:12:11.001: default/netpod:41320 (ID:39126) -> default/webpod1:80 (ID:25054) to-network FORWARDED (TCP Flags: ACK)
Oct 21 11:13:06.862: default/netpod:38492 (ID:39126) -> default/webpod1:8080 (ID:25054) to-network FORWARDED (TCP Flags: SYN)
Oct 21 11:13:06.862: default/netpod:38492 (ID:39126) <- default/webpod1:8080 (ID:25054) to-endpoint FORWARDED (TCP Flags: ACK, RST)
🧿 netpod와 webpod2 간의 네트워크 트래픽 로그
default/netpod | 39126 | default/webpod2 | 25054 | -> | ICMPv4 | EchoRequest |
default/netpod | 39126 | default/webpod2 | 25054 | <- | ICMPv4 | EchoReply |
default/netpod | 39126 | default/webpod2 | 25054 | -> | ICMPv4 | EchoRequest |
default/webpod2 | 25054 | default/netpod | 39126 | <- | ICMPv4 | EchoReply |
default/netpod:60650 | 39126 | default/webpod2:80 | 25054 | -> | TCP | SYN |
default/netpod:60650 | 39126 | default/webpod2:80 | 25054 | -> | TCP | SYN |
default/webpod2:80 | 25054 | default/netpod:60650 | 39126 | <- | TCP | SYN, ACK |
default/netpod:60650 | 39126 | default/webpod2:80 | 25054 | -> | TCP | ACK |
default/netpod:60650 | 39126 | default/webpod2:80 | 25054 | -> | TCP | ACK |
default/netpod:60650 | 39126 | default/webpod2:80 | 25054 | -> | TCP | ACK, PSH |
default/webpod2:80 | 25054 | default/netpod:60650 | 39126 | <- | TCP | ACK, PSH |
default/netpod:60650 | 39126 | default/webpod2:80 | 25054 | -> | TCP | ACK, FIN |
default/webpod2:80 | 25054 | default/netpod:60650 | 39126 | <- | TCP | ACK, FIN |
default/netpod:60650 | 39126 | default/webpod2:80 | 25054 | -> | TCP | ACK |
default/netpod:47608 | 39126 | default/webpod2:8080 | 25054 | -> | TCP | SYN |
default/webpod2:8080 | 25054 | default/netpod:47608 | 39126 | <- | TCP | ACK, RST |
default/netpod:47608 | 39126 | default/webpod2:8080 | 25054 | -> | TCP | SYN |
default/webpod2:8080 | 25054 | default/netpod:47608 | 39126 | <- | TCP | ACK, RST |
(⎈|CiliumLab:N/A) root@k8s-s:~# hubble observe --pod webpod2
Oct 21 11:10:08.176: default/netpod (ID:39126) -> default/webpod2 (ID:25054) to-network FORWARDED (ICMPv4 EchoRequest)
Oct 21 11:10:08.177: default/netpod (ID:39126) <- default/webpod2 (ID:25054) to-endpoint FORWARDED (ICMPv4 EchoReply)
Oct 21 11:10:08.177: default/netpod (ID:39126) -> default/webpod2 (ID:25054) to-endpoint FORWARDED (ICMPv4 EchoRequest)
Oct 21 11:10:08.177: default/netpod (ID:39126) <- default/webpod2 (ID:25054) to-network FORWARDED (ICMPv4 EchoReply)
Oct 21 11:12:11.150: default/netpod:60650 (ID:39126) -> default/webpod2:80 (ID:25054) to-network FORWARDED (TCP Flags: SYN)
Oct 21 11:12:11.151: default/netpod:60650 (ID:39126) -> default/webpod2:80 (ID:25054) to-endpoint FORWARDED (TCP Flags: SYN)
Oct 21 11:12:11.151: default/netpod:60650 (ID:39126) <- default/webpod2:80 (ID:25054) to-network FORWARDED (TCP Flags: SYN, ACK)
Oct 21 11:12:11.151: default/netpod:60650 (ID:39126) <- default/webpod2:80 (ID:25054) to-endpoint FORWARDED (TCP Flags: SYN, ACK)
Oct 21 11:12:11.151: default/netpod:60650 (ID:39126) -> default/webpod2:80 (ID:25054) to-network FORWARDED (TCP Flags: ACK)
Oct 21 11:12:11.151: default/netpod:60650 (ID:39126) -> default/webpod2:80 (ID:25054) to-endpoint FORWARDED (TCP Flags: ACK)
Oct 21 11:12:11.151: default/netpod:60650 (ID:39126) -> default/webpod2:80 (ID:25054) to-network FORWARDED (TCP Flags: ACK, PSH)
Oct 21 11:12:11.151: default/netpod:60650 (ID:39126) -> default/webpod2:80 (ID:25054) to-endpoint FORWARDED (TCP Flags: ACK, PSH)
Oct 21 11:12:11.151: default/netpod:60650 (ID:39126) <> default/webpod2 (ID:25054) pre-xlate-rev TRACED (TCP)
Oct 21 11:12:11.151: default/netpod:60650 (ID:39126) <> default/webpod2 (ID:25054) pre-xlate-rev TRACED (TCP)
Oct 21 11:12:11.151: default/netpod:60650 (ID:39126) <> default/webpod2 (ID:25054) pre-xlate-rev TRACED (TCP)
Oct 21 11:12:11.152: default/netpod:60650 (ID:39126) <> default/webpod2 (ID:25054) pre-xlate-rev TRACED (TCP)
Oct 21 11:12:11.152: default/netpod:60650 (ID:39126) <> default/webpod2 (ID:25054) pre-xlate-rev TRACED (TCP)
Oct 21 11:12:11.152: default/netpod:60650 (ID:39126) <- default/webpod2:80 (ID:25054) to-network FORWARDED (TCP Flags: ACK, PSH)
Oct 21 11:12:11.152: default/netpod:60650 (ID:39126) <- default/webpod2:80 (ID:25054) to-endpoint FORWARDED (TCP Flags: ACK, PSH)
Oct 21 11:12:11.153: default/netpod:60650 (ID:39126) -> default/webpod2:80 (ID:25054) to-network FORWARDED (TCP Flags: ACK, FIN)
Oct 21 11:12:11.153: default/netpod:60650 (ID:39126) -> default/webpod2:80 (ID:25054) to-endpoint FORWARDED (TCP Flags: ACK, FIN)
Oct 21 11:12:11.153: default/netpod:60650 (ID:39126) <- default/webpod2:80 (ID:25054) to-network FORWARDED (TCP Flags: ACK, FIN)
Oct 21 11:12:11.153: default/netpod:60650 (ID:39126) <- default/webpod2:80 (ID:25054) to-endpoint FORWARDED (TCP Flags: ACK, FIN)
Oct 21 11:12:11.153: default/netpod:60650 (ID:39126) -> default/webpod2:80 (ID:25054) to-network FORWARDED (TCP Flags: ACK)
Oct 21 11:12:11.153: default/netpod:60650 (ID:39126) -> default/webpod2:80 (ID:25054) to-endpoint FORWARDED (TCP Flags: ACK)
Oct 21 11:13:07.020: default/netpod:47608 (ID:39126) -> default/webpod2:8080 (ID:25054) to-network FORWARDED (TCP Flags: SYN)
Oct 21 11:13:07.020: default/netpod:47608 (ID:39126) <- default/webpod2:8080 (ID:25054) to-endpoint FORWARDED (TCP Flags: ACK, RST)
Oct 21 11:13:07.020: default/netpod:47608 (ID:39126) -> default/webpod2:8080 (ID:25054) to-endpoint FORWARDED (TCP Flags: SYN)
Oct 21 11:13:07.020: default/netpod:47608 (ID:39126) <- default/webpod2:8080 (ID:25054) to-network FORWARDED (TCP Flags: ACK, RST)
🧿 Cilium의 IP 캐시 조회
(⎈|CiliumLab:N/A) root@k8s-s:~# c0 map get cilium_ipcache
Key Value State Error
172.16.1.210/32 identity=39166 encryptkey=0 tunnelendpoint=192.168.10.101, flags=<none> sync
0.0.0.0/0 identity=2 encryptkey=0 tunnelendpoint=0.0.0.0, flags=<none> sync
172.16.2.116/32 identity=6 encryptkey=0 tunnelendpoint=192.168.10.102, flags=<none> sync
172.16.2.73/32 identity=4 encryptkey=0 tunnelendpoint=192.168.10.102, flags=<none> sync
172.16.1.198/32 identity=6 encryptkey=0 tunnelendpoint=192.168.10.101, flags=<none> sync
172.16.1.221/32 identity=39166 encryptkey=0 tunnelendpoint=192.168.10.101, flags=<none> sync
172.16.0.236/32 identity=4 encryptkey=0 tunnelendpoint=0.0.0.0, flags=<none> sync
172.16.0.230/32 identity=39126 encryptkey=0 tunnelendpoint=0.0.0.0, flags=<none> sync
172.16.1.111/32 identity=25054 encryptkey=0 tunnelendpoint=192.168.10.101, flags=<none> sync
172.16.1.78/32 identity=44886 encryptkey=0 tunnelendpoint=192.168.10.101, flags=<none> sync
172.16.1.79/32 identity=42840 encryptkey=0 tunnelendpoint=192.168.10.101, flags=<none> sync
192.168.10.10/32 identity=1 encryptkey=0 tunnelendpoint=0.0.0.0, flags=<none> sync
172.16.1.159/32 identity=4 encryptkey=0 tunnelendpoint=192.168.10.101, flags=<none> sync
192.168.10.102/32 identity=6 encryptkey=0 tunnelendpoint=0.0.0.0, flags=<none> sync
172.16.2.180/32 identity=25054 encryptkey=0 tunnelendpoint=192.168.10.102, flags=<none> sync
192.168.10.101/32 identity=6 encryptkey=0 tunnelendpoint=0.0.0.0, flags=<none> sync
172.16.0.12/32 identity=1 encryptkey=0 tunnelendpoint=0.0.0.0, flags=<none> sync
🧿 cilium_ipcache에서 WEBPOD1IP에 해당하는 IP 주소에 대한 정보를 확인
- 172.16.1.111/32:
- 이 IP 주소는 identity=25054와 연결되어 있으며, tunnelendpoint는 192.168.10.101입니다.
- 이 IP는 Cilium의 IP 캐시에 등록되어 있고, 상태는 sync입니다.
(⎈|CiliumLab:N/A) root@k8s-s:~# c0 map get cilium_ipcache | grep $WEBPOD1IP
172.16.1.111/32 identity=25054 encryptkey=0 tunnelendpoint=192.168.10.101, flags=<none> sync
🧿 특정 LXC 컨테이너의 네트워크 인터페이스 정보
- 지정한 LXC 컨테이너의 네트워크 인터페이스 주소 정보를 표시합니다
10: lxc7408fc78b9ff@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc noqueue state UP group default qlen 1000
link/ether 5e:b5:9a:19:fb:b3 brd ff:ff:ff:ff:ff:ff link-netns cni-35c57e23-01ba-0bc8-9858-769f1479059c
inet6 fe80::5cb5:9aff:fe19:fbb3/64 scope link
valid_lft forever preferred_lft forever
(⎈|CiliumLab:N/A) root@k8s-s:~# LXC=lxc7408fc78b9ff
(⎈|CiliumLab:N/A) root@k8s-s:~# ip -c addr show dev $LXC
10: lxc7408fc78b9ff@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc noqueue state UP group default qlen 1000
link/ether 5e:b5:9a:19:fb:b3 brd ff:ff:ff:ff:ff:ff link-netns cni-35c57e23-01ba-0bc8-9858-769f1479059c
inet6 fe80::5cb5:9aff:fe19:fbb3/64 scope link
valid_lft forever preferred_lft forever
🧿 Cilium의 BPF 네트워크 상태 정보
- xdp:
- XDP (eXpress Data Path)는 고성능 패킷 처리 기술로, 이 항목 아래에 정보가 없다는 것은 현재 XDP 프로그램이 활성화되어 있지 않음을 나타냅니다.
- tc:
- Linux의 트래픽 제어(traffic control) 기능을 나타내며, 다양한 네트워크 인터페이스에 연결된 BPF 프로그램과 관련된 정보가 나열됩니다.
인터페이스 방향 BPF 프로그램 프로그램 ID ens5(2) ingress cil_from_netdev 1284 ens5(2) egress cil_to_netdev 1290 cilium_net(3) ingress cil_to_host 1278 cilium_host(4) ingress cil_to_host 1260 cilium_host(4) egress cil_from_host 1266 lxc_health(8) ingress cil_from_container 1302 lxc_health(8) egress cil_to_container 1303 lxc7408fc78b9ff(10) ingress cil_from_container 1312 lxc7408fc78b9ff(10) egress cil_to_container 1311
- Linux의 트래픽 제어(traffic control) 기능을 나타내며, 다양한 네트워크 인터페이스에 연결된 BPF 프로그램과 관련된 정보가 나열됩니다.
- ens5: 물리적 네트워크 인터페이스.
- cilium_net: Cilium 네트워크 인터페이스.
- lxc_health: 컨테이너의 상태 확인을 위한 인터페이스.
- lxc7408fc78b9ff: 특정 LXC 컨테이너의 네트워크 인터페이스
- flow_dissector:
- flow dissector는 BPF 프로그램에서 패킷 흐름을 분석하는 데 사용됩니다. 현재 이 항목 아래에 정보가 없다는 것은 특정한 흐름 디섹터가 활성화되어 있지 않음을 의미합니다.
- netfilter:
- netfilter는 Linux 커널의 패킷 필터링 시스템으로, Cilium에서 사용하는 netfilter 관련 정보가 나열됩니다. 현재 이 항목 아래에도 정보가 없다는 것은 활성화된 netfilter 규칙이 없음을 나타냅니다.
(⎈|CiliumLab:N/A) root@k8s-s:~# c0bpf net show
xdp:
tc:
ens5(2) tcx/ingress cil_from_netdev prog_id 1284 link_id 16
ens5(2) tcx/egress cil_to_netdev prog_id 1290 link_id 17
cilium_net(3) tcx/ingress cil_to_host prog_id 1278 link_id 15
cilium_host(4) tcx/ingress cil_to_host prog_id 1260 link_id 13
cilium_host(4) tcx/egress cil_from_host prog_id 1266 link_id 14
lxc_health(8) tcx/ingress cil_from_container prog_id 1302 link_id 21
lxc_health(8) tcx/egress cil_to_container prog_id 1303 link_id 22
lxc7408fc78b9ff(10) tcx/ingress cil_from_container prog_id 1312 link_id 23
lxc7408fc78b9ff(10) tcx/egress cil_to_container prog_id 1311 link_id 24
flow_dissector:
netfilter:
🧿 특정 LXC 컨테이너(lxc7408fc78b9ff)에 대한 BPF 정보
lxc7408fc78b9ff(10) | 이 항목은 lxc7408fc78b9ff라는 LXC 컨테이너의 네트워크 인터페이스를 나타냅니다. (10)은 이 인터페이스의 ID입니다. |
tcx/ingress | ingress는 들어오는 패킷을 처리하는 트래픽 클래스(tcx)를 나타냅니다. 이 경우, LXC 컨테이너에서 호스트로 들어오는 패킷을 처리하는 BPF 프로그램이 실행됩니다. |
cil_from_container | 이 BPF 프로그램의 이름입니다. cil_from_container는 컨테이너에서 호스트로 패킷을 전송하는 역할을 합니다. |
prog_id 1312 | 이 BPF 프로그램의 고유 ID입니다. 1312는 특정 프로그램을 식별하는 데 사용됩니다. |
link_id 23 | 이 BPF 프로그램이 연결된 링크의 ID입니다. 23은 해당 링크를 식별하는 데 사용됩니다. |
lxc7408fc78b9ff(10) | 동일한 LXC 컨테이너의 네트워크 인터페이스로, (10)은 이 인터페이스의 ID입니다. |
tcx/egress | egress는 나가는 패킷을 처리하는 트래픽 클래스(tcx)를 나타냅니다. 이 경우, 호스트에서 LXC 컨테이너로 나가는 패킷을 처리하는 BPF 프로그램이 실행됩니다. |
cil_to_container | 이 BPF 프로그램의 이름입니다. cil_to_container는 호스트에서 컨테이너로 패킷을 전송하는 역할을 합니다. |
prog_id 1311 | 이 BPF 프로그램의 고유 ID입니다. 1311은 특정 프로그램을 식별하는 데 사용됩니다. |
link_id 24 | 이 BPF 프로그램이 연결된 링크의 ID입니다. 24는 해당 링크를 식별하는 데 사용됩니다. |
(⎈|CiliumLab:N/A) root@k8s-s:~# c0bpf net show | grep $LXC
lxc7408fc78b9ff(10) tcx/ingress cil_from_container prog_id 1312 link_id 23
lxc7408fc78b9ff(10) tcx/egress cil_to_container prog_id 1311 link_id 24
🧿 특정 BPF 프로그램의 세부 정보
- c0bpf prog show id 1312: BPF 프로그램 ID가 1312인 프로그램에 대한 정보를 요청합니다.
- cil_from_container: 컨테이너에서 호스트로 들어오는 패킷을 처리합니다.
- c0bpf prog show id 1311: BPF 프로그램 ID가 1311인 프로그램에 대한 정보를 요청합니다.
- cil_to_container: 호스트에서 컨테이너로 나가는 패킷을 처리합니다.
(⎈|CiliumLab:N/A) root@k8s-s:~# c0bpf prog show id 1312
1312: sched_cls name cil_from_container tag ebe634d5df387fad gpl
loaded_at 2024-10-21T11:06:22+0000 uid 0
xlated 728B jited 545B memlock 4096B map_ids 175,66
btf_id 350
(⎈|CiliumLab:N/A) root@k8s-s:~# c0bpf prog show id 1311
1311: sched_cls name cil_to_container tag 8fea7246bd011141 gpl
loaded_at 2024-10-21T11:06:22+0000 uid 0
xlated 1712B jited 1015B memlock 4096B map_ids 66,175
btf_id 349
🧿 Cilium의 BPF 맵 정보
- percpu_hash는 CPU마다 각각 해시 테이블을 사용하는 구조입니다. 이 방식은 여러 CPU에서 동시성을 높이고 성능을 개선합니다.
- cilium_metrics는 Cilium 네트워크에서 수집한 메트릭 데이터(예: 트래픽 통계)를 저장하는 맵입니다.
- prog_array는 프로그램 배열을 의미하며, 여러 BPF 프로그램을 저장하는 데 사용됩니다. 이 맵은 주로 BPF 프로그램의 순서를 관리하는 데 사용됩니다.
- cilium_calls_00는 Cilium에서 호출되는 BPF 프로그램들을 관리하는 맵입니다.
(⎈|CiliumLab:N/A) root@k8s-s:~# c0bpf map list
...
66: percpu_hash name cilium_metrics flags 0x1
key 8B value 16B max_entries 1024 memlock 19384B
...
172: prog_array name cilium_calls_00 flags 0x0
key 4B value 4B max_entries 50 memlock 720B
owner_prog_type sched_cls owner jited
...
'쿠버네티스 네트워크 스터디 3기' 카테고리의 다른 글
[8주차] Cilium CNI : Network Policy (L3, L4, L7) (0) | 2024.10.21 |
---|---|
[8주차] Cilium CNI : 서비스 통신 확인 (0) | 2024.10.21 |
[8주차] Cilium CNI : Hubble UI & CLI (0) | 2024.10.21 |
[8주차] Cilium CNI : Cilium 기본 정보 (0) | 2024.10.21 |
[8주차] Cilium CNI : Cilium 이란? (0) | 2024.10.21 |
Comments