Docker Kubernetes 服務發現原理詳解


Docker Kubernetes  服務發現原理詳解

服務發現支持Service環境變量和DNS兩種模式:

一、環境變量 (默認)

當一個Pod運行到Node,kubelet會為每個容器添加一組環境變量,Pod容器中程序就可以使用這些環境變量發現Service。

環境變量名格式如下:

{SVCNAME}_SERVICE_HOST
{SVCNAME}_SERVICE_PORT

注:其中服務名和端口名轉為大寫,連字符轉換為下划線。

限制:

1)Pod和Service的創建順序是有要求的,Service必須在Pod創建之前被創建,否則環境變量不會設置到Pod中。

2)Pod只能獲取同Namespace中的Service環境變量。

案例:

# 查看容器內的變量
kubectl exec nginx-deployment-66579795d7-2thc9 env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=nginx-deployment-66579795d7-2thc9
NGINX_SERVICE_PORT=88
NGINX_SERVICE_PORT_888_TCP_PROTO=tcp
NGINX_SERVICE_PORT_888_TCP_ADDR=10.10.10.11
KUBERNETES_PORT=tcp://10.10.10.1:443
NGINX_PORT_88_TCP_PORT=88
NGINX_DEPLOYMENT_SERVICE_HOST=10.10.10.12
NGINX_DEPLOYMENT_PORT_80_TCP=tcp://10.10.10.12:80
NGINX_SERVICE2_SERVICE_HOST=10.10.10.39
HOME=/root
...
環境變量

注:Kubernetes將信息通過變量存入容器中

注:每個容器間的通信地址都會再容器創建時記錄到容器當中。


二、DNS(推薦)

DNS服務監視Kubernetes API,為每一個Service創建DNS記錄用於域名解析。這樣Pod中就可以通過DNS域名獲取Service的訪問地址。

DNS服務發現

放入kuber cstenmu默認的系統命名空間中。

部署:www.kubernetes.io

注:DNS需要下載DNS插件來提供服務。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM