DevOps研習社:PaaS平臺集成解決方案——F5實現K8S管理平面的高可用和安全

  關於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的穩定持續交付。

相關文章
相關標籤/搜索