Service ClusterIP 配置

在 Kubernetes 中,服務是一種抽象的方式,用於公開在一組 Pod 上執行的應用程式。服務可以具有叢集範圍的虛擬 IP 位址(使用 type: ClusterIP 類型的服務)。用戶端可以使用該虛擬 IP 位址進行連線,然後 Kubernetes 會將流量負載平衡到該服務的不同後端 Pod。

服務 ClusterIP 是如何配置的?

當 Kubernetes 需要為服務指派虛擬 IP 位址時,指派方式有兩種

動態
叢集的控制平面會自動從為 type: ClusterIP 服務配置的 IP 範圍內選取可用的 IP 位址。
靜態
您可以從為服務配置的 IP 範圍內,指定您選擇的 IP 位址。

在您的整個叢集中,每個服務 ClusterIP 都必須是唯一的。嘗試建立具有已配置的特定 ClusterIP 的服務將會傳回錯誤。

為什麼您需要保留服務 Cluster IP?

有時您可能希望服務在眾所周知的 IP 位址中執行,以便叢集中的其他元件和使用者可以使用它們。

最好的例子是叢集的 DNS 服務。作為一種軟性慣例,某些 Kubernetes 安裝程式會將服務 IP 範圍中的第 10 個 IP 位址指派給 DNS 服務。假設您使用服務 IP 範圍 10.96.0.0/16 配置了叢集,並且您希望 DNS 服務 IP 為 10.96.0.10,您必須建立如下的服務

apiVersion: v1
kind: Service
metadata:
  labels:
    k8s-app: kube-dns
    kubernetes.io/cluster-service: "true"
    kubernetes.io/name: CoreDNS
  name: kube-dns
  namespace: kube-system
spec:
  clusterIP: 10.96.0.10
  ports:
  - name: dns
    port: 53
    protocol: UDP
    targetPort: 53
  - name: dns-tcp
    port: 53
    protocol: TCP
    targetPort: 53
  selector:
    k8s-app: kube-dns
  type: ClusterIP

但是,正如先前解釋的,IP 位址 10.96.0.10 尚未保留。如果在動態配置之前或與之並行建立其他服務,則它們有可能配置此 IP。因此,您將無法建立 DNS 服務,因為它會因衝突錯誤而失敗。

如何避免服務 ClusterIP 衝突?

在 Kubernetes 中實作的配置策略,用於將 ClusterIP 配置給服務,降低了衝突的風險。

ClusterIP 範圍根據公式 min(max(16, cidrSize / 16), 256) 劃分,描述為永遠不小於 16 或大於 256,並在兩者之間逐步變化

動態 IP 指派預設使用較高的頻帶,一旦耗盡,它將使用較低的範圍。這將允許使用者在較低的頻帶上使用靜態配置,且衝突風險較低。

範例

範例 1

此範例針對服務的 IP 位址使用 IP 位址範圍:10.96.0.0/24(CIDR 表示法)。

範圍大小:28 - 2 = 254
頻帶偏移:min(max(16, 256/16), 256) = min(16, 256) = 16
靜態頻帶起始:10.96.0.1
靜態頻帶結束:10.96.0.16
範圍結束:10.96.0.254

pie showData title 10.96.0.0/24 "Static" : 16 "Dynamic" : 238

範例 2

此範例針對服務的 IP 位址使用 IP 位址範圍:10.96.0.0/20(CIDR 表示法)。

範圍大小:212 - 2 = 4094
頻帶偏移:min(max(16, 4096/16), 256) = min(256, 256) = 256
靜態頻帶起始:10.96.0.1
靜態頻帶結束:10.96.1.0
範圍結束:10.96.15.254

pie showData title 10.96.0.0/20 "Static" : 256 "Dynamic" : 3838

範例 3

此範例針對服務的 IP 位址使用 IP 位址範圍:10.96.0.0/16(CIDR 表示法)。

範圍大小:216 - 2 = 65534
頻帶偏移:min(max(16, 65536/16), 256) = min(4096, 256) = 256
靜態頻帶起始:10.96.0.1
靜態頻帶結束:10.96.1.0
範圍結束:10.96.255.254

pie showData title 10.96.0.0/16 "Static" : 256 "Dynamic" : 65278

下一步

上次修改時間為太平洋標準時間 2024 年 10 月 24 日下午 5:03:Update cluster-ip-allocation.md (e57546d9a1)