Docker Kubernetes 服务发现原理详解

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插件来提供服务。

相关文章
相关标签/搜索