Kiểm tra chế độ proxy mặc định của kube-proxy, thấy nó đang sử dụng iptables. Xem log của kube-proxy xác nhận chế độ iptables:
[root@master231 ~]# kubectl get pods -n kube-system -l k8s-app=kube-proxy
NAME READY STATUS RESTARTS AGE
kube-proxy-2vxh9 1/1 Running 1 (6d21h ago) 6d22h
kube-proxy-65z9n 1/1 Running 1 (6d21h ago) 6d22h
kube-proxy-rmn84 1/1 Running 1 (6d21h ago) 6d22h
[root@master231 ~]# kubectl -n kube-system logs kube-proxy-2vxh9
I0805 07:02:38.581115 1 node.go:163] Successfully retrieved node IP: 10.0.0.231
I0805 07:02:38.581194 1 server_others.go:138] "Detected node IP" address="10.0.0.231"
I0805 07:02:38.584086 1 server_others.go:572] "Unknown proxy mode, assuming iptables proxy" proxyMode=""
I0805 07:02:38.712188 1 server_others.go:206] "Using iptables Proxier"
Nếu khi cài đặt cluster lần đầu không cài module ipvs tương ứng, kube-proxy của K8S mặc định sẽ ở chế độ iptables. Về sau có thể thủ công chuyển sang chế độ ipvs.
Bước 1: Tải module ipvs trên tất cả worker node
apt -y install conntrack ipvsadm
Bước 2: Tạo file cấu hình nạp module ipvs trên tất cả node
mkdir -pv /etc/sysconfig/modules
cat > /etc/sysconfig/modules/ipvs.modules << 'EOF'
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- ip_conntrack
EOF
Bước 3: Nạp module ipvs và kiểm tra trên tất cả node
chmod 755 /etc/sysconfig/modules/ipvs.modules
bash /etc/sysconfig/modules/ipvs.modules
[root@master231~]# lsmod | grep -e ip_vs -e nf_conntrack_ipv4
ip_vs_ftp 16384 0
nf_nat 49152 4 xt_nat,nft_chain_nat,xt_MASQUERADE,ip_vs_ftp
ip_vs_sed 16384 0
ip_vs_nq 16384 0
ip_vs_fo 16384 0
ip_vs_sh 16384 0
ip_vs_dh 16384 0
ip_vs_lblcr 16384 0
ip_vs_lblc 16384 0
ip_vs_wrr 16384 0
ip_vs_rr 16384 0
ip_vs_wlc 16384 0
ip_vs_lc 16384 0
ip_vs 176128 26 ip_vs_wlc,ip_vs_rr,ip_vs_dh,ip_vs_lblcr,ip_vs_sh,ip_vs_fo,ip_vs_nq,ip_vs_lblc,ip_vs_wrr,ip_vs_lc,ip_vs_sed,ip_vs_ftp
nf_conntrack 172032 6 xt_conntrack,nf_nat,xt_nat,nf_conntrack_netlink,xt_MASQUERADE,ip_vs
nf_defrag_ipv6 24576 2 nf_conntrack,ip_vs
libcrc32c 16384 6 nf_conntrack,nf_nat,btrfs,nf_tables,raid456,ip_vs
Bước 4: Trên master node - sửa đổi chế độ làm việc của kube-proxy thành ipvs
Hoặc có thể dùng: kubectl edit configmap kube-proxy -n kube-system và sửa dòng cuối thành chế độ ipvs.
kubectl get configmap kube-proxy -n kube-system -o yaml \
| sed -e 's/mode: ""/mode: "ipvs"/' \
| kubectl apply -f - -n kube-system
Bước 5: Đặt strictARP thành true cho kube-proxy
kubectl get configmap kube-proxy -n kube-system -o yaml | sed -e "s/strictARP: false/strictARP: true/" | kubectl apply -f - -n kube-system
Bước 6: Xác nhận configmap đã được sửa đổi thành công
[root@master231 ~]# kubectl -n kube-system describe cm kube-proxy | egrep "mode|strictARP"
strictARP: true
mode: "ipvs"
Bước 7: Trên master node - xóa pod kube-proxy cũ để tạo pod mới có hiệu lực
Cách thực hiện:
kubectl get pods -n kube-system -l k8s-app=kube-proxy -o jsonpath="{.items[*].metadata.name}" | xargs kubectl -n kube-system delete pods
Bước 8: Kiểm tra chế độ làm việc của kube-proxy đã thay đổi
Khi thấy từ khóa "ipvs" trong log, chế độ làm việc của kube-proxy đã chuyển thành IPVS.
[root@master231~]# kubectl get pods -n kube-system -l k8s-app=kube-proxy
NAME READY STATUS RESTARTS AGE
kube-proxy-bf45l 1/1 Running 0 54s
kube-proxy-f6nkh 1/1 Running 0 54s
kube-proxy-qc2vc 1/1 Running 0 55s
[root@master231~]# kubectl -n kube-system logs kube-proxy-bf45l
I1126 15:06:04.741381 1 node.go:163] Successfully retrieved node IP: 10.0.0.232
I1126 15:06:04.741471 1 server_others.go:138] "Detected node IP" address="10.0.0.232"
I1126 15:06:04.767962 1 server_others.go:269] "Using ipvs Proxier"
I1126 15:06:04.767995 1 server_others.go:271] "Creating dualStackProxier for ipvs"
I1126 15:06:04.768009 1 server_others.go:502] "Detect-local-mode set to ClusterCIDR, but no IPv6 cluster CIDR defined, defaulting to no-op detect-local for IPv6"
I1126 15:06:04.769240 1 proxier.go:435] "IPVS scheduler not specified, use rr by default"
I1126 15:06:04.769551 1 proxier.go:435] "IPVS scheduler not specified, use rr by default"
[root@master231~]# ipvsadm -ln | grep 10.200.0.10 -A 2
TCP 10.200.0.10:53 rr
-> 10.100.0.16:53 Masq 1 0 0
-> 10.100.0.17:53 Masq 1 0 0
TCP 10.200.0.10:9153 rr
-> 10.100.0.16:9153 Masq 1 0 0
-> 10.100.0.17:9153 Masq 1 0 0
--
UDP 10.200.0.10:53 rr
-> 10.100.0.16:53 Masq 1 0 0
-> 10.100.0.17:53 Masq 1 0 0