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
:指定后端协议。说明:当您的域名配置为默认值,即公网或内网 VIP 时,可以通过 domain 填空值的方式进行配置。
-auto-service-config
与 -auto-ingress-config
为后缀。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
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端口。
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
该示例包含以下配置:
sample.tencent.com
域名暴露了一个 HTTPS 服务。/health
,HTTPS 服务的转发路径是/
。jetty-ingress-config
负载均衡配置。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 # 监听器开启长连接
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
scheduler: WRR
该示例包含以下配置:
该 TkeServiceConfig 名称为 jetty-ingress-config
。且在七层监听器配置中,声明了两段配置:
/health
路径下的健康检查被关闭了。sample.tencent.com
。该域名下仅描述了一个转发路径为/
的转发规则配置,其中配置包含以下内容:/checkHealth
,检查域名为 sample.tencent.com
。➜ 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
本页内容是否解决了您的问题?