服务协议
如果您配置了一个Service,您可以从 Kubernetes 支持的任何网络协议中进行选择。
Kubernetes 支持以下与 Services 相关的协议
定义 Service 时,您还可以指定它使用的应用协议。
本文档详细介绍了几个特殊情况,它们通常使用 TCP 作为传输协议
支持的协议
Service 的端口的 protocol
有 3 个有效值
SCTP
Kubernetes v1.20 [stable]
当使用支持 SCTP 流量的网络插件时,您可以对大多数 Service 使用 SCTP。对于 type: LoadBalancer
Services,SCTP 支持取决于云提供商是否提供此功能。(大多数不提供)。
Windows 节点不支持 SCTP。
对多宿主 SCTP 关联的支持
对多宿主 SCTP 关联的支持要求 CNI 插件能够支持为 Pod 分配多个接口和 IP 地址。
多宿主 SCTP 关联的 NAT 需要相应内核模块中的特殊逻辑。
TCP
您可以将 TCP 用于任何类型的 Service,它是默认的网络协议。
UDP
您可以将 UDP 用于大多数 Services。对于 type: LoadBalancer
Services,UDP 支持取决于云提供商是否提供此功能。
特殊情况
HTTP
如果您的云提供商支持,您可以使用 LoadBalancer 模式的 Service 来配置 Kubernetes 集群外部的负载均衡器,在这种特殊模式下,您的云提供商的负载均衡器将实现 HTTP/HTTPS 反向代理,并将流量转发到该 Service 的后端端点。
通常,您将 Service 的协议设置为 TCP
,并添加一个(通常特定于您的云提供商的)注解,该注解将负载均衡器配置为在 HTTP 级别处理流量。此配置可能还包括提供 HTTPS(HTTP over TLS)以及将普通 HTTP 反向代理到您的工作负载。
注意
您还可以使用Ingress 来公开 HTTP/HTTPS Services。您可能还希望指定连接的应用协议是 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 身份(作为服务器,以及可能作为连接到您工作负载的客户端)。