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:这表示不启用会话亲和性,流量会被随机分配到后端服务。我们可以根据需求保留或删除这个字段。
相关推荐
Sst的头号粉丝3 小时前
Docker——compose
运维·docker·容器
ZZZKKKRTSAE4 小时前
rhel9快速上手Docker
运维·docker·容器
筱顾大牛4 小时前
Docker安装教程(加汉化!超详细!!!)
运维·docker·容器
九成宫4 小时前
安装和配置Docker教程(装在其他盘)
运维·docker·容器
janthinasnail5 小时前
使用Docker安装nanobot(超轻量个人AI助手)
docker·容器
恋红尘6 小时前
K8S 配置与调度-叩丁狼
云原生·容器·kubernetes
恋红尘7 小时前
K8S Pod 基础解析-分篇-叩丁狼
云原生·容器·kubernetes·pod
丘桔8 小时前
k8s01:容器运行时之争
云原生·容器·kubernetes
学不完的9 小时前
Docker 的安全优化
运维·安全·docker·容器·eureka
恋红尘9 小时前
K8S 服务发现-叩丁狼
linux·docker·kubernetes