kubeadm1.20.0+cilium+hubble環境搭建

一、概述

Cilium是一種開源網絡實現方案,與其他網絡方案不同的是,Cilium着重強調了其在網絡安全上的優勢,可以透明的對Kubernetes等容器管理平臺上的應用程序服務之間的網絡連接進行安全防護。

Cilium在設計和實現上,基於Linux的一種新的內核技術eBPF,可以在Linux內部動態插入強大的安全性、可見性和網絡控制邏輯,相應的安全策略可以在不修改應用程序代碼或容器配置的情況下進行應用和更新。

Cilium在其官網上對產品的定位稱爲“API-aware Networking and Security”,因此可以看出,其特性主要包括這三方面:

(1)提供Kubernetes中基本的網絡互連互通的能力,實現容器集羣中包括Pod、Service等在內的基礎網絡連通功能;

(2)依託eBPF,實現Kubernetes中網絡的可觀察性以及基本的網絡隔離、故障排查等安全策略;

(3)依託eBPF,突破傳統主機防火牆僅支持L3、L4微隔離的限制,支持基於API的網絡安全過濾能力。Cilium提供了一種簡單而有效的方法來定義和執行基於容器/Pod身份(Identity Based)的網絡層和應用層(比如HTTP/gRPC/Kafka等)安全策略。

二、架構

Cilium官方給出瞭如下的參考架構[3],Cilium位於容器編排系統和Linux Kernel之間,向上可以通過編排平臺爲容器進行網絡以及相應的安全配置,向下可以通過在Linux內核掛載eBPF程序,來控制容器網絡的轉發行爲以及安全策略執行。

 

簡單的關係描繪

 

三、環境準備

需要注意2個特殊條件

kubernetes >=1.9
linux kernel >= 4.9

 

關於內核升級,請參考鏈接:https://www.cnblogs.com/xiao987334176/p/16273902.html

關於kubernetes安裝,請參考鏈接:https://www.cnblogs.com/xiao987334176/p/16274066.html

 

服務器信息如下:

操作系統:ubuntu-18.04.6-server-amd64

配置:2核3g

ip地址:192.168.1.12

主機名:k8smaster

 

操作系統:ubuntu-18.04.6-server-amd64

配置:2核4g

ip地址:192.168.1.13

主機名:k8snode1

 

四、安裝cilium

這裏選的版本爲:1.7.0

 

注意:這裏要做一下特別提示,在安裝cilium之前,我們要確保沒有其他cni插件,比如:flannel

我發現如果已經存在flannel,然後再安裝cilium,會導致安裝失敗,因爲2個插件有衝突。

 

所以在此之前,先刪除掉flannel

kubectl delete -f kube-flannel.yml

 

打開谷歌瀏覽器,下載yaml文件

https://raw.githubusercontent.com/cilium/cilium/v1.7/install/kubernetes/quick-install.yaml

默認下載的是txt文件,需要手動改成yaml文件。

 

將yaml文件上傳到服務器,然後在master執行

kubectl apply -f quick-install.yaml

 

等待幾分鐘,查看pod狀態

# kubectl get pods -A|grep cilium
kube-system   cilium-8bkqp                        1/1     Running   0          161m
kube-system   cilium-kfqnk                        1/1     Running   0          162m
kube-system   cilium-operator-746766746f-xtsr4    1/1     Running   0          162m

 

查看ip地址,注意,會多出4塊網卡

