Calico CNI 구성

Gyullbb·2024년 9월 21일
0

K8S

목록 보기
5/13

Calico CNI 구성

Calico는 아래의 구성요소들을 통해 Kubernetes에서의 네트워크 통신 기능을 제공한다.

Calico-kube-controllers

Kubernetes API Server로부터 pod, namespace, 네트워크 정책 등 클러스터의 네트워크 리소스를 주기적으로 조회하여 새로운 네트워크 정책이 생성된 것을 감지한 후 Calico datastore를 업데이트한다.

Calico datastore

Calico datastore는 Kubernetes API datastore(kdd) 혹은 ETCD 중 하나를 선택할 수 있다. calico-kube-controllers에 의해 전달된 정책이 Calico datastore에 기록된다.
기록되는 정책은 아래와 같다.

  • Network Policies : 네트워크 트래픽 허용/차단 정책
  • Workload Endpoints : Pod의 네트워크 인터페이스와 연결된 IP 주소, 네트워크 정책 등 정보
  • Host Endpints : Host에서 실행되는 서비스 및 네트워크 네임스페이스 정보 / 노드 간 BGP 피어링 정보
  • IPAM : IP 주소 할당 관리
  • Namespace/Node
  • GlobalNetworkPolicy : 전역적으로 적용되는 네트워크 정책
  • Profile : 클러스터 내 특정 pod 그룹이나 네임스페이스에 대한 네트워크 정책

Calicoctl

사용자는 calicoctl cli를 통해 Calico datastore에 저장된 리소스를 조회하거나 업데이트 할 수 있다.

CNI Plugin

Kubernetes 클러스터 내에서 pod가 생성될 때, 해당 pod의 네트워크 인터페이스를 생성하고, Pod와 네트워크의 가상 네트워크 브릿지 / overlay 네트워크를 설정함으로써 네트워크 트래픽을 관리하는 플러그인이다.

CNI IPAM Plugin

pod에 IP를 할당/회수/관리하는 플러그인으로 CNI Plugin에 의해 pod의 네트워크 인터페이스가 설정되면, CNI IPAM Plugin이 Calico datastore에 저장되어 있는 Pod Pool을 기반으로 Pod에 IP를 할당한다.
pod가 삭제되면 해당 IP 주소를 회수하여 Calico datastore에 업데이트함으로써 IP가 재사용될 수 있도록 관리한다.

Calico Node Daemonset (Pod)

calico-node-pod는 클러스터에서 daemonset으로 뜨는 네트워크 플러그인으로, 각 노드에서 네트워크 트래픽을 제어하고, Calico 네트워크 정책을 적용한다. Calico Node 내의 bird, felix, confd 프로그램에 의해 동작한다.

bird

Calico에서 BGP 라우팅을 담당하는 오픈 소스 소프트웨어 라우팅 데몬 프로그램으로, 노드의 pod CIDR을 BGP 라우팅 프로토콜을 통해 다른 노드에 광고한다. 이를 통해 다른 노드의 pod 대역과 통신 할 수 있다.

felix

Calico의 네트워크 정책 엔진으로 bird로 학습한 다른 노드의 pod CIDR을 host의 라우팅 테이블에 업데이트하며, IPtables 규칙 설정 관리를 한다.

confd

Calico 구성 관리 도구로, Calico에서 BGP와 관련된 설정을 관리하고, Calico의 구성 파일을 동적으로 업데이트 한다.
또한 Calico datastore에서 네트워크 설정을 가져와 Calico BGP 설정을 조정한다. (e.g. 클러스터에 새로운 노드 추가 시 라우팅 구성 업데이트)

Calico 구성 요소 확인

calicoctl

calicoctl version에는 Cluster Type항목이 있는데, 현재 어떤 구성을 사용 중인지를 알 수 있다. 아래 테스트에서는 k8s, bgp routeing, kubeadm, kdd(kubernetes api - calico datastore)을 사용 중인 것을 확인할 수 있다.

(|kubernetes-admin@kubernetes:N/A) root@k8s-m:~# calicoctl version
Client Version:    v3.28.1
Git commit:        601856343
Cluster Version:   v3.28.1
Cluster Type:      k8s,bgp,kubeadm,kdd

calico-node daemonset

calico-node는 각 노드에 daemonset으로 떠있다.
calico-node의 IP를 보면 Host의 eth0 IP와 동일한데, 이는 Host의 네트워크 네임스페이스와 calico-node pod의 네트워크 네임스페이스가 동일하기 때문이다.

