1. 程式人生 > 實用技巧 >Kubernetes使用Eedpoints連線外部服務埠

Kubernetes使用Eedpoints連線外部服務埠

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名稱了,實踐完成!