Service 的协议
如果你配置一个 Service,你可以从 Kubernetes 支持的任何网络协议中进行选择。
Kubernetes 支持以下用于 Service 的协议
定义 Service 时,你还可以指定它使用的应用协议。
本文档详细介绍了一些特殊情况,所有这些情况通常都使用 TCP 作为传输协议
支持的协议
对于 Service 端口的 protocol
字段,有 3 个有效值
SCTP
Kubernetes v1.20 [stable]
使用支持 SCTP 流量的网络插件时,你可以对大多数 Service 使用 SCTP。 对于 type: LoadBalancer
类型的 Service,SCTP 支持取决于云提供商是否提供此功能。(大多数不提供)。
Windows 节点不支持 SCTP。
支持多宿主 SCTP 关联
支持多宿主 SCTP 关联要求 CNI 插件能够支持为 Pod 分配多个网络接口和 IP 地址。
多宿主 SCTP 关联的 NAT 要求相应的内核模块中包含特殊的逻辑。
TCP
你可以对任何类型的 Service 使用 TCP,它是默认的网络协议。
UDP
你可以对大多数 Service 使用 UDP。 对于 type: LoadBalancer
类型的 Service,UDP 支持取决于云提供商是否提供此功能。
特殊情况
HTTP
如果你的云提供商支持此功能,你可以使用 LoadBalancer 模式的 Service 在 Kubernetes 集群外部配置负载均衡器,该负载均衡器以特殊模式运行,实现 HTTP / HTTPS 反向代理,并将流量转发到该 Service 的后端端点。
通常,你将 Service 的协议设置为 TCP
并添加一个注解(通常特定于你的云提供商),该注解配置负载均衡器以 HTTP 级别处理流量。 此配置还可能包括提供 HTTPS (基于 TLS 的 HTTP) 服务以及将纯 HTTP 反向代理到你的工作负载。
说明
你也可以使用Ingress 来暴露 HTTP/HTTPS Service。你可能还想指定连接的应用协议是 http
或 https
。 如果从负载均衡器到工作负载的会话是无 TLS 的 HTTP,则使用 http
;如果从负载均衡器到工作负载的会话使用 TLS 加密,则使用 https
。
PROXY 协议
如果你的云提供商支持此功能,你可以使用设置为 type: LoadBalancer
的 Service 在 Kubernetes 外部配置负载均衡器,该负载均衡器将转发使用 PROXY 协议封装的连接。
然后,负载均衡器发送一系列初始字节,描述传入连接,类似于此示例 (PROXY 协议 v1)
PROXY TCP4 192.0.2.202 10.0.42.7 12345 7\r\n
代理协议前导码之后的数据是来自客户端的原始数据。 当任意一方关闭连接时,负载均衡器也会触发连接关闭并在可行的情况下发送所有剩余的数据。
通常,你定义一个 Service,其协议设置为 TCP
。 你还需要设置一个特定于你的云提供商的注解,该注解配置负载均衡器使用 PROXY 协议封装每个传入连接。
TLS
如果你的云提供商支持此功能,你可以使用设置为 type: LoadBalancer
的 Service 作为设置外部反向代理的方式,其中客户端到负载均衡器的连接是 TLS 加密的,并且负载均衡器是 TLS 服务器对等体。 从负载均衡器到工作负载的连接也可以是 TLS 加密,或者可能是纯文本。 可用的具体选项取决于你的云提供商或自定义 Service 实现。
通常,你将协议设置为 TCP
并设置一个注解(通常特定于你的云提供商),该注解配置负载均衡器作为 TLS 服务器。 你将使用特定于你的云提供商的机制来配置 TLS 身份(作为服务器,也可能作为连接到你的工作负载的客户端)。