You need to enable JavaScript to run this app.
导航
通过 kubectl 创建 APIG Ingress
最近更新时间:2024.08.14 17:08:58首次发布时间:2024.08.14 17:08:58

APIG Ingress 基于火山引擎 API 网关(API Gateway,APIG) 提供托管的云原生网关功能,实现高可用、高扩展的 Ingress 流量管理方式。本文主要介绍通过 YAML 文件创建 APIGInstance,并配置 APIG Ingress 的相关操作。

使用限制

  • 请勿擅自在 APIG 控制台上更改通过创建 APIG Ingress 维护的 APIG 实例,否则将造成集群中的 Ingress 服务异常,须自行承担责任。
  • 若在 APIG 控制台上修改 APIG Ingress 指定或维护的资源和配置,可能存在配置被覆盖的风险。
  • 使用 APIG 产品,会产生资源使用费用。详情请参见 APIG 产品计费

前提条件

  • 已开通 API 网关服务。若未开通,请登录 API 网关控制台,根据控制台向导提示,开通服务。
  • 已安装 apig-controller 组件,详情请参见 安装组件
  • 已在集群中生成私网 KubeConfig,详情请参见 连接集群
  • (可选)如果需要对接已有 API 网关实例,请确保 API 网关控制台上存在状态为 运行中 的实例。详情请参见 创建实例
  • 如需使用监控功能,需完成以下准备工作:
  • 如需使用日志功能,需完成以下准备工作:

创建 APIGInstance

对接已有 APIG 实例

使用如下 YAML 配置,创建 APIGInstance 并对接已有 APIG 实例。

apiVersion: loadbalancer.vke.volcengine.com/v1beta1
kind: APIGInstance
metadata:
  name: apig-instance-demo # APIGInstance 资源名称
spec:
  id: gcq12c2tfm0mpjrej4*** # 已有 APIG 实例 ID
  ingress:
    enable: true # 是否开启 APIG 路由同步。取值:true(开启)、false(关闭)
    enableAllIngressClasses: false # 是否同步所有的 IngressClasses,取值:true(开启)、false(关闭)
    enableIngressWithoutIngressClass: false # 是否同步未关联 IngressClass 的 Ingress。取值:true(开启)、false(关闭)
    ingressClasses: # 配置路由同步生效的 IngressClasses
      - apig
    enableAllNamespaces: false # 是否同步所有的命名空间中的 Ingress,取值:true(开启)、false(关闭)
    watchNamespaces: # 配置路由同步生效的命名空间
      - doc-demo
      - default

spec字段中的详细参数说明如下所示。

字段类型是否必选描述取值示例是否支持修改
idString指定已存在的 APIG 实例 ID。gcq12c2tfm0mpjrej4***

ingress.enable

Boolean

是否开启 Ingress 路由同步。开启后,只有在同步范围之内的 Ingress 才会同步到 APIG,取值:

  • true:(默认)开启 Ingress 路由同步。
  • false:关闭 Ingreess 路由同步。

true

ingress.enableAllIngressClasses

Boolean

是否同步所有的 IngressClasses。取值:

  • true:同步所有的 IngressClasses。
  • false:(默认)仅同步指定的 IngressClasses。

true

ingress.enableIngressWithoutIngressClass

Boolean

是否同步未关联 IngressClass 的 Ingress。取值:

  • true:同步未关联 IngressClass 的 Ingress。
  • false:(默认)不同步未关联 IngressClass 的 Ingress。

true

ingress.ingressClasses

String

配置路由同步生效的 IngressClass,支持填写多个值,不填则不同步。

说明

enableAllIngressClassesfalse时,需要使用该参数指定路由同步 ingress 所属的 IngressClass,否则不会同步。

apig

ingress.enableAllNamespaces

Boolean

是否同步所有的命名空间。取值:

  • true:同步所有的命名空间。
  • false:(默认)仅同步指定的命名空间。

true

ingress.watchNamespaces

String

配置路由同步生效的命名空间,支持填写多个值,不填则不同步。

说明

enableAllNamespacesfalse时,需要使用该参数指定路由同步生效的命名空间,否则不会同步。

default

新建 APIG 实例

使用如下 YAML 配置,创建 APIGInstance 并同时创建新的 APIG 实例。

apiVersion: loadbalancer.vke.volcengine.com/v1beta1
kind: APIGInstance
metadata:
  name: apig-instance-demo # APIGInstance 资源名称
