Docker Kubernetes 服務發現原理詳解nginx
服務發現支持Service環境變量和DNS兩種模式:tcp
1、環境變量 (默認)ide
當一個Pod運行到Node,kubelet會爲每一個容器添加一組環境變量,Pod容器中程序就能夠使用這些環境變量發現Service。spa
環境變量名格式以下:插件
{SVCNAME}_SERVICE_HOST
{SVCNAME}_SERVICE_PORT
注:其中服務名和端口名轉爲大寫,連字符轉換爲下劃線。code
限制:blog
1)Pod和Service的建立順序是有要求的,Service必須在Pod建立以前被建立,不然環境變量不會設置到Pod中。部署
2)Pod只能獲取同Namespace中的Service環境變量。kubernetes
案例:域名
# 查看容器內的變量
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將信息經過變量存入容器中
注:每一個容器間的通訊地址都會再容器建立時記錄到容器當中。
2、DNS(推薦)
DNS服務監視Kubernetes API,爲每個Service建立DNS記錄用於域名解析。這樣Pod中就能夠經過DNS域名獲取Service的訪問地址。
DNS服務發現
放入kuber cstenmu默認的系統命名空間中。
部署:www.kubernetes.io
注:DNS須要下載DNS插件來提供服務。