流量接入

最近更新时间:2023-07-12 17:02:01

我的收藏
本文主要介绍如何使用腾讯负载均衡 CLB,实现注册节点的四层以及七层的流量接入。

使用前提

集群已经 创建注册节点
使用腾讯云 CLB 实现注册节点流量接入的能力,基于 CLB 混合云部署特性实现,请确保已经开通此特性。更多信息请参考 混合云部署

Service

Kubernetes Service 资源抽象了访问一组 Pod 的策略,屏蔽了后端实例的动态变化和对多实例的负载均衡,用于管理集群中基于四层网络的服务访问。 Kubernetes 的 ServiceTypes 允许指定 Service 类型,目前主要支持 ClusterIPNodePortLoadBalancer 三种类型。ClusterIP 和 NodePort 类型的 Service,在不同云服务商或是自建集群中的行为表现通常情况下相同。而 LoadBalancer 类型的 Service,由于使用了云服务商的负载均衡进行服务暴露,云服务商会围绕其负载均衡的能力提供不同的额外功能。
这里介绍如何基于腾讯云 CLB,使用 LoadBalancer 类型的 Service 实现注册节点的四层流量接入。

使用方式

创建 Loadbalancer Service 时,为 Service 添加相应的 Annotation :
apiVersion: v1
kind: Service
metadata:
annotations:
service.cloud.tencent.com/hybrid-type: CCN
service.cloud.tencent.com/snat-pro-info: '{"snatIps": [{"subnetId":"subnet-12345678","ip":"192.168.0.1"}]}'
name: test
........

Annotation 说明

此处仅介绍与注册节点流量接入相关的参数:
service.cloud.tencent.com/hybrid-type 通过该 Annotation 开启分布式云场景中注册节点流量接入的特性,需要指定流量转发的方式,当前仅支持云联网。参数有效值:CCN。
service.cloud.tencent.com/snat-pro-info 通过该 Annoation 为 CLB 配置 SnatIP,否则 CLB 后端无法绑定 IDC IP。需要指定 SnatIP 的所在子网以及 IP,其中 IP 非必填,如不填写则从指定的子网中默认分配。
说明
关于 SNAT IP 的说明如下:
SNAT IP 主要用于混合云部署中将请求转发至 IDC 内服务器的场景,使用负载均衡绑定云联网打通的 IDC 内 IP 时,必须分配 SNAT IP. SNAT IP 是您的 VPC 的内网 IP。
单个 CLB 实例最多支持配置 10 个 SNAT IP。
单个 CLB 实例的单个规则配置单个 SNAT IP,绑定单个后端服务后的连接数最大是 5.5 万个,若增加 SNAT IP 或增加后端服务时,连接数等比例增加。例如 1 个 CLB 实例配置了 2 个 SNAT IP,后端绑定了 10 个端口,此时该 CLB 实例总的连接数是:2 x 10 x 5.5万 = 110万个。您可以根据连接数来评估 SNAT IP 的分配个数。
删除 SNAT IP 时,该 SNAT IP 上的连接会全部断开,请谨慎操作

使用示例

apiVersion: v1
kind: Service
metadata:
annotations:
service.cloud.tencent.com/hybrid-type: CCN
service.cloud.tencent.com/snat-pro-info: '{"snatIps": [{"subnetId":"xxxxxxxx"}]}'
name: nginx-svc
spec:
ports:
- port: 80
targetPort: 80
selector:
k8s-app: nginx
sessionAffinity: None
externalTrafficPolicy: Local
type: LoadBalancer
说明:
这里如不指定 service.cloud.tencent.com/hybrid-typeservice.cloud.tencent.com/snat-pro-info,则 CLB 仅会挂载云上节点。
建议使用 Service Local 模式,将 ExternalTrafficPolicy 设置为 Local ,避免流量通过 NAT 在节点间的转发设置,最大程度减少流量跨专线穿行。关于 Service Local 模式,请参考 Service Local 模式

Ingress

Ingress 是允许访问到集群内 Service 规则的集合,您可以通过配置转发规则,实现不同 URL 可以访问到集群内不同的 Service。为了使 Ingress 资源正常工作,集群需运行 Ingress Controller,容器服务在集群内默认启用了基于腾讯云负载均衡器 CLB 实现的 TKE Ingress Controller。
这里介绍如何基于腾讯云负载均衡 CLB,使用 CLB 类型的 Ingress 实现注册节点的七层流量接入。

使用方式

创建 CLB 类型的 Ingress 时,为 Ingress 添加相应的 Annotation :
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: qcloud
ingress.cloud.tencent.com/hybrid-type: CCN
ingress.cloud.tencent.com/snat-pro-info: '{"snatIps": [{"subnetId":"subnet-12345678","ip":"192.168.0.1"}]}'
name: test-ingress
........

Annotation 说明

kubernetes.io/ingress.class 配置 Ingress 类型,这里我们使用 CLB 类型的 Ingress,有效值为 qcloud
ingress.cloud.tencent.com/hybrid-type 通过该 Annotation 开启分布式云场景中注册节点流量接入的特性,需要指定流量转发的方式,当前仅支持云联网。参数有效值:CCN
ingress.cloud.tencent.com/snat-pro-info 通过该 Annoation 为 CLB 配置 SnatIP,否则 CLB 后端无法绑定 IDC IP。需要指定 SnatIP 的所在子网以及 IP,其中 IP 非必填,如不填写则从指定的子网中默认分配。

使用示例

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: qcloud
ingress.cloud.tencent.com/hybrid-type: CCN
ingress.cloud.tencent.com/snat-pro-info: '{"snatIps": [{"subnetId":"subnet-xxxxxx"}]}'
name: nginx-ingress
namespace: default
spec:
rules:
- host: foo.bar.com
http:
paths:
- backend:
serviceName: nginx-svc
servicePort: 80
path: /
pathType: ImplementationSpecific