spec:
  name: apig-demo # APIG 实例名称
  common:
    resource:
      replicas: 2 # APIG 节点数量
      instanceSpecCode: 1c2g # APIG 实例规格,取值:1c2g、2c4g、4c8g 和 8c16g
      clbSpecCode: medium_1 # APIG 使用的 CLB 规格,取值:small_1、small_2、medium_1、meidum_2、large_1 和 large_2
      publicNetworkBillingType: traffic # 公网 EIP 计费类型,取值:traffic(按量计费)和 bandwidth(按带宽计费)
      publicNetworkBandwidth: 100 # 公网 EIP 带宽峰值,当 publicNetworkBillingType 取值为 bandwidth 时需要配置,取值范围 1~500
    network:
      subnetIds: # APIG 实例的 VPC 子网,不填写则使用集群所在的子网
        - subnet-22j0hss***
        - subnet-31x0qss***
  ingress:
    enable: true # 是否开启 APIG 路由同步。取值:true(开启)、false(关闭)
    enableAllIngressClasses: false # 是否同步所有的 IngressClasses,取值:true(开启)、false(关闭)
    enableIngressWithoutIngressClass: false # 是否同步未关联 IngressClass 的 Ingress。取值:true(开启)、false(关闭)
    ingressClasses: # 配置路由同步生效的 IngressClasses
      - apig
    enableAllNamespaces: false # 是否同步所有的命名空间中的 Ingress,取值:true(开启)、false(关闭)
    watchNamespaces: # 配置路由同步生效的命名空间
      - doc-demo
      - default
  monitor: 
    enable: true # 是否开启 APIG 监控。取值:true(开启)、false(关闭)
    workspaceId: e963bbaa-*** # 配置托管 Prometheus 工作区 ID
  log:
    enable: true # 是否开启 APIG 实例日志。取值:true(开启)、false(关闭)
    projectId: f0abf4c1-*** # 日志服务项目 ID
    topicId: a95db607-*** # 日志服务主题 ID

spec字段中的详细参数说明如下所示。

字段类型是否必选描述取值示例是否支持修改
nameString配置 APIG 实例名称。apig-demo

common.resource.replicas

Integer

配置 APIG 实例数,默认值为 2。

说明

为了保证 APIG 实例的高可用,至少选择 2 实例。

2

common.resource.instanceSpecCode

String

配置 APIG 实例规格,取值:

  • 1c2g
  • 2c4g
  • 4c8g(默认值)
  • 8c16g

2c4g

common.resource.clbSpecCodeString配置 APIG 实例使用 CLB 的规格。取值:small_1、small_2、medium_1、meidum_2、large_1、large_2 。详情请参见 产品类型与规格medium_1

common.resource.publicNetworkBillingType

String

配置 APIG 实例使用 CLB 的公网 EIP 计费类型。取值:

  • traffic:(默认值)按量计费
  • bandwidth:按带宽计费

traffic

common.resource.publicNetworkBandwidthIntegerpublicNetworkBillingTypebandwidth时,必填。配置 APIG 实例使用 CLB 的公网 EIP 带宽峰值,取值范围 1~500,单位为 Mbps。10

common.network.subnetIds

APIG 实例的 VPC 子网,不填写则使用集群所在的子网。

注意

  • 允许配置多个不同的子网。
  • 多个不同的子网不允许位于同一可用区。

subnet-31x0qss***

ingress.enable

Boolean

是否开启 Ingress 路由同步。开启后,只有在同步范围之内的 Ingress 才会同步到 APIG,取值:

  • true:(默认)开启 Ingress 路由同步。
  • false:关闭 Ingreess 路由同步。

true

ingress.enableAllIngressClasses

Boolean

是否同步所有的 IngressClasses。取值:

  • true:同步所有的 IngressClasses。
  • false:(默认)仅同步指定的 IngressClasses。

true

ingress.enableIngressWithoutIngressClass

Boolean

是否同步未关联 IngressClass 的 Ingress。取值:

  • true:同步未关联 IngressClass 的 Ingress。
  • false:(默认)不同步未关联 IngressClass 的 Ingress。

true

ingress.ingressClasses

String

配置路由同步生效的 IngressClass,支持填写多个值,不填则不同步。

说明

enableAllIngressClassesfalse时,需要使用该参数指定路由同步 ingress 所属的 IngressClass,否则不会同步。

apig

ingress.enableAllNamespaces

Boolean

是否同步所有的命名空间。取值:

  • true:同步所有的命名空间。
  • false:(默认)仅同步指定的命名空间。

true

ingress.watchNamespaces

String

配置路由同步生效的命名空间,支持填写多个值,不填则不同步。

说明

enableAllNamespacesfalse时,需要使用该参数指定路由同步生效的命名空间,否则不会同步。

default

monitor.enable

Boolean

