配置MseIngressConfig

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工作示意图。ingress的应用场景

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

网关实例规格。

可选值:

  • 2c4g

  • 4c8g

  • 8c16g

  • 16c32g

可选

4c8g

common.instance.replicas

网关实例副本数。

网关实例副本数为0~30个。

可选

3个

common.network.vSwitches

主备交换机,主在前,备在后。

主备交换机在填写时至少指定一个,至多两个;不填则从Controller Pod所在的Node上获取交换机。

可选

common.network.publicSLBSpec

网关代购的公网SLB规格。

可选值:

  • slb.s1.small

  • slb.s2.small

  • slb.s2.medium

  • slb.s3.small

  • slb.s3.medium

  • slb.s3.large

可选

slb.s2.small

common.network.privateSLBSpec

网关代购的私网SLB规格。

可选值:

  • slb.s1.small

  • slb.s2.small

  • slb.s2.medium

  • slb.s3.small

  • slb.s3.medium

  • slb.s3.large

可选

slb.s2.small

common.securityGroupType

安全组类型。

可选值:

  • enterprise:企业安全组

  • normal:普通安全组

可选

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。

可选值:

  • 空:表示使用默认Project(新建)。

  • 指定值:表示使用已有的Project。

可选

配置为空

monitor.tracing.xTrace

xTrace链路追踪开关。

可选

关闭

monitor.tracing.xTrace.sampleRate

链路追踪采样率。

可选

0

ingress.local.ingressClass

云原生网关监听集群中具体IngressClass下的Ingress资源。

可选值:

  • 未配置:不监听任何Ingress资源。

  • 配置为mse:监听IngressClass为mse的Ingress资源

  • 配置为空"":监听所有Ingress资源。

  • 配置为nginx:监听IngressClass为nginx或者未关联任何IngressClass的Ingress资源。

  • 配置为其他值:监听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云原生网关实例

  1. 配置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
  2. 在容器服务集群中创建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云原生网关实例的相关配置。

  • 设置为true:覆盖修改网关原有的参数配置 (Ingress监听选项、硬件加速、全局黑白名单、可观测)

  • 设置为false,不会覆盖修改网关原有的参数配置 (Ingress监听选项、硬件加速、全局黑白名单、可观测)。但是如果已有的网关实例没有关联该容器集群,将会自动设置该网关实例关联容器集群并设置Ingress监听选项,监听该容器集群中ingressClass为spec.ingress.local.ingressClass值的Ingress资源。

删除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相关权限。

以下示例代码,配置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"
   ...