容器服务 Service 扩展协议

Service 是 Kubernetes 暴露应用程序到集群外的一种机制与抽象,可以以通过 Service 访问集群内的应用程序。

相关产品
容器服务 产品页,含版本规格、价格与购买入口。

一、TKE 扩展 Service 转发协议

在原生的 Service 支持的协议规则上,存在部分场景需要在 Service 上同时支持 TCP 和 UDP 混合,且需 Service 能够支持 TCP SSL、HTTP、HTTPS 协议。TKE 针对 LoadBalancer 模式扩展了更多协议的支持。

二、前置说明

·扩展协议仅对 LoadBalancer 模式的 Service 生效。

·扩展协议通过注解 Annotation 的形式描述协议与端口的关系。

·扩展协议与注解 Annotation 关系如下:

·当扩展协议注解中没有覆盖 Service Spec 中描述的端口时,Service Spec 按照用户描述配置。

·当扩展协议注解中描述的端口在 Service Spec 中不存在时,忽略该配置。

·当扩展协议注解中描述的端口在 Service Spec 中存在时,覆盖用户在 Service Spec 中声明的协议配置。

三、注解名称

service.cloud.tencent.com/specify-protocol

四、扩展协议注解示例

TCP_SSL 示例HTTP 示例HTTPS 示例TCP/UDP混合示例混合示例QUIC{"80":{"protocol":["TCP_SSL"],"tls":"cert-secret"}}{"80":{"protocol":["HTTP"],"hosts":{"a.tencent.com":{},"b.tencent.com":{}}}}{"443":{"protocol":["HTTPS"],"hosts":{"a.tencent.com":{"tls":"cert-secret-a"},"b.tencent.com":{"tls":"cert-secret-b"}}}}{"80":{"protocol":["TCP","UDP"]}} # 仅直连模式支持,详情见https://cloud.tencent.com/document/product/457/41897 {"80":{"protocol":["TCP_SSL","UDP"],"tls":"cert-secret"}} # 仅直连模式支持,详情见https://cloud.tencent.com/document/product/457/41897 {"80":{"protocol":["QUIC"],"tls":"cert-secret"}}

注意:TCP_SSL 和 HTTPS 中的字段 cert-secret,表示使用该协议需要指定一个证书,证书是 Opaque 类型的 Secret,Secret 的 Key 为 qcloud_cert_id,Value 是证书 ID。详情见 Ingress 证书配置。

五、扩展协议使用说明

扩展协议 YAML 使用说明扩展协议控制台使用说明

通过编辑 YAML 文件注解可启用扩展协议功能。例如:apiVersion: v1kind: Servicemetadata: annotations: service.cloud.tencent.com/specify-protocol: '{"80":{"protocol":["TCP_SSL"],"tls":"cert-secret"}}' # 若要使用别的协议,修改该键值对的值为上述内容 name: test ….

·在创建 Service 时,若以公网 LB 或内网 LB 的形式暴露服务,非 直连模式 情况下,端口映射中,仅支持 TCP 和 TCP SSL 一起使用。如下:

·当 Service 为仅在集群内访问(ClusterIP)或主机端口访问(NodePort)模式时,支持任意协议混用。

·直连模式,支持任意协议混用。

·你也可以在 Service 资源页签,通过 编辑Annotation 来使用扩展协议功能。

六、案例说明

原生 Service 不支持协议混用,TKE 经过特殊改造后,在 直连场景 中支持混合协议的使用。

需注意的是,YAML 中仍使用相同的协议,但可以通过 Annotation 明确每个端口的协议类型。如下示例展示了 80 端口使用 TCP 协议,8080 端口使用 UDP 协议。

apiVersion: v1kind: Servicemetadata: annotations: service.cloud.tencent.com/direct-access: "true" #TKE Serverless 集群默认是直连模式,TKE 集群请务必先参照文档开启直连模式。 service.cloud.tencent.com/specify-protocol: '{"80":{"protocol":["TCP"]},"8080":{"protocol":["UDP"]}}' # 指定 80 端口 TCP 协议,8080 端口 UDP 协议。 name: nginxspec: externalTrafficPolicy: Cluster ports: – name: tcp-80-80 nodePort: 32150 port: 80 protocol: TCP targetPort: 80 – name: udp-8080-8080 nodePort: 31082 port: 8080 protocol: TCP # 注意,因为 Kubernetes Service Controller 限制,只能使用同类型协议。 targetPort: 8080 selector: k8s-app: nginx qcloud-app: nginx sessionAffinity: None type: LoadBalancer

赞 (0)
上一篇 4天前
下一篇 4天前