容器網路概念

適用於:Azure Stack HCI 22H2 上的 AKS、Windows Server 上的 AKS

在容器型微服務方法中,應用程式元件必須搭配運作以處理其工作。 Kubernetes 提供各種資源,可啟用應用程式通訊,並可讓您在內部或外部連接和公開應用程式。 您可以對應用程式進行負載平衡,以建置具有高可用性的應用程式。

較複雜的應用程式可能需要設定終止 SSL/TLS 的輸入流量或多個元件的路由。 基於安全考量,您可能也需要限制進入 Pod 和節點或其間的網路流量。

本文介紹核心概念,這些概念可在 Arc 所啟用的 AKS 中提供網路功能給您的應用程式:

  • Kubernetes 服務
  • 輸入控制器
  • 網路原則

Kubernetes 服務

為了簡化應用程式工作負載的網路設定,Kubernetes 會使用服務,以邏輯方式將一組 Pod 群組在一起,並提供網路連線。 下列是可用的服務類型:

叢集IP:建立內部IP位址,以在 Kubernetes 叢集內使用。 使用內部專用應用程式的叢集 IP,這類應用程式會在叢集內支援其他工作負載。

此圖顯示 AKS 叢集中的叢集 IP 流量

NodePort:在基礎節點上建立埠對應,可讓應用程式使用節點IP位址和埠直接存取。

此圖顯示 AKS 叢集中的 NodePort 流量

LoadBalancer:建立 Azure 負載平衡器資源、設定外部 IP 位址,並將要求的 Pod 連線到負載平衡器後端集區。 若要允許客戶流量觸達應用程式,可對所需的連接埠建立負載平衡規則。

顯示 AKS-HCI 叢集中 Load Balancer 流量流程的圖表

對於輸入流量的其他控制和路由,您可以使用輸入控制器。

注意

當您部署與另一個目標叢集共用網路的目標叢集時,可能會發生負載平衡器 IP 位址衝突。 如果您在共用相同 AksHciClusterNetwork 物件的目標叢集中部署兩個使用不同連接埠的工作負載,就可能會發生這種情況。 由於在 HA Proxy 內配置 IP 位址和連接埠對應的方式,這可能會導致重複的 IP 位址指派。 如果發生這種情況,在您重新部署工作負載之前,一或兩個工作負載都可能會遇到隨機網路連線問題。 當您重新部署工作負載時,可以使用會導致每個工作負載接收個別服務IP位址的相同埠,也可以在使用不同 AksHciClusterNetwork 物件的目標叢集上重新部署工作負載。

ExternalName:建立特定的 DNS 專案,以方便應用程式存取。 負載平衡器和服務的 IP 位址可以是內部或外部位址,其取決於您的整體網路設定,並可動態指派。 或者,您可以指定要使用的現有靜態 IP 位址。 現有的靜態 IP 位址通常會繫結至 DNS 項目。 由於內部負載平衡器只會指派私人 IP 位址,因此無法從網際網路加以存取。

Azure Stack HCI 上的 Kubernetes 網路基本概念

為了提供對您應用程式的存取能力,或讓應用程式元件能夠彼此通訊,Kubernetes 提供了虛擬網路的抽象層。 Kubernetes 節點會連線至虛擬網路,並且可提供 Pod 的輸入和輸出連線能力。 Kube-proxy 元件會在每個節點上執行,以提供這些網路功能。

在 Kubernetes 中,服務會以邏輯方式將 pod 分組,以允許:

  • 透過單一 IP 位址或 DNS 名稱和特定連接埠來直接存取。
  • 使用多個 pod (裝載相同服務或應用程式) 之間的負載平衡器來散發流量。

Azure Stack HCI 平台也可透過以高可用性的方式,提供「基礎」網路,協助簡化 Azure Stack HCI 叢集上的 AKS 虛擬網路。 當您建立 AKS 叢集時,我們也會建立並設定基礎 HAProxy 負載平衡器資源。 當您在 Kubernetes 叢集中部署應用程式時,系統會針對您的 pod 和 Kubernetes 服務,將 IP 位址設定為此負載平衡器中的端點。

IP 位址資源

