ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
**服务负载分发策略** 在 kubernetes 集群中有两种负载均衡分发策略,也可以称之为服务的会话亲和性,如下所示: * `RoundRobin`:轮询模式,这是默认配置。即定义 YAML 文件时不设置`spec.sessionAffinity`或设置`spec.sessionAffinity=None`。它表示的是将请求分发到后端各个 Pod 上,没有固定某个 Pod 对请求进行响应。 * `SessionAffinity`:会话保持模式,需要在定义 YAML 文件时设置`spec.sessionAffinity=ClientIP`。当某个客户端第一次请求转发到后端的某个 Pod 上,那么之后这个客户端的请求也一直由相同的 Pod 进行响应。 **多端口服务** 有的时候 Pod 会开放多个端口,这样的情况下 Service 也可以开放多个端口与 Pod 的端口形成一一对应的关系。在集群中使用一个服务将多个端口暴露出来。 需要注意的是:创建多端口服务的时候必须给每个端口都命名。 比如 Pod 监听两个端口,其中的 8000 端口用于 HTTP 服务,8888 端口用于 HTTPS 服务,那么 Service 可以使用 80 端口转发到 Pod 的 8000 端口、使用 88 端口转发到 Pod 的 8888 端口,其定义的 YAML 文件如下所示: ~~~yaml apiVersion: v1 kind: Service metadata: name: multi-ports-service spec: ports: - name: http port: 80 # 将 Pod 的 8000 端口映射到 Service 的 80 端口 targetPort: 8000 - name: https port: 88 # 将 Pod 的 8080 端口映射到 Service 的 88 端口 targetPort: 8080 selector: app: test ~~~ **使用命名的端口** 我们也可以在定义 Pod 端口时直接给这些端口命名,然后在 Service 中直接引用这些 Pod 名称、而不是端口号,这样的好处在于如果 Pod 端口经常变动的情况下,只需要修改 Pod 的端口号,而不需要再去修改相关服务的端口号(因为引用的是端口名)。 依然用上面的例子,那么 Pod 的 YAML 文件定义为: ~~~yaml --- kind: Pod spec: containers: - name: test-pod ports: - name: http # 8000 端口被命名为 http 端口 containerPort: 8000 - name: https # 8888 端口被命名为 https 端口 containerPort: 8888 ~~~ 引用端口命名的 Service 的 YAML 文件定义为: ~~~yaml apiVersion: v1 kind: Service metadata: name: multi-ports-service spec: ports: - name: http port: 80 # 将 Service 的 80 端口映射到 Pod 名为 http 的端口 targetPort: http - name: https port: 88 # 将 Service 的 88 端口映射到 Pod 名为 https 的端口 targetPort: https selector: app: test ~~~