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