MseIngressConfig是由MSE Ingress Controller提供的CRD資源,用于管理MSE云原生網關實例的生命周期,配置Ingress監聽選項以及全局配置。本文介紹MseIngressConfig的常見用法,包含如何通過MseIngressConfig創建、復用和刪除MSE云原生網關實例,以及如何配置全局實例級別的IP黑白名單訪問控制、開啟SLS日志和開啟XTrace鏈路追蹤。
背景信息
MSE Ingress Controller負責監聽集群中創建的MseIngressConfig資源,實時動態維護該資源對應的云原生網關實例的生命周期以及該網關與ACK托管版/ACK Serverless/ACS集群的關聯性。
通過關聯ACK托管版/ACK Serverless/ACS集群的API Server,MSE云原生網關的控制面可以獲取Ingress資源的變化,然后動態更新MSE云原生網關的路由規則。收到請求時,MSE云原生網關將匹配Ingress轉發規則轉發請求到后端Service所對應的Pod。
Kubernetes中的Service、Ingress、IngressClass、MseIngressConfig和MSE Ingress Controller存在以下關系:
Service:后端真實服務的抽象,一個Service可以代表多個相同的后端服務。
Ingress:反向代理規則,用來規定HTTP和HTTPS請求應該被轉發到哪個Service上。例如,根據請求中不同的Host和URL路徑,使請求轉發到不同的Service上。
IngressClass:Ingress處理器的描述,用于在K8s集群中聲明一個Ingress處理器實現,關聯該IngressClass的Ingress資源會被該Ingress處理器解析。此外,需要通過IngressClass的Parameter字段關聯一個MseIngressConfig(MSE云原生網關),用于實施被解析的Ingress資源描述的流量管理規則。
MseIngressConfig:由MSE Ingress Controller提供的CRD,用于描述云原生網關實例的基本信息。
MSE Ingress Controller:管理MSE云原生網關實例以及配置的控制平面,本身不是網絡數據平面。負責監聽集群中的MseIngressConfig資源,協調MSE云原生網關實例,以實施Ingress資源描述的流量管理規則。
MSE Ingress Controller工作示意圖。
MseIngressConfig說明
配置說明
MseIngressConfig是由MSE Ingress Controller提供的CRD資源,MSE Ingress Controller使用MseIngressConfig來管理MSE云原生網關實例的生命周期以及全局配置。
一個MseIngressConfig對應一個MSE云原生網關實例。如果您需要使用多個MSE云原生網關實例,需要創建多個MseIngressConfig配置。除復用場景外,刪除MseIngressConfig配置,會級聯刪除對應的MSE云原生網關實例。
以下示例代碼為完整的MseIngressConfig配置。
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
name: test
spec:
name: mse-ingress
common:
pay:
payType: POSTPAY
instance:
spec: 4c8g
replicas: 3
network:
vSwitches:
- "vsw-1"
- "vsw-2"
publicSLBSpec: slb.s2.small
securityGroupType: normal
global:
tls:
enableHardwareAcceleration: true
ipAccessControl:
whitelist:
- 1.1.XX.XX
- 2.2.XX.XX
monitor:
logging:
sls:
reuseProject: "xxx" # 為空,表示使用默認
tracing:
xTrace:
sampleRate: "100"
ingress:
local:
ingressClass: mse
watchNamespace: "" # ""表示所有命名空間中的Ingress資源
參數 | 說明 | 是否可選 | 默認值 |
name | 網關的名稱。 | 可選 | mse-ingress |
common.pay.payType | 付費類型。 目前只支持按量付費。 | 可選 若不配置,系統默認選擇按量付費。 | POSTPAY |
common.instance.spec | 網關實例規格。 可選值:
| 可選 | 4c8g |
common.instance.replicas | 網關實例副本數。 網關實例副本數為0~30個。 | 可選 | 3個 |
common.network.vSwitches | 主備交換機,主在前,備在后。 主備交換機在填寫時至少指定一個,至多兩個;不填則從Controller Pod所在的Node上獲取交換機。 | 可選 | 無 |
common.network.publicSLBSpec | 網關代購的公網SLB規格。 可選值:
| 可選 | slb.s2.small |
common.network.privateSLBSpec | 網關代購的私網SLB規格。 可選值:
| 可選 | slb.s2.small |
common.securityGroupType | 安全組類型。 可選值:
| 可選 | normal |
global.tls.enableHardwareAcceleration | TLS硬件加速開關。 可以大幅提升HTTPS流量的性能。 | 可選 | 開啟 |
global.ipAccessControl.whitelist | 全局IP訪問白名單。 | 可選 | 未配置 |
global.ipAccessControl.blacklist | 全局IP訪問黑名單。 | 可選 | 未配置 |
monitor.logging.sls | SLS日志服務開關。 開啟需要賦予Controller有關SLS的權限。 | 可選 | 關閉 |
monitor.logging.sls.reuseProject | SLS日志服務,投遞訪問日志的目標Project。 可選值:
| 可選 | 配置為空 |
monitor.tracing.xTrace | xTrace鏈路追蹤開關。 | 可選 | 默認關閉,與openTelemetry互斥開啟。 |
monitor.tracing.xTrace.sampleRate | xTrace鏈路追蹤采樣率。 | 可選 | 0 |
monitor.tracing.openTelemetry | openTelemetry鏈路追蹤開關。 | 可選 | 默認關閉,與xTrace互斥開啟。 |
monitor.tracing.openTelemetry.sampleRate | openTelemetry鏈路追蹤采樣率。 | 可選 | 100 |
ingress.local.ingressClass | 云原生網關監聽集群中具體IngressClass下的Ingress資源。 可選值:
說明 該配置的優先級低于用戶通過IngressClass資源關聯MseIngressConfig的方式。 | 可選 | 未配置 |
ingress.local.watchNamespace | 云原生網關監聽集群中哪些命名空間的Ingress資源。 可選值:
| 可選 | 配置為空 |
狀態說明
當您創建MseIngressConfig資源后,可以通過kubectl get mseingressconfig
的方式查看資源的狀態。MseIngressConfig會按照Pending > Running > Listening的狀態依次變化。各狀態說明如下:
Pending:云原生網關正在創建中,需等待3min左右。
Running:云原生網關創建成功,并處于運行狀態。
Listening:云原生處于運行狀態,并監聽集群中Ingress資源。
Failed:云原生網關處于非法狀態,可以查看Status字段中Message來進一步明確原因。
標簽說明
通過MseIngressConfig創建或者復用的MSE云原生網關實例會被打上資源標簽,您可以在MSE網關管理控制臺的基本信息中查看目標網關的標簽信息。
請勿在MSE云原生網關控制臺編輯下表中的標簽,避免對您的網關實例造成影響。
標簽名 | 說明 |
ack.aliyun.com | MSE云原生網關管理的容器服務集群的入口流量。 |
ingress.k8s.alibaba/MseIngressConfig | MSE云原生網關與MseIngressConfig關聯。 |
kubernetes.reused.by.user | MSE云原生網關是否是復用場景。當為復用場景時,刪除與之關聯的MseIngressConfig時,該MSE云原生網關實例不會被刪除。 |
創建MSE云原生網關實例
配置MseIngressConfig。
通過以下是示例代碼,創建一個名為mse-ingress,副本數為3,實例規格為2c4g的MSE云原生網關實例。您可以按需修改MseIngressConfig的其他配置。
apiVersion: mse.alibabacloud.com/v1alpha1 kind: MseIngressConfig metadata: name: test spec: name: mse-ingress common: instance: spec: 2c4g replicas: 3
在容器服務集群中創建IngressClass資源,并關聯MseIngressConfig。
在容器服務集群中創建IngressClass資源,并通過spec.parameters關聯以上的MseIngressConfig配置,完成在容器服務集群中聲明一個Ingress處理器。通過這種方式,集群中關聯該IngressClass的Ingress資源就會被以上MseIngressConfig關聯的MSE云原生網關實例處理并實施。
apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: mse spec: controller: mse.alibabacloud.com/ingress parameters: apiGroup: mse.alibabacloud.com kind: MseIngressConfig name: test
復用已有MSE云原生網關實例
如果您希望復用已有MSE云原生網關實例,在創建MseIngressConfig時通過spec.id
指定MSE云原生網關實例唯一ID (格式為gw-xxx),并通過參數spec.override
來控制是否根據MseIngressConfig覆蓋被復用的MSE云原生網關實例的相關配置。
以下示例代碼,通過MseIngressConfig復用已有MSE云原生網關實例,設置該網關實例關聯容器集群并監聽該容器集群中ingressClass為mse的Ingress資源。
以下配置中
spec.override
設置為false
,表示不覆蓋已有的MSE云原生網關的Ingress監聽選項和全局配置。如果已有的網關實例沒有關聯該容器集群,將會自動設置該網關實例關聯容器集群并設置Ingress監聽選項,監聽該容器集群中ingressClass為spec.ingress.local.ingressClass
值的Ingress資源 (此處設置的mse);如果已有的網關實例已經關聯過該容器集群,則不會覆蓋原有的Ingress監聽選項。如果您希望覆蓋掉已有的MSE云原生網關的Ingress監聽選項和全局配置,請確保MseIngressConfig中網關參數配置 (Ingress監聽選項、硬件加速、全局黑白名單、可觀測)正確之后,再開啟
spec.override
。當這些配置在MseIngressConfig未指定,開啟spec.override
會覆蓋網關原有的參數配置 (Ingress監聽選項、硬件加速、全局黑白名單、可觀測),并可能對您的流量造成影響。
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
name: reuse
spec:
id: gw-xxxx
override: false
ingress:
local:
ingressClass: mse
參數 | 說明 |
spec.id | 復用的目標MSE云原生網關實例ID,格式gw-開頭。 |
spec.override | 是否根據MseIngressConfig配置覆蓋被復用的MSE云原生網關實例的相關配置。
|
刪除MSE云原生網關實例
一個MseIngressConfig對應一個MSE云原生網關實例。除復用場景除外,刪除MseIngressConfig配置,會級聯刪除對應的MSE云原生網關實例。
刪除策略如下表所示。
網關付費類型 | MSE Ingress Controller自動創建 | 復用控制臺已購網關 |
按量付費 | 刪除MseIngressConfig,自動刪除網關實例。 | 刪除MseIngressConfig,保留網關實例。 |
包年包月 | 不涉及。 | 刪除MseIngressConfig,保留網關實例。 |
執行如下命令,刪除MseIngressConfig配置。
kubectl delete mseingressconfig your-config-name
配置全局實例級別的IP訪問控制
配置IP白名單
配置全局實例級別的IP白名單,可以只允許目標源IP訪問MSE Ingress。
以下示例代碼,配置只允許源IP地址為1.1.XX.XX或者網段為2.0.XX.XX訪問MSE Ingress網關實例。
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
name: test
spec:
...
global:
ipAccessControl:
whitelist:
- 1.1.XX.XX
- 2.0.XX.XX/8
...
配置IP黑名單
配置全局實例級別的IP黑名單,可以拒絕目標源IP訪問MSE Ingress。
以下示例代碼,配置拒絕源IP地址為1.1.XX.XX或者網段為2.0.XX.XX訪問MSE Ingress網關實例。
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
name: test
spec:
...
global:
ipAccessControl:
blacklist:
- 1.1.XX.XX
- 2.0.XX.XX/8
...
開啟SLS日志
開啟SLS日志之前,請確保已為MSE Ingress Controller授予SLS相關權限。
如果您的集群是托管版或專有版ACK集群,請參見為ACK專有版集群中的MSE Ingress Controller授權。
如果您的集群是ACK Serverless集群,請參見為ACK Serverless集群中的MSE Ingress Controller授權。
如果您的集群是ACS集群,請參見 為ACS集群中的MSE Ingress Controller授權。
以下示例代碼,配置MSE Ingress網關投遞訪問日志到名為demo
的Project。
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
name: test
spec:
...
monitor:
logging:
sls:
# 為空,表示使用默認
reuseProject: "demo"
...
配置reuseProject字段才能開啟SLS日志服務。如果您希望使用默認Project,可將reuseProject配置為空。
開啟XTrace鏈路追蹤
為網關配置阿里云XTrace鏈路追蹤服務后,可以實現構建端到端的全鏈路追蹤監控體系,方便線上問題快速診斷和定位。
以下示例代碼,配置MSE Ingress網關的XTrace鏈路追蹤,其中采樣率(sampleRate)為100%。
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
name: test
spec:
...
monitor:
tracing:
xTrace:
sampleRate: "100"
...