上云无忧 > 文档中心 > 腾讯云容器服务 TKE 标准集群 - Ingress 使用 TkeServiceConfig 配置 CLB
容器服务 TKE
腾讯云容器服务 TKE 标准集群 - Ingress 使用 TkeServiceConfig 配置 CLB

文档简介:
TkeServiceConfig: TkeServiceConfig 是腾讯云容器服务 TKE 提供的自定义资源 CRD,通过 TkeServiceConfig 能够帮助您更灵活的进行 Ingress 管理负载均衡的各种配置。
*此产品及展示信息均由腾讯云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

TkeServiceConfig

TkeServiceConfig 是腾讯云容器服务 TKE 提供的自定义资源 CRD,通过 TkeServiceConfig 能够帮助您更灵活的进行 Ingress 管理负载均衡的各种配置。

使用场景

Ingress YAML 的语义无法定义的负载均衡参数和功能,可以通过 TkeServiceConfig 来配置。

配置说明

使用 TkeServiceConfig 能够帮您快速进行负载均衡器的配置。通过 Ingress 注解 ingress.cloud.tencent.com/tke-service-config:<config-name>,您可以指定目标配置应用到 Ingress 中。
注意
TkeServiceConfig 资源需要和 Ingress 处于同一命名空间。
TkeServiceConfig 不会帮您配置并修改协议、端口、域名以及转发路径,您需要在配置中描述协议、端口、域名还有转发路径以便指定配置下发的转发规则。
每个七层的监听器下可有多个域名,每个域名下可有多个转发路径。因此,在一个 TkeServiceConfig 中可以声明多组域名、转发规则配置,目前主要针对负载均衡的健康检查以及对后端访问提供配置。
通过指定协议和端口,配置能够被准确地下发到对应监听器:
spec.loadBalancer.l7Listeners.protocol:七层协议
spec.loadBalancer.l7Listeners.port:监听端口
通过指定协议、端口、域名以及访问路径,可以配置转发规则级别的配置。例如,后端健康检查、负载均衡方式。
spec.loadBalancer.l7Listeners.protocol:七层协议
spec.loadBalancer.l7Listeners.port:监听端口
spec.loadBalancer.l7Listeners.domains[].domain:域名
spec.loadBalancer.l7Listeners.domains[].rules[].url:转发路径
spec.loadBalancer.l7listeners.protocol.domain.rules.url.forwardType:指定后端协议。
后端协议是指 CLB 与后端服务之间的协议:后端协议选择 HTTP 时,后端服务需部署 HTTP 服务。后端协议选中 HTTPS 时,后端服务需部署 HTTPS 服务,HTTPS 服务的加解密会让后端服务消耗更多资源。更多请查看 CLB 配置 HTTPS 监听器
说明
当您的域名配置为默认值,即公网或内网 VIP 时,可以通过 domain 填空值的方式进行配置。

Ingress 与 TkeServiceConfig 关联行为

1. 创建 Ingress 时,设置 ingress.cloud.tencent.com/tke-service-config-auto: "true"; ,将自动创建 <IngressName>-auto-ingress-config。 您也可以通过 ingress.cloud.tencent.com/tke-service-config:<config-name> 直接指定您自行创建的 TkeServiceConfig。两个注解不可同时使用。
2. 您为 Service\Ingress 使用的自定义配置,名称不能以 -auto-service-config-auto-ingress-config 为后缀。
3. 其中自动创建的 TkeServiceConfig 存在以下同步行为:
更新 Ingress 资源时,新增若干7层转发规则,如果该转发规则没有对应的 TkeServiceConfig 配置片段。Ingress-Controller 将主动添加 TkeServiceConfig 对应片段。
删除若干7层转发规则时,Ingress-Controller 组件将主动删除 TkeServiceConfig 对应片段。
删除 Ingress 资源时,联级删除该 TkeServiceConfig。
用户修改 Ingress 默认的 TkeServiceConfig,TkeServiceConfig 内容同样会被应用到负载均衡。
4. 您也可以参考下列 TkeServiceConfig 完整配置参考,自行创建需要的 CLB 配置,Service 通过注解 ingress.cloud.tencent.com/tke-service-config:<config-name> 引用该配置。
5. 其中您手动创建的 TkeServiceConfig 存在以下同步行为:
当用户在 Ingress 中使用配置注解时,负载均衡将会即刻进行设置同步。
当用户在 Ingress 中删除配置注解时,负载均衡将会保持不变。
修改 TkeServiceConfig 配置时,引用该配置的 Ingress 的负载均衡将会根据新的 TkeServiceConfig 进行设置同步。
当 Ingress 的监听器没有找到对应配置时,该监听器将不会进行修改。
Ingress 的监听器找到对应配置时,若配置中没有声明的属性,该监听器将不会进行修改。

