APIG Ingress 基于火山引擎 API 网关(API Gateway,APIG) 提供托管的云原生网关功能,实现高可用、高扩展的 Ingress 流量管理方式。本文主要介绍通过 YAML 文件创建 APIGInstance,并配置 APIG Ingress 的相关操作。
使用如下 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
字段中的详细参数说明如下所示。
字段 | 类型 | 是否必选 | 描述 | 取值示例 | 是否支持修改 |
---|---|---|---|---|---|
id | String | 是 | 指定已存在的 APIG 实例 ID。 | gcq12c2tfm0mpjrej4*** | 否 |
ingress.enable | Boolean | 否 | 是否开启 Ingress 路由同步。开启后,只有在同步范围之内的 Ingress 才会同步到 APIG,取值:
| true | 否 |
ingress.enableAllIngressClasses | Boolean | 否 | 是否同步所有的 IngressClasses。取值:
| true | 否 |
ingress.enableIngressWithoutIngressClass | Boolean | 否 | 是否同步未关联 IngressClass 的 Ingress。取值:
| true | 否 |
ingress.ingressClasses | String | 否 | 配置路由同步生效的 IngressClass,支持填写多个值,不填则不同步。 说明 当 | apig | 否 |
ingress.enableAllNamespaces | Boolean | 否 | 是否同步所有的命名空间。取值:
| true | 否 |
ingress.watchNamespaces | String | 否 | 配置路由同步生效的命名空间,支持填写多个值,不填则不同步。 说明 当 | default | 否 |
使用如下 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
字段中的详细参数说明如下所示。
字段 | 类型 | 是否必选 | 描述 | 取值示例 | 是否支持修改 |
---|---|---|---|---|---|
name | String | 是 | 配置 APIG 实例名称。 | apig-demo | 否 |
common.resource.replicas | Integer | 否 | 配置 APIG 实例数,默认值为 2。 说明 为了保证 APIG 实例的高可用,至少选择 2 实例。 | 2 | 否 |
common.resource.instanceSpecCode | String | 否 | 配置 APIG 实例规格,取值:
| 2c4g | 否 |
common.resource.clbSpecCode | String | 否 | 配置 APIG 实例使用 CLB 的规格。取值:small_1、small_2、medium_1、meidum_2、large_1、large_2 。详情请参见 产品类型与规格。 | medium_1 | 否 |
common.resource.publicNetworkBillingType | String | 否 | 配置 APIG 实例使用 CLB 的公网 EIP 计费类型。取值:
| traffic | 否 |
common.resource.publicNetworkBandwidth | Integer | 当publicNetworkBillingType 为bandwidth 时,必填。 | 配置 APIG 实例使用 CLB 的公网 EIP 带宽峰值,取值范围 1~500,单位为 Mbps。 | 10 | 否 |
common.network.subnetIds | 否 | 否 | APIG 实例的 VPC 子网,不填写则使用集群所在的子网。 注意
| subnet-31x0qss*** | 否 |
ingress.enable | Boolean | 否 | 是否开启 Ingress 路由同步。开启后,只有在同步范围之内的 Ingress 才会同步到 APIG,取值:
| true | 否 |
ingress.enableAllIngressClasses | Boolean | 否 | 是否同步所有的 IngressClasses。取值:
| true | 否 |
ingress.enableIngressWithoutIngressClass | Boolean | 否 | 是否同步未关联 IngressClass 的 Ingress。取值:
| true | 否 |
ingress.ingressClasses | String | 否 | 配置路由同步生效的 IngressClass,支持填写多个值,不填则不同步。 说明 当 | apig | 否 |
ingress.enableAllNamespaces | Boolean | 否 | 是否同步所有的命名空间。取值:
| true | 否 |
ingress.watchNamespaces | String | 否 | 配置路由同步生效的命名空间,支持填写多个值,不填则不同步。 说明 当 | default | 否 |
monitor.enable | Boolean | 否 | 是否开启 APIG 监控功能,取值:
| true | 否 |
monitor.workspaceId | String | 当monitor.enable 为true 时,必填。 | 配置 APIG 监控使用的托管 Prometheus 工作区 ID。详情请参见 创建工作区。 | e963bbaa*** | 否 |
log.enable | Boolean | 否 | 是否开启 APIG 日志功能,取值:
| true | 否 |
log.projectId | String | 当log.enable 为true 时,必填。 | 配置 APIG 日志使用的项目 ID,详情请参见 日志项目。 | f0abf4*** | 否 |
log.topicId | String | 否 | 配置 APIG 日志使用的主题 ID,配置为空表示使用默认主题。详情请参见 日志主题。 | a95db*** | 否 |
当您在集群中创建 APIGInstance 后,可以使用如下方法确定 APIGInstance 的状态。
登录 容器服务控制台。
单击左侧导航栏中的 集群。
在集群列表页面,单击目标集群。
在集群管理页面的左侧导航栏中,选择 工作负载 > 对象浏览器。
在 对象浏览器 页面的 CRD 分类下,单击 apiginstance。
在 apiginstance 详情页面,查看创建的 APIGInstance 资源名称。
单击 操作 栏中的 编辑 Yaml,查看 APIGInstance 资源详情。其中status
字段展示了 APIG 实例 ID 和状态信息。
status
字段中不同的取值含义如下表所示。
字段 | 类型 | 含义 |
---|---|---|
id | String | 表示关联的 APIG 实例 ID。 |
phase | String | 表示 APIG 实例状态:
|
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