MseIngressConfig是由MSE Ingress Controller提供的CRD资源,用于管理MSE云原生网关实例的生命周期,配置Ingress监听选项以及全局配置。本文介绍MseIngressConfig的常见用法,包含如何通过MseIngressConfig创建、复用和删除MSE云原生网关实例,以及如何配置全局实例级别的IP黑白名单访问控制、开启SLS日志和开启可观测链路OpenTelemetry链路追踪。
背景信息
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 | OpenTelemetry链路追踪开关。 | 可选 | 默认关闭,与openTelemetry互斥开启。 |
monitor.tracing.xTrace.sampleRate | OpenTelemetry链路追踪采样率。 | 可选 | 0 |
monitor.tracing.openTelemetry | openTelemetry链路追踪开关。 | 可选 | 默认关闭,与OpenTelemetry互斥开启。 |
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配置为空。
开启OpenTelemetry链路追踪
为网关配置阿里云OpenTelemetry链路追踪服务后,可以实现构建端到端的全链路追踪监控体系,方便线上问题快速诊断和定位。
以下示例代码,配置MSE Ingress网关的OpenTelemetry链路追踪,其中采样率(sampleRate)为100%。
apiVersion: mse.alibabacloud.com/v1alpha1
kind: MseIngressConfig
metadata:
name: test
spec:
...
monitor:
tracing:
xTrace:
sampleRate: "100"
...