k8S通过代理将集群外的中间件引入集群内访问 —— 筑梦之路

背景说明

有部分中间件是跑在Kubernetes集群之外,我们希望通过service的方式来访问集群外的中间件,比如访问我们k8s集群外的elasticsearch集群。

ES节点本身又处在一个负载均衡IP:192.168.100.100 之后,但是代理的端口号是9202,非es默认的9200。

工作原理

k8s通过endpoint指向一个负载均衡IP和port,再创建一个相同name的service就可以把流量导向到es集群了。

Endpoints 是手动定义的后端服务的地址和端口。我们这里会把Endpoints 指向192.168.100.100,并且监听在端口 9202。这个 IP 和端口是外部负载均衡器的地址,它负责将流量转发到实际的后端服务(例如 Pod 的 9200 端口)。

Service 是 Kubernetes 中用于暴露服务的抽象资源。Service 的 port 是 9200,它在 k8s 集群内暴露了一个虚拟端口 9200。targetPort 是 9202,这表示流量会通过 Service 的 9200 端口进入,然后被转发到 Endpoints 中定义的 9202 端口

yaml文件

bash 复制代码
apiVersion: v1
kind: Endpoints
metadata:
  name: es-svc
  namespace: es
subsets:
- addresses:
  - ip: 192.168.100.100
  ports:
  - port: 9202
    protocol: TCP
---
apiVersion: v1
kind: Service
  name: es-svc
  namespace: es
spec:
  ports:
  - port: 9200
    protocol: TCP
    targetPort: 9202
  sessionAffinity: None
  type: ClusterIP

流量路径

  • 应用(例如集群内的其他 Pod)通过 es-svc.es.svc.cluster.local:9200 (或者 es-svc.es:9200)访问服务。

  • Service 接收到流量后,将流量转发到 Endpoints 中定义的 192.168.100.100:9202。

  • 负载均衡器接收到流量后,再将流量转发到实际的后端服务(例如 Pod 的 9200 端口)。

Service 的 port 和 targetPort

  • port: 9200:这是集群内暴露的端口,客户端通过这个端口访问服务。

  • targetPort: 9202:这是流量被转发到的端口,对应于 Endpoints 中定义的负载均衡器的端口。

Endpoints 的 port

  • port: 9202:这是负载均衡器的端口,它负责将流量转发到实际的后端服务。

  • type: ClusterIP:这是一个普通的 ClusterIP 类型的 Service,它会分配一个虚拟 IP 地址,客户端可以通过这个虚拟 IP 和端口 9200 访问服务。

  • sessionAffinity: None:这表示不启用会话亲和性,流量会被随机分配到后端服务。我们可以根据需求保留或删除这个字段。
相关推荐
zyjyyds11334 分钟前
win11系统 Docker Desktop 突然提示Docker Engine stopped解决情况之一
运维·docker·容器
Altairr34 分钟前
Docker基础(一)
运维·docker·容器·eureka
搬运Gong37 分钟前
Dockerfile使用与最佳实践
docker·容器·虚悬镜像
小兔子酱#1 小时前
【Docker 01】Docker 简介
运维·docker·容器
陈陈CHENCHEN9 小时前
【Kubernetes】K8s 之 ETCD - 恢复备份
kubernetes
叶落闲庭10 小时前
【k8s】k8s集群搭建
云原生·容器·kubernetes
藥瓿亭10 小时前
K8S认证|CKS题库+答案| 3. 默认网络策略
运维·ubuntu·docker·云原生·容器·kubernetes·cks
xyhshen10 小时前
k8s下离线搭建elasticsearch
elasticsearch·容器·kubernetes
椰汁菠萝11 小时前
k8s集群安装坑点汇总
云原生·容器·kubernetes
背太阳的牧羊人11 小时前
sudo docker exec -it backend bash 以交互方式(interactive)进入正在运行的 Docker 容器的命令行环境
docker·容器·bash