共用方式為


將 Kubernetes 叢集部署至 Azure Stack Hub 上的自定義虛擬網路

您可以使用自定義虛擬網路上的 Azure Kubernetes Service (AKS) 引擎來部署 Kubernetes 叢集。 本文將探討尋找虛擬網路中所需的資訊。 您可以尋找計算叢集所使用的IP位址、在API模型中設定 vales,以及設定路由表和網路安全組的步驟。

使用 AKS 引擎的 Azure Stack Hub 中的 Kubernetes 叢集會使用 kubenet 網路外掛程式。 Azure Stack Hub 上的 AKS 引擎也支援 Azure CNI 網路外掛程式。

建立自定義虛擬網路時的條件約束

  • 自定義 VNET 必須與 Kubernetes 叢集的其他所有元件位於相同的訂用帳戶中。
  • 控制平面節點集區和代理程序節點集區必須位於相同的虛擬網路中。 您可以將節點部署到相同虛擬網路內的不同子網。
  • Kubernetes 叢集子網必須在自定義虛擬網路IP範圍的空間內使用IP範圍,請參閱 取得IP位址區塊
  • 請考慮節點子網的建議大小取決於所使用的網路外掛程式類型。 一般指導方針是,Azure CNI 需要比 kubenet 支援代理程序節點集區更多的子網 IP 位址。 請參閱下面的 kubenetAzure CNI 範例。
  • 169.254.0.0/16位址空間不能用於 Kubernetes 叢集的自定義 VNET。

建立自定義虛擬網路

您必須在 Azure Stack Hub 實體中擁有自定義虛擬網路。 如需詳細資訊,請參閱快速入門:使用 Azure 入口網站建立虛擬網路

在您的虛擬網路中建立新的子網。 您必須取得子網資源識別碼和IP位址範圍。 當您部署叢集時,您將使用 API 模型中的資源識別碼和範圍。

  1. 在 Azure Stack Hub 實例中開啟 Azure Stack Hub 使用者入口網站。

  2. 選取所有資源

  3. 在搜尋方塊中輸入虛擬網路的名稱。

  4. 選取 [子網>+ 子網 ] 以新增子網。

  5. 使用 CIDR 表示法新增名稱和地址範圍。 選取 [確定]。

  6. 在 [虛擬網络] 刀鋒視窗中選取 [屬性]。 複製資源 識別碼,然後新增 /subnets/<nameofyoursubnect>。 您將使用此值作為叢集 API 模型中金鑰的值 vnetSubnetId 。 子網的資源識別碼會使用下列格式:
    /subscriptions/SUB_ID/resourceGroups/RG_NAME/providers/Microsoft.Network/virtualNetworks/VNET_NAME/subnets/SUBNET_NAME

    虛擬網路資源標識碼

  7. 在 [虛擬網络] 刀鋒視窗中選取 [子網]。 選取子網名稱,例如 control-plane-sn

    請勿 將子網與網路安全組 (NSG) 產生關聯。

    虛擬網路 CIDR 區塊

  8. 在 [子網] 刀鋒視窗中,記下每個子網的位址範圍 (CIDR 區塊)。

選取位址空間的考慮

當您建立自訂虛擬網路時,您可以指定網路的IP位址空間,以及每個子網的IP位址範圍。 當您選擇要在 Kubernetes 叢集中使用的位址空間和範圍時,請考慮下列因素:

  • 重疊的位址空間可能會導致IP位址衝突或通訊錯誤。 若要降低重疊 IP 位址的風險,請選擇新虛擬網路的唯一地址空間。
  • 172.16/12192.168/16 範圍中的10/8位址空間通常用於專用網,而且可能由您現有的數據中心基礎結構使用。 如果您的 Kubernetes 應用程式在資料中心使用資源,請為不同於資料中心地址空間的自定義虛擬網路選擇位址空間,以降低衝突的風險。
  • 建議您針對 Kubernetes 叢集使用專用子網。
  • 如果您想要使用虛擬網路對等互連,請使用多個現有的虛擬網路,請考慮在每個網路上使用不同的位址空間。 重疊的位址空間可能會損害您啟用對等互連的能力。

取得IP位址區塊

AKS 引擎支援在現有的虛擬網路上進行部署。 在現有的虛擬網路上部署時,您的叢集會針對代理程序節點、控制平面節點、叢集服務和容器使用連續位址區塊(Pod)。 每個位址區塊都可以轉譯成虛擬網路內的子網。 叢集部署中的所有位址區塊都必須是整體虛擬網路位址空間的一部分。 選擇虛擬網路位址空間外的位址區塊可能會導致連線問題。

