在 Kubernetes 中,網路控制平面(Network Control Plane)是一個模塊化的架構,旨在負責網路和其相關的組件。它可以幫助您實現面向服務的網路(Service-Oriented Networking)架構模式,為您的應用程序提供專業級的網路控制。
一、Control-plane的基本組件
Kubernetes的網路控制平面由以下核心組件構成:
- Kube-apiserver:處理 API 對象的主控制平面組件,接收來自client的請求並將其存儲到 etcd 中。
- Kube-controller-manager:是一個守護進程,用於監視 Kubernetes 系統中各種資源對象(如Pod,Service等),並在資源對象狀態變更時觸發動作。它是通過kubernetes API對象中的控制器(controller)配置來控制POD從其期望狀態到其實際狀態的轉換。kube-controller-manager 通過 API Server 和各種雲提供商的 API 與 Kube-apiserver 交互。
- Kube-scheduler :負責 POD 分配到節點的決策。選擇最佳的 Node(節點)部署新的Pod,使得該 Pod 既能夠滿足資源與調度策略的要求,又與其他 Pod 能夠很好地共存。
- Etcd :存放 Kubernetes 系統的主要配置和狀態信息。基於 Raft一致性演算法,確保集群高可用性。在Kubernetes中,主要使用etcd作為分散式key/value存儲系統。
二、Control-plane Endpoint
Control-plane Endpoint是 control-plane 的 IP 地址,客戶端可以通過該地址與 control-plane 交互。Control-plane Endpoint 由以下 3 部分地址組成:API Server地址,kube-scheduler地址以及kube-controller-manager地址。
為了使用 Control-plane Endpoint,需要創建一個 Service,並指定下列參數:
apiVersion: v1 kind: Service metadata: name: kubernetes namespace: default spec: ports: - port: 443 protocol: TCP targetPort: 6443 selector: component: apiserver provider: kubernetes
這樣Control-plane Endpoint的地址就會以 kubernetes.default.svc.cluster.local
的形式暴露出來。
三、Control-plane的高可用性
Control-plane的高可用性可以通過部署多個副本的方式來實現,從而避免出現單點故障。在 Kubernetes 集群中,支持多個 Kubernetes Master 節點進行控制平面組件的高可用性部署。在這種情況下,多個 Master 節點會連接到同一個 etcd 集群來保證高可用性。
以下是一個三個節點的控制面示例:
apiVersion: kubeadm.k8s.io/v1beta2 kind: ClusterConfiguration controlPlaneEndpoint: "kubernetes.example.com:6443" apiServer: certSANs: - "kubernetes.example.com" - "10.96.0.3" - "10.96.0.4" - "10.96.0.5" etcd: external: endpoints: - https://10.10.10.1:2379 - https://10.10.10.2:2379 - https://10.10.10.3:2379 caFile: /etc/kubernetes/pki/etcd/ca.crt certFile: /etc/kubernetes/pki/apiserver-etcd-client.crt keyFile: /etc/kubernetes/pki/apiserver-etcd-client.key
四、Control-plane的安全性
Control-plane 是 Kubernetes 系統的核心,需要特別注意安全性。以下是一些措施來保證 control-plane 的安全性:
- TLS 加密:使用 TLS 對客戶端和組件之間的所有通信進行加密。
- RBAC(Role-Based Access Control):控制平面組件通過 RBAC 對象與 kube-apiserver 進行聯繫和認證,進而限制對 Kubernetes 資產的訪問。
- 靜態 Token 檢查:API Server 每次請求都會檢查 Token ,防止未授權訪問。
實現RBAC訪問控制的方法如下:
kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: name: demo-rolebinding subjects: - kind: User name: demo-user apiGroup: "" roleRef: kind: Role name: demo-role apiGroup: ""
以上是 Kubernetes Control-plane 的核心組件和相關方面的介紹,希望對您有所幫助!
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/277104.html