關於PaaS平臺集成解決方案,做者側重F5與PaaS(K8S爲例)集成的方案,將從管理平面的高可用安全、應用自動發佈、藍綠髮布、可視化4點論述。本文詳細闡述了觀點之一,即管理平面的高可用安全。javascript
晏順
F5解決方案顧問html
擁有十多年運營商和金融行業從業經驗,2012年加入F5。 熟悉運營商核心網和金融信息系統架構,專一於客戶總體架構設計和應用的快速靈捷的交付。主要研究方向爲雲計算,容器及DevOps。涵蓋多雲環境下資源的彈性擴展,應用交付的自動化部署,運維自動化;以及雲環境中安全高可用架構的實現。具備豐富的數據中心架構設計以及自動化平臺對接經驗,完成了多家互聯網金融企業自動化運維平臺的對接上線。java
K8S多個主節點部署旨在以一種沒有單一故障點的方式設置Kubernetes及其支持組件。單個master節點的羣集很容易產生故障,而多master節點羣集使用多個主節點,每一個主節點均可以訪問相同的工做節點。在單個主集羣中,API服務器,控制器管理器等重要組件僅位於單個主節點上,若是失敗,則沒法建立更多服務,pod等。可是,在多master節點環境中,這些重要組件在多個節點上運行,一般生產環境中建議使用三個master節點。若是任何master節點失效,其餘master節點仍能保證羣集正常運行。
多主機的優勢:
在單個master設置中,主節點管理etcd數據庫,API服務器,控制器管理器和調度程序以及工做節點。可是,若是該單個master節點發生故障,則全部工做節點也會發生故障,整個羣集將失效。
相比之下,在多主設置中,多主設備可爲單個羣集提供高可用性並提升網絡性能。
多主機設置可防止各類故障模式,從單個工做節點丟失到主節點的etcd服務故障。經過提供冗餘,多主集羣爲最終用戶提供高可用性系統。node
下面講介紹經過F5的LTM和AWAF模塊實現k8s集羣master節點的高可用和安全防禦。
數據庫
0一、安裝並部署k8s。配置和部署過程再也不贅述,你們可參考kubernetes官網步驟。配置完成後經過kubectl cluster-info查看集羣狀態。api
k8s@k8s-node1:~$ kubectl cluster-info
Kubernetes master is running at https://10.1.1.174:6443
KubeDNS is running at https://10.1.1.174:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy安全
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.服務器
0二、配置F5 BIG-IP。該過程包括配置Vlan, self ip以及pool和VS。
網絡部分配置:
[root@k8s:Active:Standalone] dosl7 # tmsh list net vlan management
net vlan management {
fwd-mode l3
if-index 176
interfaces {
1.1 { }
}
tag 4094
}
[root@k8s:Active:Standalone] dosl7 # tmsh list net self management-ip
net self management-ip {
address 10.1.1.176/24
allow-service {
default
}
traffic-group traffic-group-local-only
vlan management}網絡
Pool和VS部分配置:
在Pool中增長了k8s master節點的地址,並增長了健康檢查實時檢測master節點的健康情況。下面例子中使用了簡單的ping探測,在實際生產環境中能夠經過定製化健康檢查模擬發送API請求,確保master節點從服務角度的可用性。增長新的master節點只需對應增長pool member。session
[root@k8s:Active:Standalone] dosl7 # tmsh list ltm pool k8s-master
ltm pool k8s-master {
members {
10.1.1.174:sun-sr-https {
address 10.1.1.174
session monitor-enabled
state up
}
VS層面除了配置了基本的負載功能外還基於安全特性增長了AWAF針對API的防禦策略以及針對master集羣的DDos保護。
[root@k8s:Active:Standalone] dosl7 # tmsh list ltm virtual
ltm virtual k8s-master-vs {
destination 10.1.1.100:sun-sr-https
ip-protocol tcp
mask 255.255.255.255
policies {
asm_auto_l7_policy__k8s-master-vs { }
}
測試過程:
1
基本負載功能
經過F5發佈的VS實現k8s master節點的訪問。使用kubectl命令經過F5 VS查詢集羣狀態,如下命令顯示查詢成功。
k8s@k8s-node1:~$ kubectl -s https://10.1.1.100:6443 get node --insecure-skip-tls-verify=true
NAME STATUS ROLES AGE VERSION
k8s-node1 Ready master 125d v1.13.1
k8s-node2 NotReady <none> 125d v1.13.1
2
kube-hunter安全掃描
kube-hunber是aqua發佈的開源工具,能夠發現Kubernetes集羣中的安全問題。
經過kube-hunber對集羣進行掃描:
Choose one of the options below:
1. Remote scanning (scans one or more specific IPs or DNS names)
2. Subnet scanning (scans subnets on all local network interfaces)
3. IP range scanning (scans a given IP range)
Your choice: 1
Remotes (separated by a ','): 10.1.1.174
~ Started
~ Discovering Open Kubernetes Services...
Report will be available at:
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| https://kube-hunter.aquasec.com/report.html?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0aW1lIjoxNTU2NTAzMjg3Ljc0MjM5OCwiZW1haWwiOiJqLnlhbkBmNS5jb20iLCJyIjoiZTJkYzUyNTkifQ.ezrzL-G57mOr1IqMO1YII0o7Duvzx-H9aGnEq9uwc6Y |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
| Etcd:
| type: open service
| service: Etcd
|_ host: 10.1.1.174:2379
|
| Kubelet API:
| type: open service
| service: Kubelet API
|_ host: 10.1.1.174:10250
|
| API Server:
| type: open service
| service: API Server
|_ host: 10.1.1.174:6443
----------
Nodes
+-------------+------------+
| TYPE | LOCATION |
+-------------+------------+
| Node/Master | 10.1.1.174 |
+-------------+------------+
Detected Services
+-------------+------------------+----------------------+
| SERVICE | LOCATION | DESCRIPTION |
+-------------+------------------+----------------------+
| Kubelet API | 10.1.1.174:10250 | The Kubelet is the |
| | | main component in |
| | | every Node, all pod |
| | | operations goes |
| | | through the kubelet |
+-------------+------------------+----------------------+
| Etcd | 10.1.1.174:2379 | Etcd is a DB that |
| | | stores cluster's |
| | | data, it contains |
| | | configuration and |
| | | current state |
| | | information, and |
| | | might contain |
| | | secrets |
+-------------+------------------+----------------------+
| API Server | 10.1.1.174:6443 | The API server is in |
| | | charge of all |
| | | operations on the |
| | | cluster. |
+-------------+------------------+----------------------+
No vulnerabilities were found
1.13.1版本的master沒有發現安全漏洞。對1.10.2版本進行掃描可發現安全漏洞。
通過F5 VS訪問則能夠屏蔽高風險CVE,告警僅針對與自簽發證書。
3
針對master節點發起SQL注入測試,通過F5 AWAF防禦後,請求被攔截
k8s@k8s-node1:~$ curl -k https://10.1.1.100:6443/api/v1/namespaces/default/services?limit=500' or 1=1 --'
<html><head><title>Request Rejected</title></head><body>The requested URL was rejected. Please consult with your administrator.<br><br>Your support ID is: 2542351585300712947<br><br><a href='javascript:history.back();'>[Go Back]</a></body></html>
BIG-IP圖形界面中能夠看到相應的攔截日誌:
4
經過ab客戶端模擬向api server發起DDoS攻擊,經過F5 VS上開啓的應用層DDoS防禦,能夠對攻擊進行攔截。
ab -n 1000 -c 10 https://10.1.1.100:6443/api/v1/namespaces/default/services?limit=500
Concurrency Level: 10
Time taken for tests: 30.531 seconds
Complete requests: 1000
Failed requests: 806
總之,經過BIG-IP能夠實現k8s集羣高可用,同時能夠從安全防禦角度確保k8s的穩定持續交付。