k8s~Endpoints的使用
Endpoints是指一(yi)個(ge)(ge)服務(wu)的端點,當你的服務(wu)需要訪問外部(bu)資源時,而(er)你又不想把外部(bu)地址配置到(dao)代碼(ma)里,這(zhe)時,你可(ke)以(yi)在k8s里建立(li)一(yi)個(ge)(ge)kind為(wei)Endpoints的服務(wu),它可(ke)以(yi)幫助你的程序解析(xi)這(zhe)個(ge)(ge)外部(bu)地址。
- 聲明一個elasticsearch-1的服務,它映射到一個外部的地址192.168.11.13的9200端口
kind: Service
apiVersion: v1
metadata:
name: elasticsearch-1
spec:
type: ClusterIP
ports:
- port: 80 #cluster端口,集群內部訪問
targetPort: 9200 #pod端口
---
kind: Endpoints
apiVersion: v1
metadata:
name: elasticsearch-1
subsets:
- addresses:
- ip: 192.168.11.13
ports:
- port: 9200
- 而如果你的外部服務也是一個k8s服務,這時也可以通過ExternalName類型也實現這種映射關系,比如在跨namespace訪問資源時,你就可以通過ExternalName來實現一種類似快捷方式的功能。
例如,以(yi)下 Service 定義將 prod 名稱空間中的(de) my-service 服務(wu)映射(she)到 my.database.example.com
apiVersion: v1
kind: Service
metadata:
name: my-service
namespace: prod
spec:
type: ExternalName
externalName: my.database.example.com
說明: ExternalName 接受 IPv4 地址字符串,但作為包含數字的 DNS 名稱,而不是 IP 地址。 類似于 IPv4 地址的外部名稱不能由 CoreDNS 或 ingress-nginx 解析,因為外部名稱旨在指定規范的 DNS 名稱。 要對 IP 地址進行硬編碼,請考慮使用 headless Services。