ASM提供了一個kind
為IstioGateway
、apiVersion
為istio.alibabacloud.com/v1beta1
的自訂資源定義CRD(Custom Resource Definition),並提供了相應的Controller。通過監聽該CRD資源變化事件,對應的Controller可以在Kubernetes叢集中同步對應的Service、Deployment以及相關聯的ServiceAccount等。本文介紹ASM網關CRD的配置樣本和欄位說明。
配置樣本
前提條件
新增ASM網關必須建立在命名空間istio-system中,以便擷取相關的配置資訊。在Istio1.6及以上的版本中,部署到其他命名空間,會因為不能擷取相關配置而導致ASM網關無法正常啟動。
樣本一:使用KubeAPI管理入口網關
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在入口網關頁面,單擊使用YAML建立。
在建立頁面,輸入網關的名稱,選擇命名空間為istio-system,配置如下YAML,然後單擊建立。
查看入口網關的服務資訊。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在服務頁面上方,從命名空間下拉式清單中,選擇istio-system。
在服務列表中,單擊目標服務名稱,查看入口網關的服務資訊。
查看入口網關的Pod資訊。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在容器組頁面上方,從命名空間下拉式清單中,選擇istio-system。
在Pod列表中,單擊目標Pod名稱,查看入口網關的Pod資訊。
樣本二:使用KubeAPI管理出口網關
ASM提供出口網關服務,為網格內應用提供統一的流量出口。
登入ASM控制台,在左側導覽列,選擇 。
在網格管理頁面,單擊目標執行個體名稱,然後在左側導覽列,選擇 。
在出口網關頁面,單擊使用YAML建立。
在建立頁面,輸入出口網關的名稱,選擇命名空間為istio-system,配置如下YAML,然後單擊建立。
關於欄位的說明,請參見CRD欄位說明。
查看出口網關的服務資訊。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在服務頁面,從命名空間下拉式清單中選擇istio-system。
在服務列表中,單擊目標服務名稱,查看出口網關的服務資訊。
查看出口網關的Pod資訊。
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在容器組頁面,從命名空間下拉式清單中選擇istio-system。
在Pod列表中,單擊目標Pod名稱,查看出口網關的Pod資訊。
CRD欄位說明
欄位 | 說明 | 預設值 |
metadata.name | 名稱。產生的Kubernetes Service和Deployment名稱為istio-{該值}。 | 無 |
metadata.namespace | 命名空間,產生的Kubernetes Service和Deployment所在的命名空間。 重要 為相容Istio 1.6及以後的版本,該命名空間必須為istio-system。 | istio-system |
clusterIds | 數群組類型。將部署網關的叢集ID,這些叢集隸屬於當前網格執行個體所管理。 | 無 |
env | 數群組類型。網關Pod的環境變數。 | 無 |
externalTrafficPolicy | 表示此服務是否希望將外部流量路由到節點本地或叢集範圍的端點,取值為Cluster或Local。 說明 該欄位僅適用於入口網關。 | Cluster |
ports | 數群組類型。網關Pod定義的連接埠和協議列表。例如:
說明 1.9.7.107之前的版本,protocol屬性欄位未做具體化聲明,您需要統一聲明配置為TCP。 | 無 |
gatewayType | 網關類型,可以指定為ingress或egress。
| ingress |
replicaCount | 副本數。 | 1 |
configVolumes | 網關Pod所使用的ConfigMap掛載卷,例如:
| 無 |
resources | 網關Pod的資源配置。 |
|
secretVolumes | 網關Pod所使用到的Secret掛載卷,例如:
| 無 |
serviceType | 網關的服務類型,取值為LoadBalancer、NodePort或者ClusterIP。出口網關通常設定為ClusterIP。 重要 如果您選擇的資料面叢集是註冊叢集且該欄位為LoadBalancer時,請確保叢集支援LoadBalancer類型的Service,避免ASM網關建立失敗。 | LoadBalancer |
loadBalancerClass | 為網關服務指定loadBalancerClass,僅當serviceType為LoadBalancer類型時有效。該欄位從ASM 1.18版本開始支援。更多資訊,請參見在ASM入口網關中使用網路型負載平衡NLB。 | 無 |
serviceAnnotations | 網關服務的Annotation定義,例如 說明 僅適用於serviceType為LoadBalancer類型的網關,出口網關通常不配置。 | 無 |
serviceLabels | 網關服務的Label定義。 | 無 |
podLabels | 網關Pod的Label定義。 | 無 |
podAnnotations | 網關Pod的Annotation定義。 | 無 |
rollingMaxSurge | 變換過程中運行操作期望副本數的最大Pod數。取值可以為絕對數值或百分數。 | "100%" |
rollingMaxUnavailable | 變換過程中停用最大Pod數。取值為絕對數值或百分數。 | "25%" |
overrides | 當clusterIds指定了2個及以上的叢集時,可以針對特定的叢集指定不同於上述參數定義的配置值,配置值為Map類型。 說明
| 無 |
kernel.enabled | 是否啟用自訂核心參數。 | false |
kernel.parameters | 核心參數設定,當前支援設定以下核心參數:
說明 ASM支援的核心參數修改項可能因宿主機核心版本不同,而出現部分參數不支援的情況。如果出現這種情況,網格Pod可能會報錯。 您可以通過 所有的核心參數值為字串格式,因YAML文法會將純數字解析為數實值型別,您需要使用半形雙引號("")包裹您的值,例如net.core.somaxconn: "65535"。 | 無 |
compression.enabled | 是否啟用入口網關壓縮能力。 說明 compression相關欄位僅適用於入口網關。 | false |
compression.content_type | 需要被壓縮的ContentType列表,例如:
| 無 |
compression.disable_on_etag_header |
| false |
compression.min_content_length | 當ContentLength大於或等於設定的值時,觸發壓縮。 | 30 |
compression.remove_accept_encoding_header |
| false |
compression.gzip | 當前僅支援gzip壓縮格式。若要啟用壓縮,必須填寫該欄位。若所有參數保持預設,也需要填寫空結構,例如 | 無 |
compression.gzip.memory_level | zlib內部的記憶體使用量層級。合法值為1~9。取值越大佔用記憶體越多,同時也會帶來更快的壓縮速度和更好的壓縮品質。 | 5 |
compression.gzip.compression_level | zlib的壓縮層級,合法值如下:
說明 BEST_COMPRESSION是最高壓縮品質;BEST_SPEED是最快壓縮速度。其中:
| DEFAULT_COMPRESSION |
compression.gzip.compression_strategy | zlib的壓縮策略,合法值如下:
說明 DEFAULT_STRATEGY 預設的壓縮策略,使用底層預設的行為,在多數情況下都能產生滿意的壓縮結果。 FILTERED 針對大部分存在重複資料的情境,優先使用過濾層壓縮演算法。對於一些文本資料和人工產生的資料壓縮率較高。 HUFFMAN_ONLY 只使用哈夫曼編碼進行壓縮,不使用其他壓縮演算法。一般用於產生待用資料,產生的壓縮資料可以更快地解壓縮。 RLE 使用連續相同資料壓縮演算法,對於壓縮連續相同的資料非常高效。比如位元影像資料等。 FIXED 使用預定義的編碼樹進行哈夫曼編碼,不根據具體資料動態產生編碼樹。這樣的好處是高速壓縮和解壓縮,但壓縮率一般會比較低。 | DEFAULT_STRATEGY |
compression.gzip.window_bits | zlib視窗大小。合法值為9~15。 | 12 |
compression.gzip.chunk_size | zlib輸出緩衝區大小。 | 4096 |
hostNetwork | 主機網路。
| false |
dnsPolicy | DNS策略。關於dnsPolicy的詳細介紹,請參見DNS for Services and Pods。 | ClusterFirst |
cpu.targetAverageUtilization | 開啟HPA時的CPU目標使用率。取值為1~100。如果超過該值,會增加副本;如果低於該值,會減少副本。 | 無 |
memory.targetAverageUtilization | 開啟HPA時的記憶體目標使用率。取值為1~100。如果超過該值,會增加副本;如果低於該值,會減少副本。 | 無 |
maxReplicas | HPA調節的最大副本數。取值為正整數。 | 無 |
minReplicas | HPA調節的最小副本數。取值為正整數,最小值為1。 | 無 |
nodeSelector | 指定網關Pod所在的節點。在該欄位下,您可以自訂Key和Value的值,樣本如下:
| 無 |
affinity | 通過配置節點親和性來指定網關Pod所在的節點。更多資訊,請參見親和性與反親和性。 | 無 |
tolerations | 和節點Taint配合使用。更多資訊,請參見汙點和容忍度。 | 無 |
導致網關滾動重啟的欄位
以下欄位變更會導致網關滾動重啟,請謹慎操作。
env
ports(ASM執行個體版本為1.16以下會導致網關重啟,1.16及以上不會重啟)
configVolumes
resources
secretVolumes
podLabels
podAnnotations
kernel.enabled
kernel.parameters
hostNetwork
dnsPolicy
nodeSelector(視調度情況而定)
affinity(視調度情況而定)
tolerations(視調度情況而定)