Kubernetes ExternalName

前言 我们知道 kubernetes 内部服务之间是通过 service 进行相互访问的, 那么如果现在有一个非 kubernetes 部署的服务,我们可以也通过 service 进行内部交互使用吗?答案是可以,我们可以使用 service 的 ExternalName 类型将service 映射到外部服务上。 最近需要将一个外部服务映射到 kubernetes service 上,通过查找资料学习,本文记录如何将 kubernetes service 映射到外部服务的流程步骤。 外部域名映射内部 service 先讲解如何将外部服务通过域名的方式映射到内部 service 上,通过配置 externalName 字段来配置映射关系.例如,以下 Service 定义将 test 命名空间中的 my-service 服务映射到 my.overstarry.vip: apiVersion: v1 kind: Service metadata: name: my-service namespace: test spec: type: ExternalName externalName: my.overstarry.vip 虽然 externalName 也支持填写 ip 地址,但不会被 kubernetes 解析,如果需要使用 ip 地址,可以使用无头服务 Headless ,下文会进行介绍。 外部服务ip映射service 接下来介绍没有域名的外部服务和service如何进行映射。上文讲过虽然 externalName 也支持填写 ip 地址,但不会被 kubernetes 解析,如果需要,则应该使用 Headless Service 进行映射。 apiVersion: v1 kind: Service metadata: name: test spec: clusterIP: None type: ClusterIP --- apiVersion: v1 kind: Endpoints metadata: name: test subsets: - addresses: - ip: 10.0.1.10 创建service 不指定 selector,手动维护创建 endpoint,创建之后就可以通过 test 访问 10.0.1.10 这个外部服务。 ...

二月 24, 2024 · overstarry

Kubernetes externaltrafficpolicy 简介

前言 最近在使用 Kubernetes 查看 pod 日志时,发现 pod 日志显示的 ip 不是真实的请求者 ip, 而是 Node 节点的 ip。通过查阅资料发现可以通过设置 externalTrafficPolicy 来显示真实的 IP。 本文对 externaltrafficpolicy 进行一个简单的介绍。 简介 ExternalTrafficPolicy 是 Kubernetes Service 对象的一个属性,它决定了流量如何从集群外部访问 Service。有两个可选值:Cluster 和 Local。 Cluster 模式: 在 Cluster 模式下,流量将通过负载均衡器分发到 Service 的所有 Pod 上。这是传统的负载均衡方式,适用于需要水平扩展和容错的场景。负载均衡器会将流量平均分配给所有可用的 Pod,从而实现负载均衡。 Local 模式: 在 Local 模式下,流量将直接访问与请求最近的节点上运行的 Pod。这种方式避免了负载均衡器的介入,直接将流量定向到本地的 Pod 上。这样可以减少延迟,并且在负载均衡器发生故障时仍然保持可用性。 区别 两种模式有什么区别呢? Cluster 模式 Cluster 模式是默认的模式,Kube-proxy 不管容器在哪个节点上,会公平的转发到某一个节点上,在转发时会替换掉源ip,变成转发的上一个节点的ip.原因是Kube-proxy在做转发的时候,会做一次SNAT (source network address translation),所以源ip变成了上一个节点的ip地址。 这个模式的优点是负载均衡比较好,缺点是由于转发,可能会有性能损耗。 Local 模式 Local 模式下,请求只转发给本机的容器,不会转发给其它节点的容器,保留了源ip。 这个模式的优缺点跟 Cluster 模式恰恰相反:性能好,负载均衡不好。所以如果想要负载均衡就需要一层 LB 来进行控制。 参考 https://github.com/apache/apisix-ingress-controller/issues/1166 https://medium.com/pablo-perez/k8s-externaltrafficpolicy-local-or-cluster-40b259a19404 https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/

十二月 3, 2023 · overstarry