示例

Deployment 示例:jetty-deployment.yaml

		
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: jetty
name: jetty-deployment
namespace: default
spec:
progressDeadlineSeconds: 600
replicas: 3
revisionHistoryLimit: 10
selector:
matchLabels:
app: jetty
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: jetty
spec:
containers:
- image: jetty:9.4.27-jre11
imagePullPolicy: IfNotPresent
name: jetty
ports:
- containerPort: 80
protocol: TCP
- containerPort: 443
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30

Service 示例:jetty-service.yaml

		
apiVersion: v1
kind: Service
metadata:
name: jetty-service
namespace: default
spec:
ports:
- name: tcp-80-80
port: 80
protocol: TCP
targetPort: 80
- name: tcp-443-443
port: 443
protocol: TCP
targetPort: 443
selector:
app: jetty
type: NodePort
该示例包含以下配置: Service 的 NodePort 类型,声明了两个 TCP 服务。一个在80端口,一个在443端口。

Ingress:jetty-ingress.yaml

		
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.rule-mix: "true"
kubernetes.io/ingress.http-rules: '[{"path":"/health","backend":{"serviceName":"jetty-service","servicePort":"80"}}]'

kubernetes.io/ingress.https-rules: '[{"path":"/","backend":{"serviceName":

"jetty-service","servicePort":"443","host":"sample.tencent.com"}}]'

ingress.cloud.tencent.com/tke-service-config: jetty-ingress-config
# 指定已有的 tke-service-config
# ingress.cloud.tencent.com/tke-service-config-auto: "true"
# 自动创建 tke-service-config
name: jetty-ingress
namespace: default
spec:
rules:
- http:
paths:
- backend:
serviceName: jetty-service
servicePort: 80
path: /health
- host: "sample.tencent.com"
http:
paths:
- backend:
serviceName: jetty-service
servicePort: 443
path: /
tls:
- secretName: jetty-cert-secret

该示例包含以下配置:
使用了混合协议,使用默认域名(公网 IP)暴露了一个 HTTP 服务,使用 sample.tencent.com 域名暴露了一个 HTTPS 服务。
HTTP 服务的转发路径是 /health,HTTPS 服务的转发路径是/
使用了 jetty-ingress-config 负载均衡配置。

TkeServiceConfig 示例:jetty-ingress-config.yaml

		
apiVersion: cloud.tencent.com/v1alpha1
kind: TkeServiceConfig
metadata:
name: jetty-ingress-config
namespace: default
spec:
loadBalancer:
l7Listeners:
- protocol: HTTP
port: 80
domains:
- domain: "" # domain为空表示使用VIP作为域名
rules:
- url: "/health"
forwardType: HTTP # 指定后端协议为 HTTP
healthCheck:
enable: false
- protocol: HTTPS
port: 443
defaultServer: "sample.tencent.com" # 默认域名
keepaliveEnable: 1 # 监听器开启长连接(非keepalive白名单用户,请勿声明该字段)
domains:
- domain: "sample.tencent.com"
rules:
- url: "/"
forwardType: HTTPS # 指定后端协议为 HTTPS
session:
enable: true
sessionExpireTime: 3600
healthCheck:
enable: true
intervalTime: 10 # intervalTime 要大于 timeout,否则会出错
timeout: 5 # timeout 要小于 intervalTime,否则会出错
healthNum: 2
unHealthNum: 2
httpCheckPath: "/checkHealth"

httpCheckDomain: "sample.tencent.com" #注意:健康检查必须使用固定域名进行探测,如果您在.

spec.loadBalancer.l7Listeners.protocol.domains.domain 里填写的是泛域名,一定要使用