是否开启 APIG 监控功能,取值:

  • true:开启 APIG 监控功能。
  • false:(默认)关闭 APIG 监控功能。

true

monitor.workspaceIdStringmonitor.enabletrue时,必填。配置 APIG 监控使用的托管 Prometheus 工作区 ID。详情请参见 创建工作区e963bbaa***

log.enable

Boolean

是否开启 APIG 日志功能,取值:

  • true:开启 APIG 日志功能。
  • false:(默认)关闭 APIG 日志功能。

true

log.projectIdStringlog.enabletrue时,必填。配置 APIG 日志使用的项目 ID,详情请参见 日志项目f0abf4***
log.topicIdString配置 APIG 日志使用的主题 ID,配置为空表示使用默认主题。详情请参见 日志主题a95db***

查看 APIGInstance 名称和状态

当您在集群中创建 APIGInstance 后,可以使用如下方法确定 APIGInstance 的状态。

  1. 登录 容器服务控制台

  2. 单击左侧导航栏中的 集群

  3. 在集群列表页面,单击目标集群。

  4. 在集群管理页面的左侧导航栏中,选择 工作负载 > 对象浏览器

  5. 在 对象浏览器 页面的 CRD 分类下,单击 apiginstance
    alt

  6. 在 apiginstance 详情页面,查看创建的 APIGInstance 资源名称。
    alt

  7. 单击 操作 栏中的 编辑 Yaml,查看 APIGInstance 资源详情。其中status字段展示了 APIG 实例 ID 和状态信息。
    alt

    status字段中不同的取值含义如下表所示。

    字段类型含义
    idString表示关联的 APIG 实例 ID。

    phase

    String

    表示 APIG 实例状态:

    • Pending:表示关联的 APIG 实例还未调谐完成。
    • Running:表示 APIG 实例对应的配置都已经更新。
    • Configuring:表示 APIG 实例处于调谐中。
    • Deleting:表示 APIG 实例处于删除中。

创建 APIG Ingress

基于域名转发

APIG Ingress 支持将不同的域名访问,转发到不同的后端。示例apig-ingress.yaml代码如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: apig-ingress # 路由规则的名称
  namespace: default  # 路由规则所属的命名空间
  annotations:
    ingress.vke.volcengine.com/apig-instance-name: apig-instance-demo # 指定 APIGInstance 资源名称
spec:
  ingressClassName: apig
  rules:
    - host: first.example.com  # 需要对外提供访问的域名
      http:
        paths:
        - pathType: Prefix # 路径匹配规则,默认为 Prefix(前缀匹配)
          path: / # 请求匹配的路径
          backend:
            service:
              name: service-demo-a # 需要对接的服务名称
              port: 
                number: 80 # 需要对接服务的端口号
    - host: second.example.com  # 需要对外提供访问的域名
      http:
        paths:
        - pathType: Prefix # 路径匹配规则。取值:Exact(精确匹配)、Prefix(前缀匹配)
          path: / # 请求匹配的路径
          backend:
            service:
              name: service-demo-b # 需要对接的服务名称
              port: 
                number: 80 # 需要对接服务的端口号

基于路径转发

APIG Ingress 支持将相同域名、不同路径的访问,转发到不同的后端。示例apig-ingress.yaml代码如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: apig-ingress # 路由规则的名称
  namespace: default  # 路由规则所属的命名空间
  annotations:
    ingress.vke.volcengine.com/apig-instance-name: apig-instance-demo # 指定 APIGInstance 资源名称
spec:
  ingressClassName: apig
  rules:
    - host: example.com  # 需要对外提供访问的域名
      http:
        paths:
        - path: /foo # 请求匹配的路径
          pathType: Prefix # 路径匹配规则,默认为 Prefix(前缀匹配)
          backend:
            service:
              name: service-demo-a # 需要对接的服务名称
              port: 
                number: 80 # 需要对接服务的端口号
        - path: /bar # 请求匹配的路径
          pathType: Prefix # 路径匹配规则,默认为 Prefix(前缀匹配)
          backend:
            service:
              name: service-demo-b # 需要对接的服务名称
              port: 
                number: 80 # 需要对接服务的端口号

配置默认转发规则的后端服务器

示例apig-ingress.yaml代码如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: apig-ingress # 路由规则的名称
  namespace: default  # 路由规则所属的命名空间
  annotations:
    ingress.vke.volcengine.com/apig-instance-name: apig-instance-demo # 指定 APIGInstance 资源名称
spec:
  ingressClassName: apig
  rules:
    - http:
       paths:
       - pathType: Prefix
         path: /
         backend:
           service:
             name: service-demo
             port:
               number: 80