設定 Kubernetes 叢集時,至少需要三個位址區塊:

  • 節點位址區塊:這是用來將位址指派給叢集節點的位址區塊。 這可以是所有叢集節點的單一位址區塊,也可以是控制平面和代理程式集區的個別區塊(子網)。 選取此區塊的位址範圍時,請考慮叢集中的節點計數。 針對 Azure CNI 節點和容器,會從相同的位址區塊取得其位址,因此會考慮在使用 Azure CNI 時選擇地址範圍時要部署到叢集的容器數目。
  • 服務地址區塊:這是部署至 Kubernetes 叢集的服務從中取得其叢集位址的位址區塊。 在選取此區塊的位址範圍時,考慮您想要在叢集中執行的最大服務數目。
  • 叢集位址區塊:這是 Pod 會從中取得其叢集位址的位址區塊。 在選取此區塊的位址範圍時,考慮您想要在叢集中執行的 Pod 數目上限。 如先前所述,針對 Azure CNI,叢集和節點地址區塊都相同。

除了位址區塊之外,對於控制平面節點,您必須再設定兩個值。 您必須知道叢集需要保留的IP位址數目,以及子網IP空間內的第一個連續靜態IP。 當您使用多個控制平面節點時,AKS 引擎需要最多 16 個未使用的 IP 位址範圍。 叢集會針對每個控制平面使用一個IP位址,最多五個控制平面節點。 AKS 引擎還需要下一個 10 個 IP 位址後,前端 IP 位址保留的最後一個控制平面節點。 最後,在控制平面節點和前端保留區之後,負載平衡器會使用另一個IP位址,總共16個。 放置IP位址區塊時,子網需要現有IP位址的下列配置:

  • 前四個IP位址和最後一個IP位址會保留,且無法在任何 Azure 子網中使用。
  • 16 個 IP 位址的緩衝區應該保持開啟狀態。
  • 叢集第一個IP位址的值應該在位址空間的結尾,以避免IP衝突。 可能的話,請將 firstConsecutiveStaticIP 屬性指派給子網中可用IP位址空間結尾附近的IP位址。

例如,針對具有三個控制平面節點的叢集。 如果您使用具有 256 個位址的子網,例如 10.100.0.0/24,您必須在 239 之前設定第一個連續靜態 IP 位址。 下表顯示地址和考慮:

/24 子網的範圍 數字 注意
172.100.0.0 - 172.100.0.3 4 保留於 Azure 子網中。
172.100.0.224-172.100.0.238 14 AKS 引擎所定義叢集的IP位址計數。

3 個控制平面節點的 3 個 IP 位址
10 個前端 IP 位址
負載平衡器的 1 個 IP 位址
172.100.0.238 - 172.100.0.254 16 16 個 IP 位址緩衝區。
172.100.0.255 1 保留於 Azure 子網中。

在這裡範例中,則 firstConsecutiveStaticIP 屬性會是 172.100.0.224

對於較大的子網,例如 /16 具有超過 60 千個位址的 /16,您可能會發現將靜態 IP 指派設定為網路空間結尾可能很實用。 將叢集靜態 IP 位址範圍設定為遠離 IP 空間中的前 24 個位址,讓叢集在宣告位址時具有復原性。

Kubenet 位址區塊範例

在下列範例中,您可以看到這些各種考慮如何填入虛擬網路中的位址空間,以針對叢集使用 kubenet 網路外掛程式搭配控制平面節點的專用子網,以及具有每個集區三個節點的代理程式節點集區。

VNET 位址空間:10.100.0.0/16。

位址區塊 (子網) CIDR IP 範圍 IP 計數 (可用)
控制平面節點區塊 10.100.0.0/24 10.100.0.0 - 10.100.0.255 255 - 4 保留 = 251
代理程式節點區塊 10.100.1.0/24 10.100.1.0 - 10.100.1.255 255 - 4 保留 = 251
服務區塊 10.100.16.0/20 10.100.16.0 - 10.100.31.255 4,096 - 5 保留 = 4,091
叢集區塊 10.100.128.0/17 10.100.128.0 - 10.100.255.255 32,768 - 5 保留 = 32,763

在這裡範例中 firstConsecutiveStaticIP ,屬性會是 10.100.0.239

Azure CNI 位址區塊範例

在下列範例中,您可以看到這些各種考慮如何填入虛擬網路中的位址空間,以使用 Azure CNI 網路外掛程式搭配控制平面專用子網,以及具有每個集區三個節點的代理程式節點集區。

VNET 位址空間:172.24.0.0/16。

注意

在您的環境中,如果公用IP範圍在CIDR10.0.0.0/8內,請使用 kubenet 作為網路外掛程式。

位址區塊 (子網) CIDR IP 範圍 IP 計數 (可用)
控制平面節點區塊 172.24.0.0/24 172.24.0.0 - 172.24.0.255 255 - 4 保留 = 251
代理程序節點和叢集區塊 172.24.128.0/17 172.24.128.0 - 172.24.255.255 32,768 - 5 保留 = 32,763
服務區塊 172.24.16.0/20 172.24.16.0 - 172.24.31.255 4,096 - 5 保留 = 4,091

