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:这表示不启用会话亲和性,流量会被随机分配到后端服务。我们可以根据需求保留或删除这个字段。
相关推荐
GreenMountainEcho2 小时前
Kubernetes 入门篇之 Node 安装与部署
云原生·容器·kubernetes
zyk_5204 小时前
Docker desktop如何汉化
运维·docker·容器
韭菜盖饭4 小时前
解决Docker端口映射后外网无法访问的问题
运维·docker·容器
jingjingjing11114 小时前
笔记:docker安装(ubuntu 20.04)
笔记·docker·容器
ghostwritten4 小时前
Rancher Backup
kubernetes·rancher
还是鼠鼠4 小时前
Node.js全局生效的中间件
javascript·vscode·中间件·node.js·json·express
qq_339282235 小时前
docker之network
运维·docker·容器
alden_ygq5 小时前
k8s statefulset pod重启顺序
云原生·容器·kubernetes
ghostwritten5 小时前
k8s黑科技:Linux+Vagrant+VirtualBox开启Kubernetes奇幻之旅
linux·科技·kubernetes
@郭小茶8 小时前
windows部署docker
windows·docker·容器