# ifconfig 
cilium_host: flags=4291<UP,BROADCAST,RUNNING,NOARP,MULTICAST>  mtu 1500
        inet 10.222.0.209  netmask 255.255.255.255  broadcast 0.0.0.0
        inet6 fe80::c4b6:27ff:fe03:c42d  prefixlen 64  scopeid 0x20<link>
        ether c6:b6:27:03:c4:2d  txqueuelen 1000  (Ethernet)
        RX packets 1065  bytes 80847 (80.8 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 366  bytes 24032 (24.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

cilium_net: flags=4291<UP,BROADCAST,RUNNING,NOARP,MULTICAST>  mtu 1500
        inet6 fe80::5cd7:4bff:fec8:e267  prefixlen 64  scopeid 0x20<link>
        ether 5e:d7:4b:c8:e2:67  txqueuelen 1000  (Ethernet)
        RX packets 366  bytes 24032 (24.0 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1065  bytes 80847 (80.8 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

cilium_vxlan: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::74d7:7bff:fe3a:1d63  prefixlen 64  scopeid 0x20<link>
        ether 76:d7:7b:3a:1d:63  txqueuelen 1000  (Ethernet)
        RX packets 7132  bytes 4542061 (4.5 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5733  bytes 1282422 (1.2 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:af:83:a0:88  txqueuelen 0  (Ethernet)
        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

enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.12  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 2409:8a1e:af4e:ac10:a00:27ff:fec8:200c  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::a00:27ff:fec8:200c  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:c8:20:0c  txqueuelen 1000  (Ethernet)
        RX packets 121149  bytes 40742391 (40.7 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 104963  bytes 47334122 (47.3 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 2054621  bytes 421532535 (421.5 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2054621  bytes 421532535 (421.5 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lxc00259a3b8fde: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::904c:e8ff:fe8c:425c  prefixlen 64  scopeid 0x20<link>
        ether 92:4c:e8:8c:42:5c  txqueuelen 1000  (Ethernet)
        RX packets 1405  bytes 632795 (632.7 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1319  bytes 146621 (146.6 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lxc_health: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::607a:2ff:fec8:cc10  prefixlen 64  scopeid 0x20<link>
        ether 62:7a:02:c8:cc:10  txqueuelen 1000  (Ethernet)
        RX packets 2108  bytes 170024 (170.0 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2602  bytes 216113 (216.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
View Code

分別是:cilium_host,cilium_net,lxc_health,lxc00259a3b8fde(這個字符串隨機)

說明cilium安裝完成。

 

五、安裝hubble

Hubble 是專門爲網絡可視化設計的,能夠利用 Cilium 提供的 eBPF 數據路徑,獲得對 Kubernetes 應用和服務的網絡流量的深度可見性。這些網絡流量信息可以對接 Hubble CLI、UI 工具,可以通過交互式的方式快速診斷如與 DNS 相關的問題。除了 Hubble 自身的監控工具,還可以對接主流的雲原生監控體系——Prometheus 和 Grafana,實現可擴展的監控策略。

安裝文檔:https://github.com/cilium/hubble/blob/v0.5/Documentation/installation.md

 

使用谷歌瀏覽器,下載yaml文件

https://raw.githubusercontent.com/cilium/hubble/v0.5/tutorials/deploy-hubble-servicemap/hubble-all-minikube.yaml

默認下載的是txt文件,需要手動改成yaml文件。

 

將yaml文件上傳到服務器,由於hubble-ui的svc默認是ClusterIP,使用瀏覽器訪問不方便。這裏手動改成NodePort

修改文文件

vi hubble-all-minikube.yaml

將第132行的ClusterIP改成NodePort

 

然後在master執行

kubectl apply -f hubble-all-minikube.yaml

 

等待幾分鐘,查看pod狀態

# kubectl get pods -A|grep hubble
kube-system   hubble-5q7zd                        1/1     Running   0          174m
kube-system   hubble-q5447                        1/1     Running   0          174m
kube-system   hubble-ui-649d76c898-swqrq          1/1     Running   0          174m

 

查看hubble-ui的svc

# kubectl get svc -A|grep hubble-ui
kube-system   hubble-ui     NodePort    10.1.54.175   <none>        12000:32286/TCP          178m

這裏可以看到nodeport的映射的端口是32286,注意:這個端口是隨機的,以實際情況爲準。

 

訪問hubble-ui

使用http://master ip+32286

效果如下:

 

 這裏我有一個默認的應用flaskapp,先訪問一下flaskapp的頁面,然後再次查看hubble-ui

這裏就會出現一條鏈路

 

 從上圖Hubble的界面,我們可以簡單的看出其部分功能和數據,比如,可以直觀的顯示出網路和服務之間的通信關係,可以查看Flows的多種詳細數據指標,可以查看對應的安全策略情況,可以通過namespace對觀測結果進行過濾等等。

 

本文參考鏈接:

https://blog.csdn.net/M2l0ZgSsVc7r69eFdTj/article/details/107969613

https://blog.csdn.net/saynaihe/article/details/115187298

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章