You need to enable JavaScript to run this app.
导航
使用 APIG Ingress 实现业务发布
最近更新时间:2024.08.14 17:08:58首次发布时间:2024.08.14 17:08:58

APIG Ingress 基于火山引擎 API 网关(API Gateway,APIG) 提供托管的云原生网关功能,实现高可用、高扩展的 Ingress 流量管理方式。本文主要介绍使用 APIG Ingress 实现业务发布的操作方法和注意事项。

使用限制

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

前提条件

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

操作步骤

步骤一:创建 APIGInstance

  1. 登录 容器服务控制台
  2. 单击左侧导航栏中的 集群
  3. 在集群列表页面,单击目标集群。
  4. 在左侧导航栏中,选择 工作负载 > 对象浏览器。 单击 使用 Yaml 创建,创建路由规则。指定外部域名和服务的映射关系。
    • 在 类型 下拉菜单中选择 自定义
    • 在 Yaml 配置框内输入 Yaml 配置。
apiVersion: loadbalancer.vke.volcengine.com/v1beta1
kind: APIGInstance
metadata:
  name: apig-instance-demo # APIGInstance 资源名称
spec:
  id: gcqplplr8a*** # 已有 APIG 实例 ID
  ingress:
    enable: true # 开启 APIG 路由同步
    enableAllIngressClasses: false
    enableIngressWithoutIngressClass: false
    ingressClasses: # 配置路由同步生效的 IngressClasses
      - apig
    enableAllNamespaces: true # 同步所有的命名空间中的 Ingress

说明

本例中使用已有的 APIG 实例对接 APIGInstance,采用了最简单的配置方式。更多配置详情,请参见 通过 kubectl 创建 APIG Ingress

  1. 创建完成后,在 对象浏览器 页面,单击 apiginstance,进入详情页面,查看创建的 APIGInstance 资源。

步骤二:部署应用和服务

  1. 创建工作负载的 YAML 文件。示例文件deployment-demo.yaml代码如下:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-demo # 无状态负载名称
  namespace: default # 无状态负载所在的命名空间
spec: 
  replicas: 1 # 无状态负载的副本数
  selector: 
    matchLabels: 
      app: nginx
  template: 
    metadata: 
      labels: 
        app: nginx
    spec:
      containers:
      - name: nginx # 容器名称
        image: doc-cn-beijing.cr.volces.com/vke/nginx-demo:v1.0 # 应用镜像的地址和版本,请配置为您自己的镜像地址
        ports:
        - containerPort: 80 # 容器开放的端口号
  1. 执行以下命令,创建工作负载。
kubectl apply -f deployment-demo.yaml
  1. 创建服务的 YAML 文件。示例文件deployment-demo.yaml代码如下:
apiVersion: v1
kind: Service
metadata:
  name: service-demo # 服务名称
spec:
  selector:
    app: nginx # 通过标签选择器将服务与后段容器组(Pod)绑定。
  ports:
  - name: rule # 端口映射规则名称
    protocol: TCP # 服务协议,支持 TCP 或 UDP
    port: 80 # 服务端口
    nodePort: 30000 # 节点端口,取值范围为 30000~32767。
    targetPort: 80 # 容器端口,即工作负载对外提供服务的端口号或端口名称,例如:Nginx 开放的默认端口号为 80
  type: NodePort # 服务的类型
  1. 执行以下命令,创建服务。
kubectl apply -f service-demo.yaml

步骤三: 创建 APIG Ingress

  1. 创建路由规则(Ingress)的 YAML 文件,示例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:
            - pathType: Prefix # 路径匹配规则,默认为 Prefix(前缀匹配)
              path: / # 请求匹配的路径
              backend:
                service:
                  name: service-demo # 需要对接的服务名称
                  port: 
                    number: 80 # 需要对接服务的端口号
    

    说明

    本例中使用最简单的方式创建 APIG Ingress。更多配置,请参见 通过 kubectl 创建 APIG Ingress

  2. 执行以下命令,创建 APIG Ingress。
    kubectl apply -f apig-ingress.yaml
    

结果验证

查看 APIG Ingress 状态

  1. 登录 容器服务控制台
  2. 单击左侧导航栏中的 集群
  3. 在集群列表页面,单击需要配置路由规则的目标集群。
  4. 在集群管理页面的左侧导航栏中,选择 服务与路由 > 路由规则,在路由规则列表中查看 APIG Ingress 的状态。
    alt
  5. 单击 APIG Ingress 名称,进入详情页面。选择 事件 页签,即可查看 APIG Ingress 的路由同步事件。
    alt

访问应用

使用 APIG Ingress 中配置的域名访问服务。

curl http://example.com

预期结果如下,表示能够通过 APIG Ingress 访问到后端的服务。

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>