為了簡化應用程式工作負載的網路設定,AKS Arc 會將IP位址指派給部署中的下列物件:

  • Kubernetes 叢集 API 伺服器:API 伺服器是公開 Kubernetes API 的 Kubernetes 控制平面元件。 API 伺服器是 Kubernetes 控制平面的前端。 靜態 IP 位址一律會配置給 API 伺服器,不論基礎網路模型為何。
  • Kubernetes 節點 (虛擬機) :Kubernetes 叢集包含一組背景工作計算機、稱為節點,以及裝載容器化應用程式的節點。 除了控制平面節點,每個叢集至少都有一個背景工作節點。 針對 AKS 叢集,Kubernetes 節點會設定為虛擬機。 這些虛擬機器會在 Azure Stack HCI 中建立為高可用性的虛擬機器,如需詳細資訊,請參閱節點網路概念
  • Kubernetes 服務:在 Kubernetes 中, 服務 會以邏輯方式將 Pod IP 位址分組,以允許透過特定埠上的單一 IP 位址或 DNS 名稱進行直接存取。 服務也可以使用負載平衡器來散發流量。 靜態 IP 位址一律會配置給 Kubernetes 服務,不論基礎網路模型為何。
  • HAProxy 負載平衡器HAProxy 是 TCP/HTTP 負載平衡器和 Proxy 伺服器,會將連入要求分散到多個端點。 Azure Stack HCI 部署上 AKS 中的每個工作負載叢集都已部署 HAProxy 負載平衡器,並設定為特製化虛擬機。
  • Microsoft 內部部署雲端服務:這是 Azure Stack HCI 雲端提供者,可讓您建立和管理在內部部署 Azure Stack HCI 叢集或 Windows Server 叢集上裝載 Kubernetes 的虛擬化環境。 網路模型後面接著您的 Azure Stack HCI 或 Windows Server 叢集,會決定 Microsoft 內部部署雲端服務所使用的 IP 位址配置方法。 若要深入瞭解由 Microsoft 內部部署雲端服務所實作的網路概念,請參閱節點網路概念

Kubernetes 網路

在 Azure Stack HCI 上的 AKS 中,您可以部署使用下列其中一個網路模型的叢集:

  • Flannel 重疊網路 - 在部署叢集時通常會建立並設定該網路資源。
  • Project Calico 網路 - 此模型提供額外的網路功能,例如網路原則和流量控制。

這兩種網路實作都使用重疊網路設定模型,提供與資料中心網路其餘部分中斷連線的 IP 位址指派。

若要深入瞭解重疊網路,請參閱簡介:Windows 的 Kubernetes 重疊網路

如需 Calico 網路外掛程式和原則的詳細資訊,請參閱開始使用 Calico 網路原則

比較網路模型

Flannel

Flannel 是專為容器設計的虛擬網路圖層。 Flannel 會建立一個重疊主機網路的平面網路。 所有容器/pod 會在此重疊網路中獲派一個 IP 位址,且透過直接連接彼此的 IP 位址進行通訊。

Calico

Calico 是開放原始碼網路和網路安全性解決方案,適用於容器、虛擬機器和原生主機型工作負載。 Calico 支援多個資料平面,包括:Linux eBPF 資料平面、Linux 網路資料平面,以及 Windows 的 HNS 資料平面。

功能

功能 Flannel Calico
網路原則
IPv6
使用的圖層 L2 (VxLAN) L2 (VxLAN)
在現有或新的虛擬網路中部署叢集
Windows 支援
Pod-Pod 連接
Pod-VM 連接,相同網路中的 VM
Pod-VM 連接,不同網路中的 VM
Kubernetes 服務
透過負載平衡器公開
網路 在相同叢集上具有多個精靈的多種網路 相同叢集上的多種網路
部署 Linux: DaemonSet Linux: DaemonSet
Windows:服務 Windows:服務
命令列 calicoctl

重要

目前預設選項是在重疊網路模式中使用 Calico。 若要啟用 Flannel,請使用 -primaryNetworkPlugin PowerShell 命令的 New-AksHciCluster 參數,並將 指定 flannel 為 值。 部署叢集之後,就無法變更此值,而且同時適用於 Windows 和 Linux 叢集節點。

以下是範例:

New-AksHciCluster -name MyCluster -primaryNetworkPlugin 'flannel'

後續步驟

本文涵蓋 Azure Stack HCI 上 AKS 節點中容器的網路概念。 如需 Azure Stack HCI 上的 AKS 概念詳細資訊,請參閱下列文章: