在关于 kubernetes 的亲和力和反亲和力规则的文档中,有一个围绕 Web 应用程序和本地 Redis 缓存的实用用例。
- Redis 部署配置了 PodAntiAffinity,以确保调度程序不会将副本共置在单个节点上。 Web 应用程序部署具有容器
- 关联性,以确保使用具有标签存储 (Redis ( 的容器计划应用程序。
要从 Web 应用程序连接到 redis,我们必须定义一个服务。
问题:我们如何确定 Web 应用程序将始终使用位于同一节点而不是另一个节点上的 redis?如果我从 Kubernetes v1.2 中读取版本兼容性,kube-proxy 的iptables模式成为默认模式。
阅读有关 kube-proxy 的 iptable 模式的文档,它说默认情况下,iptables 模式下的 kube-proxy会随机选择一个后端。
所以我对这个问题的回答是:不,我们不能确定。如果您想确定,请将 redis 和 webapp 放在一个 pod 中?
这可以在(redis(服务中配置,但通常不建议:
将
spec.externalTrafficPolicy
设置为值Local
将仅将请求代理到本地终结点,而不会将流量转发到其他节点
这是一个复杂的话题,请在此处阅读更多内容:
- https://kubernetes.io/docs/tutorials/services/source-ip/
- https://kubernetes.io/docs/concepts/services-networking/service/