Kubernetes使用Eedpoints连接外部服务端口
背景: 在Kubernetes的使用环境中,我们经常要连接外部的一些服务,比如mysql Elasticsearch kafka 等等外部的存储服务,但是这些服务又不是部署在K8S中的,所以端口就不好连接,这时我们把service的Endpoints修改成外部ip和端口连接,就可以实现使用service 直接连接外部的服务。具体配置文件如下:
使用一个Elasticsearch的配置文件作为实践
cat elasticsearch-enpoint.yaml
---
apiVersion: v1
kind: Endpoints
metadata:
name: essrv1
namespace: kube-system
subsets:
- addresses:
- ip: 192.168.0.250
ports:
- port: 9200
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: essrv1
namespace: kube-system
spec:
ports:
- port: 9200
protocol: TCP
上面呢,我们就建立一个service essrv1,同时让这个service 对应Endpoints essrv1 配置,这样我们就实现了把外部服务放到K8S 中去利用。
接下来我们看下效果:
$ kubectl get svc -n kube-system |grep essrv1
essrv1 ClusterIP 10.0.0.95 <none> 9200/TCP 26d
$ kubectl get ep -n kube-system|grep essrv1
essrv1 192.168.0.250:9200 26d
$ kubectl describe ep essrv1 -n kube-system
Name: essrv1
Namespace: kube-system
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"Endpoints","metadata":{"annotations":{},"name":"essrv1","namespace":"kube-system"},"subsets":[{"addresses":[{"i...
Subsets:
Addresses: 192.168.0.250
NotReadyAddresses: <none>
Ports:
Name Port Protocol
---- ---- --------
<unset> 9200 TCP
Events: <none>
上面我们就看到了这种效果,这样我们就可以通过内部的dns去调用essrv1的service名称了,实践完成!