简介
Ingress 是允许访问到集群内 Service 的规则的集合,您可以通过配置转发规则,实现不同 URL 访问集群内不同的 Service。
为了使 Ingress 资源正常工作,集群必须运行 Ingress-controller。TKE 服务在集群内默认启用了基于腾讯云负载均衡器实现的
l7-lb-controller
,支持 HTTP、HTTPS,同时也支持在集群内自建其他 Ingress 控制器,您可以根据您的业务需要选择不同的 Ingress 类型。注意事项
腾讯云负载均衡(Cloud Load Balancer)实例已于2023年03月06日升级了架构,升级后公网负载均衡以域名的方式提供服务。VIP 随业务请求动态变化,控制台不再展示 VIP 地址。请参见 域名化公网负载均衡上线公告。
新注册的腾讯云用户默认使用升级后的域名化负载均衡。
存量用户可以选择继续使用原有的负载均衡,不受升级影响。如果您需要升级负载均衡服务,则需要同时升级腾讯云产品 CLB 以及 TKE,否则 TKE 中的所有公网类型的 Service/Ingress 同步将可能受到影响。CLB 升级操作详情请参见 域名化负载均衡升级指南;TKE 升级 Service/Ingress 组件版本,请通过 在线咨询 联系我们。
Ingress apiVersion 支持情况:
extensions/v1beta1 和 networking.k8s.io/v1beta1 API 版本的 Ingress 不在 v1.22 版本中继续提供。即仅在 TKE Kubernetes 版本 ≤ 1.20 版本中使用。
networking.k8s.io/v1 API 从 v1.19(TKE 场景只支持偶数版本,因此是从 TKE 的 v1.20) 版本开始可用。即仅在 TKE Kubernetes 版本 ≥ 1.20 版本中使用。
更多信息请参见 Kubernetes 文档。
确保您的容器业务不和 CVM 业务共用一个 CLB。
不支持您在 CLB 控制台操作 TKE 管理的 CLB 的监听器、转发路径、证书和后端绑定的服务器,您的更改会被 TKE 自动覆盖。
使用已有的 CLB 时:
只能使用通过 CLB 控制台创建的负载均衡器,不支持复用由 TKE 自动创建的 CLB。
不支持多个 Ingress 复用 CLB。
不支持 Ingress 和 Service 共用 CLB。
删除 Ingress 后,复用 CLB 绑定的后端云服务器需要自行解绑,同时会保留一个
tag tke-clusterId: cls-xxxx
,需自行清理。默认 CLB 的转发规则的限制是50个,如果您 Ingress 的转发规则超过50时,可通过 在线咨询 提升负载均衡 CLB 的配额。
Ingress 和 CLB 之间配置的管理和同步是由以 CLB ID 为名字的 LoadBalancerResource 类型的资源对象,请勿对该 CRD 进行任何操作,否则容易导致 Ingress 失效。
Ingress 控制台操作指引
创建 Ingress
1. 登录 容器服务控制台,单击左侧导航栏中的集群。
2. 在集群管理页面,单击需要创建 Ingress 的集群 ID。
3. 在集群详情页,选择服务与路由 > Ingress。
4. 在 Ingress 页面,单击新建。
5. 在新建 Ingress 页面,根据实际需求,设置 Ingress 参数。关键参数信息如下:
Ingress 名称:自定义。
命名空间:根据实际需求进行选择。
Ingress 类型:根据实际需求进行选择,详情请参见 各类型 Ingress Controllers 功能对比。
网络类型:默认为 “公网”,请根据实际需求进行选择。
负载均衡器:可自动创建或使用已有 CLB。
IP 版本:提供 IPv4 和 IPv6 NAT64 两种版本,请根据实际需求进行选择。
运营商类型:支持 BGP(多线) 运营商类型。
网络计费模式:网络计费模式分为按带宽计费、按使用流量、共享带宽包。详情请参见 负载均衡计费模式。
实例规格:支持共享型实例和性能容量型实例。
转发配置:协议默认为 Http,请根据实际情况进行选择。如果协议选择 Https 则需绑定服务器证书,以保证访问安全。如下图所示:
证书详情请参见 SSL 证书格式要求及格式转换说明。6. 单击创建Ingress,完成创建。
更新 Ingress
更新 YAML
1. 登录 容器服务控制台,单击左侧导航栏中的集群。
2. 在集群管理页面,单击集群 ID,进入待更新 YAML 的集群管理页面。
3. 在集群详情页,选择服务与路由 > Ingress。
4. 在需要更新 YAML 的 Ingress 行中,单击编辑 yaml。
5. 对 YAML 进行编辑,单击完成。
更新转发规则
1. 登录 容器服务控制台,单击左侧导航栏中的集群。
2. 在集群管理页面,单击集群 ID,进入待更新 YAML 的集群管理页面。
3. 在集群详情页,选择服务与路由 > Ingress。
4. 在需要更新 YAML 的 Ingress 行中,单击更新转发配置。
5. 在更新转发配置页面,根据实际需求,修改转发配置。如下图所示:
6. 单击更新转发配置,即可完成更新。
删除 Ingress
1. 登录 容器服务控制台,单击左侧导航栏中的集群。
2. 在集群管理页面,单击需要删除 Ingress 的集群 ID。
3. 在集群详情页,选择服务与路由 > Ingress。
4. 找到需要删除的 Ingress,单击删除。
重建 Ingress
如果 CLB 被误删、或者修改了某些需要更换 CLB 的注解(如修改子网)时,需要重建 Ingress 才能生效,下面是重建 Ingress 的操作方法。
1. 登录 容器服务控制台,单击左侧导航栏中的集群。
2. 在集群管理页面,单击需要重建 Ingress 的集群 ID。
3. 在集群详情页,选择服务与路由 > Ingress。
4. 找到需要重建的 Ingress,单击编辑 yaml。
5. 复制 yaml 内容。
6. 删除 Ingress。
7. 单击右上角的 YAML创建。
8. 粘贴 Ingress 的 yaml 内容,移除自动生成的一些字段,如status、managedFields、creationTimestamp、finalizers、generation、resourceVersion、uid 等。
9. 单击完成。
Kubectl 操作 Ingress 指引
YAML 示例
apiVersion: networking.k8s.io/v1kind: Ingressmetadata:annotations:kubernetes.io/ingress.class: qcloud ## 可选值:qcloud(CLB类型ingress), nginx(nginx-ingress),traefik## kubernetes.io/ingress.existLbId: lb-xxxxxxxx ##指定使用已有负载均衡器创建公网/内网访问的Ingress## kubernetes.io/ingress.subnetId: subnet-xxxxxxxx ##若是创建CLB类型内网ingress需指定该条annotationname: my-ingressnamespace: defaultspec:rules:- host: localhosthttp:paths:- backend:service:name: non-serviceport:number: 65535path: /pathType: ImplementationSpecific
kind:标识 Ingress 资源类型。
metadata:Ingress 的名称、Label 等基本信息。
metadata.annotations:Ingress 的额外说明,可通过该参数设置腾讯云 TKE 的额外增强能力。
spec.rules:Ingress 的转发规则,配置该规则可实现简单路由服务、基于域名的简单扇出路由、简单路由默认域名、配置安全的路由服务等。
annotations: 使用已有负载均衡器创建公网/内网访问的 Ingress
如果您已有的应用型 CLB 为空闲状态,需要提供给 TKE 创建的 Ingress 使用,或期望在集群内使用相同的 CLB ,您可以通过以下 annotations 进行设置:
说明:
metadata:annotations:kubernetes.io/ingress.existLbId: lb-6swtxxxx
annotations: 创建 CLB 类型内网 Ingress
如果您需要使用内网负载均衡,可以通过以下 annotations 进行设置:
metadata:annotations:kubernetes.io/ingress.subnetId: subnet-xxxxxxxx
说明事项
如果您使用的是 IP 带宽包账号,在创建公网访问方式的服务时需要指定以下两个 annotations 项:
kubernetes.io/ingress.internetChargeType
公网带宽计费方式,可选值有:TRAFFIC_POSTPAID_BY_HOUR(按使用流量计费)
BANDWIDTH_POSTPAID_BY_HOUR(按带宽计费)
kubernetes.io/ingress.internetMaxBandwidthOut
带宽上限,范围:[1,2000] Mbps。
例如:metadata:annotations:kubernetes.io/ingress.internetChargeType: TRAFFIC_POSTPAID_BY_HOURkubernetes.io/ingress.internetMaxBandwidthOut: "10"
创建 Ingress
1. 参考 YAML 示例,准备 Ingress YAML 文件。
2. 安装 Kubectl,并连接集群。操作详情请参考 通过 Kubectl 连接集群。
3. 执行以下命令,创建 Ingress YAML 文件。
kubectl create -f Ingress YAML 文件名称
例如,创建一个文件名为 my-ingress.yaml 的 Ingress YAML 文件,则执行以下命令:
kubectl create -f my-ingress.yaml
4. 执行以下命令,验证创建是否成功。
kubectl get ingress
返回类似以下信息,即表示创建成功。
NAME CLASS HOSTS ADDRESS PORTS AGEmy-ingress <none> localhost 80 4s
更新 Ingress
方法一
执行以下命令,更新 Ingress。
kubectl edit ingress/[name]
方法二
1. 手动删除旧的 Ingress。
2. 执行以下命令,重新创建 Ingress。
kubectl create/apply
删除 Ingress
执行以下命令,删除 Ingress。
kubectl delete ingress/[name]