httpCheckDomain 字段明确具体需要健康检查的域名,否则泛域名不支持健康检查。

httpCheckMethod: HEAD

httpCode: 31 # 可选值:1~31,默认 31。 1 表示探测后返回值 1xx 代表健康,2 表示返回 2xx 代表健康,

4 表示返回 3xx 代表健康,8 表示返回 4xx 代表健康,16 表示返回 5xx 代表健康。若希望多种返回码都可代表健康,则将相应的值相加。

scheduler: WRR

该示例包含以下配置: 该 TkeServiceConfig 名称为 jetty-ingress-config。且在七层监听器配置中,声明了两段配置:
1. 80端口的 HTTP 监听器将会被配置,其中包含域名配置,是默认域名对应负载均衡的 VIP。 /health 路径下的健康检查被关闭了。
2. 443端口的 HTTPS 监听器将会被配置。其中包含域名配置,域名是 sample.tencent.com。该域名下仅描述了一个转发路径为/的转发规则配置,其中配置包含以下内容:
打开健康检查,健康检查间隔调整为10s,健康阈值2次,不健康阈值2次。通过 HEAD 请求进行健康检查,检查路径为 /checkHealth,检查域名为 sample.tencent.com
打开会话保持功能,会话保持的超时时间设置为3600s。
转发策略配置为:按权重轮询。

kubectl 配置命令

		
➜ kubectl apply -f jetty-deployment.yaml
➜ kubectl apply -f jetty-service.yaml
➜ kubectl apply -f jetty-ingress.yaml
➜ kubectl apply -f jetty-ingress-config.yaml
➜ kubectl get pods
NAME READY STATUS RESTARTS AGE
jetty-deployment-8694c44b4c-cxscn 1/1 Running 0 8m8s
jetty-deployment-8694c44b4c-mk285 1/1 Running 0 8m8s
jetty-deployment-8694c44b4c-rjrtm 1/1 Running 0 8m8s
# 获取TkeServiceConfig配置列表
➜ kubectl get tkeserviceconfigs.cloud.tencent.com
NAME AGE
jetty-ingress-config 52s
# 更新修改TkeServiceConfig配置
➜ kubectl edit tkeserviceconfigs.cloud.tencent.com jetty-ingress-config
tkeserviceconfigs.cloud.tencent.com/jetty-ingress-config edited
相似文档
  • 简介: 使用 CLB 型 Ingress 时,默认是在当前集群所在 VPC 内的随机可用区生成 CLB。现目前 TKE 的 CLB Ingress 已支持指定可用区、包括其他地域的可用区。本文将为您介绍如何通过控制台和 YAML 两种方式为 CLB Ingress 跨域绑定和指定可用区。
  • 简介: 域名重定向,指当用户通过浏览器访问某个 URL 时,Web 服务器被设置自动跳转到另外一个 URL。 应用场景: 网站支持 HTTP 和 HTTPS,例如 http://tencent.com 和 https://tencent.com 需要访问到同一个 Web 服务。
  • 混合规则: 默认场景下,当 Ingress 中不配置 TLS 时,服务将以 HTTP 协议的方式对外暴露。当 Ingress 配置 TLS 时,服务将以 HTTPS 协议的方式对外暴露。Ingress 描述的服务只能以其中一种协议暴露服务,基于此规则的局限性,腾讯云容器服务 TKE 提供了混合协议的支持。
  • 简介: 基于接入层直连 Pod 的场景,当后端进行滚动更新或后端 Pod 被删除时,如果直接将 Pod 从 LB 的后端摘除,则无法处理 Pod 已接收但还未处理的请求。 特别是长链接的场景,例如会议业务,如果直接更新或删除工作负载的 Pod,此时会议会直接中断。
  • 操作场景: 本文档介绍 Ingress 证书使用相关的内容,您可在以下场景中进行 Ingress 证书配置: 创建 Ingress 选用 HTTPS 监听协议时,选用合适的服务器证书能够确保访问安全。 为所有的 HTTPS 域名绑定同一个证书,简化配置 Ingress 下所有 HTTPS 规则的证书,使更新操作更加便捷。 为不同的域名绑定不同的证书,改善服务器与客户端 SSL/TLS。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部