服务协议

如果你配置了一个 服务,你可以从 Kubernetes 支持的任何网络协议中进行选择。

Kubernetes 支持以下协议与服务一起使用

当你定义服务时,你还可以指定它使用的 应用程序协议

本文档详细介绍了一些特殊情况,它们通常都使用 TCP 作为传输协议

支持的协议

服务端口的 protocol 有 3 个有效值

SCTP

功能状态: Kubernetes v1.20 [稳定]

当使用支持 SCTP 流量的网络插件时,你可以将 SCTP 用于大多数服务。对于 type: LoadBalancer 服务,SCTP 支持取决于云提供商是否提供此功能。(大多数都不提供)。

在运行 Windows 的节点上不支持 SCTP。

对多宿主 SCTP 关联的支持

对多宿主 SCTP 关联的支持要求 CNI 插件能够支持将多个接口和 IP 地址分配给 Pod。

对多宿主 SCTP 关联的 NAT 需要相应的内核模块中的特殊逻辑。

TCP

你可以将 TCP 用于任何类型的服务,它是默认的网络协议。

UDP

你可以将 UDP 用于大多数服务。对于 type: LoadBalancer 服务,UDP 支持取决于云提供商是否提供此功能。

特殊情况

HTTP

如果你的云提供商支持,你可以使用负载均衡器模式下的服务来配置 Kubernetes 集群外部的负载均衡器,以一种特殊模式,在这种模式下,你的云提供商的负载均衡器实现 HTTP/HTTPS 反向代理,并将流量转发到该服务的后台端点。

通常,你将服务的协议设置为 TCP,并添加一个 注释(通常特定于你的云提供商),该注释配置负载均衡器以在 HTTP 级别处理流量。此配置可能还包括提供 HTTPS(HTTP over TLS)并将纯 HTTP 反向代理到你的工作负载。

你可能还需要指定连接的 应用程序协议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 身份(作为服务器,并且可能还作为连接到你的工作负载的客户端)。