在這裡範例中 firstConsecutiveStaticIP ,屬性會是 172.24.0.239

更新 API 模型

更新用來將叢集從 AKS 引擎部署至自定義虛擬網路的 API 模型。

masterProfile 中設定下列值:

欄位 範例 描述
vnetSubnetId /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/control-plane-sn 指定子網的 Azure Resource Manager 路徑識別碼。 此值會對應至上述控制平面節點位址區塊。
firstConsecutiveStaticIP 10.100.0.239 將IP位址指派給組 firstConsecutiveStaticIP 態屬性,該IP位址接近 所需子網中可用IP位址空間的結尾firstConsecutiveStaticIP 僅適用於控制平面節點集區。

agentPoolProfiles 中,設定下列值:

欄位 範例 描述
vnetSubnetId /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/agents-sn 指定子網的 Azure Resource Manager 路徑識別碼。 此值會對應至上述代理程式節點位址區塊。

在 orchestratorProfile,尋找 kubernetesConfig 並設定下列值:

欄位 範例 描述
clusterSubnet 10.100.128.0/17 用於配置 Pod 網路介面 IP 位址的 IP 子網。 此值會對應至上述叢集位址區塊。 子網必須位於 VNET 位址空間中。 啟用 Azure CNI 後,預設值為 10.240.0.0/12。 如果沒有 Azure CNI,預設值為 10.244.0.0/16。 請改用 /16,而不是 /24 子網。 如果您使用 /24,此子網只會指派給一個節點。 其他節點將不會獲指派 POD 網路,因為您將用盡IP空間,因此它們不會在叢集中就緒。
serviceCidr 10.100.16.0/20 用於配置叢集中所部署服務的IP位址IP子網。 此值會對應至上述叢集服務區塊。
dnsServiceIP 10.100.16.10 要指派給叢集 DNS 服務的IP位址。 地址必須來自 serviceCidr 子網。 指定 serviceCidr 時,必須設定此值。 預設值是 serviceCidr 子網的 .10 位址。

例如,如果使用 kubenet:
使用 的網路位址空間 10.100.0.0/16control-plane-sn 其中 子網為 10.100.0.0/24agents-sn10.100.1.0/24

"masterProfile": {
  ...
  "vnetSubnetId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/control-plane-sn",
  "firstConsecutiveStaticIP": "10.100.0.239",
  ...
},
...
"agentPoolProfiles": [
  {
    ...
    "vnetSubnetId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/agents-sn",
    ...
  },
    ...
"kubernetesConfig": [
  {
    ...
    "clusterSubnet": "10.100.128.0/17",
    "serviceCidr": "10.100.16.0/20",
    "dnsServiceIP" : "10.100.16.10",

    ...
  },

例如,如果使用 Azure CNI:
使用 的網路位址空間 172.24.0.0/16control-plane-sn 其中 子網為 172.24.0.0/24k8s-sn172.24.128.0/17

"masterProfile": {
  ...
  "vnetSubnetId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/control-plane-sn",
  "firstConsecutiveStaticIP": "172.24.0.239",
  ...
},
...
"agentPoolProfiles": [
  {
    ...
    "vnetSubnetId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/k8s-sn",
    ...
  },
    ...
"kubernetesConfig": [
  {
    ...
    "clusterSubnet": "172.24.128.0/17",
    "serviceCidr": "172.24.16.0/20",
    "dnsServiceIP" : "172.24.16.10",
    ...
  },

部署叢集

將值新增至 API 模型之後,您可以使用 AKS 引擎中的 命令,從用戶端電腦 deploy 部署叢集。 如需指示,請參閱 部署 Kubernetes 叢集

設定路由表

如果您使用 kubenet,例如 :networkPluginkubenet在 API 模型組態物件中kubernetesConfig。 部署叢集之後,請在 Azure Stack 使用者入口網站中返回虛擬網路。 在 [子網] 刀鋒視窗中設定路由表和網路安全組 (NSG)。 成功將叢集部署到自定義虛擬網路之後,請從 叢集資源群組中的 [網络 ] 刀鋒視窗取得路由表資源的標識符。

  1. 在 Azure Stack Hub 實例中開啟 Azure Stack Hub 使用者入口網站。

  2. 選取所有資源

  3. 在搜尋方塊中輸入虛擬網路的名稱。

  4. 選取 [子網 ],然後選取包含叢集的子網名稱。

    路由表和網路安全組

  5. 選取 [路由表 ],然後選取叢集的路由表。

  6. 請確定這會針對 API 模型中指定的每個子網完成,包括 masterProfile 子網。

注意

Kubernetes Windows 叢集的自定義虛擬網路有 已知問題

下一步