(|kubernetes-admin@kubernetes:N/A) root@k8s-m:~# kubectl get daemonset -n kube-system
NAME          DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
calico-node   4         4         4       4            4           kubernetes.io/os=linux   6m47s
kube-proxy    4         4         4       4            4           kubernetes.io/os=linux   13m

(|kubernetes-admin@kubernetes:N/A) root@k8s-m:~# kubectl get pod -n kube-system -l k8s-app=calico-node -o wide
NAME                READY   STATUS    RESTARTS   AGE   IP               NODE     NOMINATED NODE   READINESS GATES
calico-node-q2b9f   1/1     Running   0          16m   192.168.10.10    k8s-m    <none>           <none>
calico-node-t2njm   1/1     Running   0          16m   192.168.10.102   k8s-w2   <none>           <none>
calico-node-vkmct   1/1     Running   0          16m   192.168.20.100   k8s-w0   <none>           <none>
calico-node-vw2wk   1/1     Running   0          16m   192.168.10.101   k8s-w1   <none>           <none>

(|kubernetes-admin@kubernetes:N/A) root@k8s-m:~# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9001
        inet 192.168.10.10  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::6b:2dff:feb1:1e03  prefixlen 64  scopeid 0x20<link>
        ether 02:6b:2d:b1:1e:03  txqueuelen 1000  (Ethernet)
        RX packets 467466  bytes 674909756 (674.9 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 60071  bytes 10813763 (10.8 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Calico IPAM

현재 calico가 어떠한 IPAM을 사용 중인지는 설정에서 확인할 수 있다.

(|kubernetes-admin@kubernetes:N/A) root@k8s-m:~# cat /etc/cni/net.d/10-calico.conflist | jq
...
  "plugins": [
    {
      "type": "calico",
      "log_level": "info",
      "log_file_path": "/var/log/calico/cni/cni.log",
      "datastore_type": "kubernetes",
      "nodename": "k8s-m",
      "mtu": 0,
      "ipam": {
        "type": "calico-ipam"
      },
      "policy": {
        "type": "k8s"
      },
...

Node의 pod CIDR대역을 확인하고, Cluster의 다른 노드들이 파드에 할당하기 위해 가지고 있는 대역인 Block을 확인해본다.

(|kubernetes-admin@kubernetes:N/A) root@k8s-m:~# calicoctl ipam show
+----------+---------------+-----------+------------+--------------+
| GROUPING |     CIDR      | IPS TOTAL | IPS IN USE |   IPS FREE   |
+----------+---------------+-----------+------------+--------------+
| IP Pool  | 172.16.0.0/16 |     65536 | 7 (0%)     | 65529 (100%) |
+----------+---------------+-----------+------------+--------------+

(|kubernetes-admin@kubernetes:N/A) root@k8s-m:~# kubectl get nodes -o jsonpath='{.items[*].spec.podCIDR}' ;echo
172.16.0.0/24 172.16.1.0/24 172.16.3.0/24 172.16.2.0/24

(|kubernetes-admin@kubernetes:N/A) root@k8s-m:~# calicoctl ipam show --show-blocks
+----------+-----------------+-----------+------------+--------------+
| GROUPING |      CIDR       | IPS TOTAL | IPS IN USE |   IPS FREE   |
+----------+-----------------+-----------+------------+--------------+
| IP Pool  | 172.16.0.0/16   |     65536 | 7 (0%)     | 65529 (100%) |
| Block    | 172.16.116.0/24 |       256 | 1 (0%)     | 255 (100%)   |
| Block    | 172.16.158.0/24 |       256 | 1 (0%)     | 255 (100%)   |
| Block    | 172.16.184.0/24 |       256 | 1 (0%)     | 255 (100%)   |
| Block    | 172.16.34.0/24  |       256 | 4 (2%)     | 252 (98%)    |
+----------+-----------------+-----------+------------+--------------+

위에서 보이는 Block CIDR은 각 노드의 tunl0 인터페이스 IP이다.

# k8s-m
(|kubernetes-admin@kubernetes:N/A) root@k8s-m:~# ifconfig tunl0
tunl0: flags=193<UP,RUNNING,NOARP>  mtu 8981
        inet 172.16.116.0  netmask 255.255.255.255
        tunnel   txqueuelen 1000  (IPIP Tunnel)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# k8s-w0
root@k8s-w0:~# ifconfig tunl0
tunl0: flags=193<UP,RUNNING,NOARP>  mtu 8981
        inet 172.16.34.0  netmask 255.255.255.255
        tunnel   txqueuelen 1000  (IPIP Tunnel)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# k8s-w1
root@k8s-w1:~# ifconfig tunl0
tunl0: flags=193<UP,RUNNING,NOARP>  mtu 8981
        inet 172.16.158.0  netmask 255.255.255.255
        tunnel   txqueuelen 1000  (IPIP Tunnel)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# k8s-w2
root@k8s-w2:~# ifconfig tunl0
tunl0: flags=193<UP,RUNNING,NOARP>  mtu 8981
        inet 172.16.184.0  netmask 255.255.255.255
        tunnel   txqueuelen 1000  (IPIP Tunnel)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

추가 설정을 확인해본다.
calicoctl의 StrictAffinity PROPERTY의 값이 true일 경우, 노드가 자신의 IP Pool에서 할당 가능한 주소를 모두 사용했을 경우, 다른 노드의 IP 주소 대역을 빌려 올 수 있는데, 이 때 빌려온 주소는 --show-borrowd 플래그로 표시된다.

(|kubernetes-admin@kubernetes:N/A) root@k8s-m:~# calicoctl ipam show --show-borrowed
+----+----------------+-------+-------------+------+--------------+
| IP | BORROWING-NODE | BLOCK | BLOCK OWNER | TYPE | ALLOCATED-TO |
+----+----------------+-------+-------------+------+--------------+
+----+----------------+-------+-------------+------+--------------+

(|kubernetes-admin@kubernetes:N/A) root@k8s-m:~# calicoctl ipam show --show-configuration
+--------------------+-------+
|      PROPERTY      | VALUE |
+--------------------+-------+
| StrictAffinity     | false |
| AutoAllocateBlocks | true  |
| MaxBlocksPerHost   |     0 |
+--------------------+-------+

Node BGP peer

Bird를 통해 어떤 노드와 BGP통신 연결이 되어 있는지 확인한다. 해당 노드를 제외한 나머지 노드들(BGP Peer) 정보를 확인할 수 있다.

(|kubernetes-admin@kubernetes:N/A) root@k8s-m:~# calicoctl node status
Calico process is running.

IPv4 BGP status
+----------------+-------------------+-------+----------+-------------+
|  PEER ADDRESS  |     PEER TYPE     | STATE |  SINCE   |    INFO     |
+----------------+-------------------+-------+----------+-------------+
| 192.168.20.100 | node-to-node mesh | up    | 03:51:03 | Established |
| 192.168.10.101 | node-to-node mesh | up    | 03:51:04 | Established |
| 192.168.10.102 | node-to-node mesh | up    | 03:51:04 | Established |
+----------------+-------------------+-------+----------+-------------+

IPv6 BGP status
No IPv6 peers found.

BGP통신 연결 확인은 Bird에서 주기적으로 각 노드(Peer Router)에 살아있음을 알리는 메세지를 주고 받으면서 확인하게 된다.(BGP Keepalive)
BGP Message의 종류에 대해 좀 더 자세히 확인하고, 패킷 캡처를 통해 모니터링 해본다.

BGP Message

BGP Message Type에는 Open, Update, Notification, Keepalive, Route-Refresh 가 있다.

Open

TCP 연결이 된 BGP Peer 간에 최초로 주고받는 메세지이다. 주로, 자신의 정보를 알리기 위한 메세지이다.

Update

이미 Peer관계를 확립한 Peer Router 상호 간에 새롭게 나타난 경로 정보에 대한 광고, 혹은 이전에 알려진 경로에 대한 취소에 사용되는 메세지이다.

Notification

어떠한 에러가 발생했을 때 혹은 연결을 닫고자 할 때, 보내는 BGP 메세지이다. 해당 메세지가 보내진 후 연결 세션이 끊어진다.

Keepalive

BGP Open Message에 대한 응답으로, 다른 노드(Peer Router)에 자신이 살아있음을 알리는 주기적인 19바이트의 BGP 메세지이다.

Route-Refresh

다른 노드(Peer Router)에게 Routing 정보를 다시 보내도록 요청하는 메세지이다.

패킷 캡처

BGP Message는 bird의 port인 TCP 179를 사용한다.

root@k8s-w1:~# netstat -tnlp | grep bird
tcp        0      0 0.0.0.0:179             0.0.0.0:*               LISTEN      3698/bird

BGP가 사용하는 인터페이스는 eth0이다.

(|kubernetes-admin@kubernetes:N/A) root@k8s-m:~# calicoctl node status
Calico process is running.

IPv4 BGP status
+----------------+-------------------+-------+----------+-------------+
|  PEER ADDRESS  |     PEER TYPE     | STATE |  SINCE   |    INFO     |
+----------------+-------------------+-------+----------+-------------+
| 192.168.20.100 | node-to-node mesh | up    | 03:51:03 | Established |
| 192.168.10.101 | node-to-node mesh | up    | 03:51:04 | Established |
| 192.168.10.102 | node-to-node mesh | up    | 03:51:04 | Established |
+----------------+-------------------+-------+----------+-------------+

root@k8s-w1:~# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9001
        inet 192.168.10.101  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::5f:26ff:fe41:132b  prefixlen 64  scopeid 0x20<link>
        ether 02:5f:26:41:13:2b  txqueuelen 1000  (Ethernet)
        RX packets 458793  bytes 667403787 (667.4 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 66191  bytes 5712673 (5.7 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

아래 명령어를 사용하여 패킷을 캡처하고, calico-node 파드 하나를 삭제한다. calico-node를 삭제하고 다시 생성되는 과정에서, BGP 세션을 설정하고 네트워크 정보를 업데이트하는 BGP Open, Update, Keepalive 메세지를 확인할 수 있다.

root@k8s-w1:~# tcpdump -i eth0 'tcp port 179' -vvv -w bgp_update_capture.pcap

(|kubernetes-admin@kubernetes:N/A) root@k8s-m:~# kubectl get pod -A -o wide | grep calico-node
kube-system   calico-node-7fbzp                          1/1     Running   0          58m   192.168.10.101   k8s-w1   <none>           <none>
kube-system   calico-node-nvqnx                          1/1     Running   0          58m   192.168.10.102   k8s-w2   <none>           <none>
kube-system   calico-node-wbx5r                          1/1     Running   0          58m   192.168.20.100   k8s-w0   <none>           <none>
kube-system   calico-node-xr6vl                          1/1     Running   0          58m   192.168.10.10    k8s-m    <none>           <none>
(|kubernetes-admin@kubernetes:N/A) root@k8s-m:~# kubectl delete pod calico-node-nvqnx -n kube-system --force

패킷캡처 내역

OPEN Message
OPEN Message의 ASN은 별도의 설정을 하지 않았을 때 default 값이 64512이다.
https://docs.tigera.io/calico/latest/reference/resources/bgpconfig#:~:text=true-,asNumber,-The%20default%20local

UPDATE Message

Keepalive Message

ip pool, Calico Mode

클러스터가 사용하는 ip 대역 정보와 calico Mode 정보를 확인한다.

(|kubernetes-admin@kubernetes:N/A) root@k8s-m:~# calicoctl get ippool -o wide
NAME                  CIDR            NAT    IPIPMODE   VXLANMODE   DISABLED   DISABLEBGPEXPORT   SELECTOR
default-ipv4-ippool   172.16.0.0/16   true   Always     Never       false      false              all()

Workload Endpoint

calico를 통해서 할당받은 Pod의 정보를 출력한다. host network 네임스페이스를 사용하는 Pod들은 출력되지 않는다.
각 Pod가 어떠한 노드에 떠있는지, 어떠한 인터페이스에 연결되었는지, 어떤 IP를 할당 받았는지 등 Pod의 Endpoint 정보를 확인할 수 있다.

(|kubernetes-admin@kubernetes:N/A) root@k8s-m:~# calicoctl get wep -A -o wide
NAMESPACE     NAME                                                            WORKLOAD                                   NODE     NETWORKS         INTERFACE         PROFILES                                                  NATS
kube-system   k8s--w0-k8s-calico--kube--controllers--77d59654f4--pjmtr-eth0   calico-kube-controllers-77d59654f4-pjmtr   k8s-w0   172.16.34.1/32   cali2b966b54fdf   kns.kube-system,ksa.kube-system.calico-kube-controllers
kube-system   k8s--w0-k8s-coredns--55cb58b774--5ttdh-eth0                     coredns-55cb58b774-5ttdh                   k8s-w0   172.16.34.3/32   cali8aed9290dbd   kns.kube-system,ksa.kube-system.coredns
kube-system   k8s--w0-k8s-coredns--55cb58b774--7x77t-eth0                     coredns-55cb58b774-7x77t                   k8s-w0   172.16.34.2/32   calic153b0d7173   kns.kube-system,ksa.kube-system.coredns

(|kubernetes-admin@kubernetes:N/A) root@k8s-m:~# kubectl get pod -n kube-system -o wide | grep 172
calico-kube-controllers-77d59654f4-pjmtr   1/1     Running   0          78m   172.16.34.1      k8s-w0   <none>           <none>
coredns-55cb58b774-5ttdh                   1/1     Running   0          85m   172.16.34.3      k8s-w0   <none>           <none>
coredns-55cb58b774-7x77t                   1/1     Running   0          85m   172.16.34.2      k8s-w0   <none>           <none>

Node에서 Calico 프로세스 확인해보기

Node에 calico-node를 구성하는 프로세스가 떠 있는 것을 확인할 수 있다.

(|kubernetes-admin@kubernetes:N/A) root@k8s-m:~# ps axf
...
   4063 ?        Ss     0:00  \_ /usr/local/bin/runsvdir -P /etc/service/enabled
   4137 ?        Ss     0:00      \_ runsv node-status-reporter
   4159 ?        Sl     0:00      |   \_ calico-node -status-reporter
   4138 ?        Ss     0:00      \_ runsv bird6
   4339 ?        S      0:00      |   \_ bird6 -R -s /var/run/calico/bird6.ctl -d -c /etc/calico/confd/config/bird6.cfg
   4139 ?        Ss     0:00      \_ runsv bird
   4340 ?        S      0:00      |   \_ bird -R -s /var/run/calico/bird.ctl -d -c /etc/calico/confd/config/bird.cfg
   4140 ?        Ss     0:00      \_ runsv felix
   4145 ?        Sl     0:50      |   \_ calico-node -felix
   4141 ?        Ss     0:00      \_ runsv cni
   4149 ?        Sl     0:00      |   \_ calico-node -monitor-token
   4142 ?        Ss     0:00      \_ runsv confd
   4150 ?        Sl     0:00      |   \_ calico-node -confd
   4143 ?        Ss     0:00      \_ runsv monitor-addresses
   4146 ?        Sl     0:00      |   \_ calico-node -monitor-addresses
   4144 ?        Ss     0:00      \_ runsv allocate-tunnel-addrs
   4151 ?        Sl     0:00          \_ calico-node -allocate-tunnel-addrs

felix

felix는 bird를 통해 얻은 정보를 기반으로 iptables를 업데이트 한다.
Pod를 하나 추가해보면서 iptables룰 추가를 모니터링해보면, Pod에 연결된 cali interface와 관련된 iptables rule이 추가되는 것을 확인할 수 있다.

# pod 추가 이전
root@k8s-w0:~# iptables -t filter -S | grep cali | wc -l
117
root@k8s-w0:~# iptables -t nat -S | grep cali | wc -l
15

# pod 추가 이후
root@k8s-w0:~# iptables -t filter -S | grep cali | wc -l
147
root@k8s-w0:~# iptables -t nat -S | grep cali | wc -l
15

# pod wep 확인
(|kubernetes-admin@kubernetes:N/A) root@k8s-m:~# calicoctl get wep -A
NAMESPACE     WORKLOAD                                   NODE     NETWORKS          INTERFACE
default       pod1                                       k8s-w1   172.16.158.1/32   calice0906292e2
default       pod2                                       k8s-w0   172.16.34.4/32    calibd2348b4f67
kube-system   calico-kube-controllers-77d59654f4-pjmtr   k8s-w0   172.16.34.1/32    cali2b966b54fdf
kube-system   coredns-55cb58b774-5ttdh                   k8s-w0   172.16.34.3/32    cali8aed9290dbd
kube-system   coredns-55cb58b774-7x77t                   k8s-w0   172.16.34.2/32    calic153b0d7173

# 추가된 pod iptables rule 확인
root@k8s-w0:~# iptables -v --numeric --table filter --list cali-tw-calibd2348b4f67
Chain cali-tw-calibd2348b4f67 (1 references)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* cali:XbY6-cDccVq4BXbw */ ctstate RELATED,ESTABLISHED
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* cali:N4hE4yZtnqCjJbJL */ ctstate INVALID
    0     0 MARK       all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* cali:9XJDTASzmA98NbgL */ MARK and 0xfffcffff
    0     0 cali-pri-kns.default  all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* cali:B21wAo2MmHxTE20i */
    0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* cali:z0vNGDZb9fZZTnBN */ /* Return if profile accepted */
    0     0 cali-pri-ksa.default.default  all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* cali:Xs37buFlu3zcQDO1 */
    0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* cali:TQSFKOw4Wln6EBF3 */ /* Return if profile accepted */
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* cali:GlPBajbc7Ht3AzxB */ /* Drop if no profiles matched */

bird

calico-node에 직접 접속하여 bird 라우팅 정보를 확인해본다.

(|kubernetes-admin@kubernetes:N/A) root@k8s-m:~# kubectl get pod -n kube-system -l k8s-app=calico-node -o name
pod/calico-node-7fbzp
pod/calico-node-klzj6
pod/calico-node-wbx5r
pod/calico-node-x7j6w

(|kubernetes-admin@kubernetes:N/A) root@k8s-m:~# kubectl exec -it calico-node-7fbzp -n kube-system -- birdcl
Defaulted container "calico-node" out of: calico-node, upgrade-ipam (init), install-cni (init), mount-bpffs (init)
BIRD v0.3.3+birdv1.6.8 ready.
bird> show route
0.0.0.0/0          via 192.168.10.1 on eth0 [kernel1 06:01:14] * (10)
172.16.184.0/24    via 192.168.10.102 on eth0 [Mesh_192_168_10_102 06:01:15] * (100/0) [i]
172.16.158.5/32    dev cali1f7bbbd982a [kernel1 08:10:55] * (10)
192.168.0.2/32     via 192.168.10.1 on eth0 [kernel1 06:01:14] * (10)
192.168.10.0/24    dev eth0 [direct1 06:01:13] * (240)
192.168.10.1/32    dev eth0 [kernel1 06:01:14] * (10)
172.16.158.0/24    blackhole [static1 06:01:13] * (200)
172.16.158.0/32    dev tunl0 [direct1 06:01:13] * (240)
172.16.116.0/24    via 192.168.10.10 on eth0 [Mesh_192_168_10_10 06:01:15] * (100/0) [i]
172.16.34.0/24     via 192.168.10.1 on eth0 [Mesh_192_168_20_100 06:01:15 from 192.168.20.100] * (100/?) [i]

bird> show protocol
name     proto    table    state  since       info
static1  Static   master   up     06:01:13
kernel1  Kernel   master   up     06:01:13
device1  Device   master   up     06:01:13
direct1  Direct   master   up     06:01:13
Mesh_192_168_10_10 BGP      master   up     08:13:47    Established
Mesh_192_168_20_100 BGP      master   up     06:01:15    Established
Mesh_192_168_10_102 BGP      master   up     06:59:50    Established

bird> show route all
0.0.0.0/0          via 192.168.10.1 on eth0 [kernel1 06:01:14] * (10)
	Type: inherit unicast univ
	Kernel.source: 16
	Kernel.metric: 100
	Kernel.prefsrc: 192.168.10.101
172.16.184.0/24    via 192.168.10.102 on eth0 [Mesh_192_168_10_102 06:01:15] * (100/0) [i]
	Type: BGP unicast univ
	BGP.origin: IGP
	BGP.as_path:
	BGP.next_hop: 192.168.10.102
	BGP.local_pref: 100
...

bird> show status
BIRD v0.3.3+birdv1.6.8
Router ID is 192.168.10.101
Current server time is 2024-09-21 12:57:08
Last reboot on 2024-09-21 06:01:13
Last reconfiguration on 2024-09-21 06:01:13
Daemon is up and running

confd

bird.cfg 파일 설정을 확인해본다.

(|kubernetes-admin@kubernetes:N/A) root@k8s-m:~# crictl ps | grep calico
8d8b4ac833d53       8bbeb9e1ee328       5 hours ago         Running             calico-node               0                   25ce6edc0464c       calico-node-klzj6

(|kubernetes-admin@kubernetes:N/A) root@k8s-m:~# ps -ef | grep bird.cfg
root       48060   47880  0 17:13 ?        00:00:01 bird -R -s /var/run/calico/bird.ctl -d -c /etc/calico/confd/config/bird.cfg
root      134271  134145  0 21:48 pts/1    00:00:00 grep bird.cfg

(|kubernetes-admin@kubernetes:N/A) root@k8s-m:~# find / -name bird.cfg
/run/containerd/io.containerd.runtime.v2.task/k8s.io/8d8b4ac833d5307a3ab2ca69313ce5d4e50a8ef0ac2af1c16de6102075e1de22/rootfs/etc/calico/confd/config/bird.cfg
/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/64/fs/etc/calico/confd/config/bird.cfg


0개의 댓글