From 954bdf83c1ec49c624a91277478e3bee3dfd1af5 Mon Sep 17 00:00:00 2001 From: yangchuanhu Date: Wed, 8 Aug 2018 19:29:53 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9B=86=E7=BE=A4=E5=86=85=E9=83=A8=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E5=8F=91=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dnsdemo/test-api.yaml | 30 +++ dnsdemo/test-nginx.yaml | 33 +++ ...15\345\212\241\345\217\221\347\216\260.md" | 253 ++++++++++++++++++ docs/images/dns.png | Bin 0 -> 28795 bytes docs/images/kubedns.jpg | Bin 0 -> 30904 bytes 5 files changed, 316 insertions(+) create mode 100644 dnsdemo/test-api.yaml create mode 100644 dnsdemo/test-nginx.yaml create mode 100644 "docs/39. \346\234\215\345\212\241\345\217\221\347\216\260.md" create mode 100644 docs/images/dns.png create mode 100644 docs/images/kubedns.jpg diff --git a/dnsdemo/test-api.yaml b/dnsdemo/test-api.yaml new file mode 100644 index 0000000..eb9a022 --- /dev/null +++ b/dnsdemo/test-api.yaml @@ -0,0 +1,30 @@ +apiVersion: v1 +kind: Pod +metadata: + name: test-api +spec: + containers: + - name: test-api + image: busybox + imagePullPolicy: IfNotPresent + command: ["/bin/sh", "-c", "env"] + dnsPolicy: ClusterFirst + +node01 +kube-dns CM +cluster.local kubedns +www.haimaxy.com -> node01 + +kube-dns CM +kube-dns ->.cluster.local ->kubedns + -> acme.local -> 1.2.3.4 + -> www.haimaxy.com -> [8.8.8.8, 8.8.4.4] + +nginx-service.default.svc.cluster.local +nginx-service.default +nginx-service + +redis-0.redis-service.kube-ops.svc.cluster.local +redis-1.redis-service.kube-ops.svc.cluster.local + +clusterIP \ No newline at end of file diff --git a/dnsdemo/test-nginx.yaml b/dnsdemo/test-nginx.yaml new file mode 100644 index 0000000..4fd1b4b --- /dev/null +++ b/dnsdemo/test-nginx.yaml @@ -0,0 +1,33 @@ +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: nginx-deploy + labels: + k8s-app: nginx-demo +spec: + replicas: 2 + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx:1.7.9 + imagePullPolicy: IfNotPresent + ports: + - containerPort: 80 + +--- +apiVersion: v1 +kind: Service +metadata: + name: nginx-service + labels: + names: nginx-service +spec: + selector: + app: nginx + ports: + - port: 5000 + targetPort: 80 \ No newline at end of file diff --git "a/docs/39. \346\234\215\345\212\241\345\217\221\347\216\260.md" "b/docs/39. \346\234\215\345\212\241\345\217\221\347\216\260.md" new file mode 100644 index 0000000..de85d5c --- /dev/null +++ "b/docs/39. \346\234\215\345\212\241\345\217\221\347\216\260.md" @@ -0,0 +1,253 @@ +# 内部服务发现 +前面我们给大家讲解了 Service 的用法,我们可以通过 Service 生成的 ClusterIP(VIP)来访问 Pod 提供的服务,但是在使用的时候还有一个问题:我们怎么知道某个应用的 VIP 呢?比如我们有两个应用,一个是 api 应用,一个是 db 应用,两个应用都是通过 Deployment 进行管理的,并且都通过 Service 暴露出了端口提供服务。api 需要连接到 db 这个应用,我们只知道 db 应用的名称和 db 对应的 Service 的名称,但是并不知道它的 VIP 地址,我们前面的 Service 课程中是不是学习到我们通过 ClusterIP 就可以访问到后面的 Pod 服务,如果我们知道了 VIP 的地址是不是就行了? + +## apiserver +我们知道可以从 apiserver 中直接查询获取到对应 service 的后端 Endpoints信息,所以最简单的办法是从 apiserver 中直接查询,如果偶尔一个特殊的应用,我们通过 apiserver 去查询到 Service 后面的 Endpoints 直接使用是没问题的,但是如果每个应用都在启动的时候去查询依赖的服务,这不但增加了应用的复杂度,这也导致了我们的应用需要依赖 Kubernetes 了,耦合度太高了,不具有通用性。 + + +## 环境变量 +为了解决上面的问题,在之前的版本中,Kubernetes 采用了环境变量的方法,每个 Pod 启动的时候,会通过环境变量设置所有服务的 IP 和 port 信息,这样 Pod 中的应用可以通过读取环境变量来获取依赖服务的地址信息,这种方法使用起来相对简单,但是有一个很大的问题就是依赖的服务必须在 Pod 启动之前就存在,不然是不会被注入到环境变量中的。比如我们首先创建一个 Nginx 服务:(test-nginx.yaml) +```yaml +apiVersion: apps/v1beta1 +kind: Deployment +metadata: + name: nginx-deploy + labels: + k8s-app: nginx-demo +spec: + replicas: 2 + template: + metadata: + labels: + app: nginx + spec: + containers: + - name: nginx + image: nginx:1.7.9 + ports: + - containerPort: 80 + +--- +apiVersion: v1 +kind: Service +metadata: + name: nginx-service + labels: + name: nginx-service +spec: + ports: + - port: 5000 + targetPort: 80 + selector: + app: nginx +``` + +创建上面的服务: +```shell +$ kubectl create -f test-nginx.yaml +deployment.apps "nginx-deploy" created +service "nginx-service" created +$ kubectl get pods +NAME READY STATUS RESTARTS AGE +... +nginx-deploy-75675f5897-47h4t 1/1 Running 0 53s +nginx-deploy-75675f5897-mmm8w 1/1 Running 0 53s +... +$ kubectl get svc +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +... +nginx-service ClusterIP 10.107.225.42 5000/TCP 1m +... +``` + +我们可以看到两个 Pod 和一个名为 nginx-service 的服务创建成功了,该 Service 监听的端口是 5000,同时它会把流量转发给它代理的所有 Pod(我们这里就是拥有 app: nginx 标签的两个 Pod)。 + +现在我们再来创建一个普通的 Pod,观察下该 Pod 中的环境变量是否包含上面的 nginx-service 的服务信息:(test-pod.yaml) +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: test-pod +spec: + containers: + - name: test-service-pod + image: busybox + command: ["/bin/sh", "-c", "env"] +``` + +然后创建该测试的 Pod: +```yaml +$ kubectl create -f test-pod.yaml +pod "test-pod" created +``` + +等 Pod 创建完成后,我们查看日志信息: +```shell +$ kubectl logs test-pod +... +KUBERNETES_PORT=tcp://10.96.0.1:443 +KUBERNETES_SERVICE_PORT=443 +HOSTNAME=test-pod +HOME=/root +NGINX_SERVICE_PORT_5000_TCP_ADDR=10.107.225.42 +NGINX_SERVICE_PORT_5000_TCP_PORT=5000 +NGINX_SERVICE_PORT_5000_TCP_PROTO=tcp +KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1 +PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +NGINX_SERVICE_SERVICE_HOST=10.107.225.42 +NGINX_SERVICE_PORT_5000_TCP=tcp://10.107.225.42:5000 +KUBERNETES_PORT_443_TCP_PORT=443 +KUBERNETES_PORT_443_TCP_PROTO=tcp +NGINX_SERVICE_SERVICE_PORT=5000 +NGINX_SERVICE_PORT=tcp://10.107.225.42:5000 +KUBERNETES_SERVICE_PORT_HTTPS=443 +KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443 +KUBERNETES_SERVICE_HOST=10.96.0.1 +PWD=/ +... +``` + +我们可以看到打印了很多环境变量处理,其中就包括我们刚刚创建的 nginx-service 这个服务,有 HOST、PORT、PROTO、ADDR 等,也包括其他已经存在的 Service 的环境变量,现在如果我们需要在这个 Pod 里面访问 nginx-service 的服务,我们是不是可以直接通过 NGINX_SERVICE_SERVICE_HOST 和 NGINX_SERVICE_SERVICE_PORT 就可以了,但是我们也知道如果这个 Pod 启动起来的时候如果 nginx-service 服务还没启动起来,在环境变量中我们是无法获取到这些信息的,当然我们可以通过 initContainer 之类的方法来确保 nginx-service 启动后再启动 Pod,但是这种方法毕竟增加了 Pod 启动的复杂性,所以这不是最优的方法。 + + +## KubeDNS +由于上面环境变量这种方式的局限性,我们需要一种更加智能的方案,其实我们可以自己想学一种比较理想的方案:那就是可以直接使用 Service 的名称,因为 Service 的名称不会变化,我们不需要去关心分配的 ClusterIP 的地址,因为这个地址并不是固定不变的,所以如果我们直接使用 Service 的名字,然后对应的 ClusterIP 地址的转换能够自动完成就很好了。我们知道名字和 IP 直接的转换是不是和我们平时访问的网站非常类似啊?他们之间的转换功能通过 DNS 就可以解决了,同样的,Kubernetes 也提供了 DNS 的方案来解决上面的服务发现的问题。 + +### kubedns 介绍 +DNS 服务不是一个独立的系统服务,而是作为一种 addon 插件而存在,也就是说不是 Kubernetes 集群必须安装的,当然我们强烈推荐安装,可以将这个插件看成是一种运行在 Kubernetes 集群上的一直比较特殊的应用,现在比较推荐的两个插件:kube-dns 和 CoreDNS。我们在前面使用 kubeadm 搭建集群的时候直接安装的 kube-dns 插件,如果不记得了可以回头去看一看。当然如果我们想使用 CoreDNS 的话也很方便,只需要执行下面的命令即可: +```shell +$ kubeadm init --feature-gates=CoreDNS=true +``` + +Kubernetes DNS pod 中包括 3 个容器,可以通过 kubectl 工具查看: +```shell +$ kubectl get pods -n kube-system +NAME READY STATUS RESTARTS AGE +... +kube-dns-5868f69869-zp5kz 3/3 Running 0 19d +... +``` + +READY 一栏可以看到是 3/3,用如下命令可以很清楚的看到 kube-dns 包含的3个容器: +```shell +$ kubectl describe pod kube-dns-5868f69869-zp5kz -n kube-system +``` + +kube-dns、dnsmasq-nanny、sidecar 这3个容器分别实现了什么功能? + +* kubedns: kubedns 基于 SkyDNS 库,通过 apiserver 监听 Service 和 Endpoints 的变更事件同时也同步到本地 Cache,实现了一个实时的 Kubernetes 集群内 Service 和 Pod 的 DNS服务发现 +* dnsmasq: dsnmasq 容器则实现了 DNS 的缓存功能(在内存中预留一块默认大小为 1G 的地方,保存当前最常用的 DNS 查询记录,如果缓存中没有要查找的记录,它会到 kubedns 中查询,并把结果缓存起来),通过监听 ConfigMap 来动态生成配置 +* sider: sidecar 容器实现了可配置的 DNS 探测,并采集对应的监控指标暴露出来供 prometheus 使用 + +![kube dns](./images/kubedns.jpg) + +### 对 Pod 的影响 + +DNS Pod 具有静态 IP 并作为 Kubernetes 服务暴露出来。该静态 IP 被分配后,kubelet 会将使用 `--cluster-dns = `参数配置的 DNS 传递给每个容器。DNS 名称也需要域名,本地域可以使用参数`--cluster-domain = `在 kubelet 中配置。 + +我们说 dnsmasq 容器通过监听 ConfigMap 来动态生成配置,可以自定义存根域和上下游域名服务器。 + +例如,下面的 ConfigMap 建立了一个 DNS 配置,它具有一个单独的存根域和两个上游域名服务器: +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + name: kube-dns + namespace: kube-system +data: + stubDomains: | + {"acme.local": ["1.2.3.4"]} + upstreamNameservers: | + ["8.8.8.8", "8.8.4.4"] +``` +按如上说明,具有**.acme.local**后缀的 DNS 请求被转发到 DNS 1.2.3.4。Google 公共 DNS 服务器 为上游查询提供服务。下表描述了具有特定域名的查询如何映射到它们的目标 DNS 服务器: + +| 域名 | 响应查询的服务器 | +| ------------------------------------ | ------------------------------------- | +| kubernetes.default.svc.cluster.local | kube-dns | +| foo.acme.local | 自定义 DNS (1.2.3.4) | +| widget.com | 上游 DNS (8.8.8.8, 8.8.4.4,其中之一) | + + +另外我们还可以为每个 Pod 设置 DNS 策略。 当前 Kubernetes 支持两种 Pod 特定的 DNS 策略:“Default” 和 “ClusterFirst”。 可以通过 dnsPolicy 标志来指定这些策略。 + +> 注意:**Default** 不是默认的 DNS 策略。如果没有显式地指定**dnsPolicy**,将会使用 **ClusterFirst** + +* 如果 dnsPolicy 被设置为 “Default”,则名字解析配置会继承自 Pod 运行所在的节点。自定义上游域名服务器和存根域不能够与这个策略一起使用 +* 如果 dnsPolicy 被设置为 “ClusterFirst”,这就要依赖于是否配置了存根域和上游 DNS 服务器 + * 未进行自定义配置:没有匹配上配置的集群域名后缀的任何请求,例如 “www.kubernetes.io”,将会被转发到继承自节点的上游域名服务器。 + * 进行自定义配置:如果配置了存根域和上游 DNS 服务器(类似于 前面示例 配置的内容),DNS 查询将基于下面的流程对请求进行路由: + * 查询首先被发送到 kube-dns 中的 DNS 缓存层。 + * 从缓存层,检查请求的后缀,并根据下面的情况转发到对应的 DNS 上: + * 具有集群后缀的名字(例如 “.cluster.local”):请求被发送到 kubedns。 + * 具有存根域后缀的名字(例如 “.acme.local”):请求被发送到配置的自定义 DNS 解析器(例如:监听在 1.2.3.4)。 + * 未能匹配上后缀的名字(例如 “widget.com”):请求被转发到上游 DNS(例如:Google 公共 DNS 服务器,8.8.8.8 和 8.8.4.4)。 +![kube dns](./images/dns.png) + + +### 域名格式 +我们前面说了如果我们建立的 Service 如果支持域名形式进行解析,就可以解决我们的服务发现的功能,那么利用 kubedns 可以将 Service 生成怎样的 DNS 记录呢? + +* 普通的 Service:会生成 servicename.namespace.svc.cluster.local 的域名,会解析到 Service 对应的 ClusterIP 上,在 Pod 之间的调用可以简写成 servicename.namespace,如果处于同一个命名空间下面,甚至可以只写成 servicename 即可访问 +* Headless Service:无头服务,就是把 clusterIP 设置为 None 的,会被解析为指定 Pod 的 IP 列表,同样还可以通过 podname.servicename.namespace.svc.cluster.local 访问到具体的某一个 Pod。 + +> CoreDNS 实现的功能和 KubeDNS 是一致的,不过 CoreDNS 的所有功能都集成在了同一个容器中,在最新版的1.11.0版本中官方已经推荐使用 CoreDNS了,大家也可以安装 CoreDNS 来代替 KubeDNS,其他使用方法都是一致的:https://coredns.io/ + +## 测试 +现在我们来使用一个简单 Pod 来测试下 Service 的域名访问: +```shell +$ kubectl run --rm -i --tty test-dns --image=busybox /bin/sh +If you don't see a command prompt, try pressing enter. +/ # cat /etc/resolv.conf +nameserver 10.96.0.10 +search default.svc.cluster.local svc.cluster.local cluster.local +options ndots:5 +/ # +``` + +我们进入到 Pod 中,查看**/etc/resolv.conf**中的内容,可以看到 nameserver 的地址**10.96.0.10**,该 IP 地址即是在安装 kubedns 插件的时候集群分配的一个固定的静态 IP 地址,我们可以通过下面的命令进行查看: +```shell +$ kubectl get svc kube-dns -n kube-system +NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE +kube-dns ClusterIP 10.96.0.10 53/UDP,53/TCP 62d +``` + +也就是说我们这个 Pod 现在默认的 nameserver 就是 kubedns 的地址,现在我们来访问下前面我们创建的 nginx-service 服务: +```shell +/ # wget -q -O- nginx-service.default.svc.cluster.local + +``` + +可以看到上面我们使用 wget 命令去访问 nginx-service 服务的域名的时候被 hang 住了,没有得到期望的结果,这是因为上面我们建立 Service 的时候暴露的端口是 5000: +```shell +/ # wget -q -O- nginx-service.default.svc.cluster.local:5000 + + + +Welcome to nginx! + + + +

Welcome to nginx!

+

If you see this page, the nginx web server is successfully installed and +working. Further configuration is required.

+ +

For online documentation and support please refer to +nginx.org.
+Commercial support is available at +nginx.com.

+ +

Thank you for using nginx.

+ + +``` + +加上 5000 端口,就正常访问到服务,再试一试访问:nginx-service.default.svc、nginx-service.default、nginx-service,不出意外这些域名都可以正常访问到期望的结果。 + +到这里我们是不是就实现了在集群内部通过 Service 的域名形式进行互相通信了,大家下去试着看看访问不同 namespace 下面的服务呢?下节课我们来给大家讲解使用 ingress 来实现集群外部的服务发现功能。 diff --git a/docs/images/dns.png b/docs/images/dns.png new file mode 100644 index 0000000000000000000000000000000000000000..b048875f5346b1303f94772fac2f99168e6e525c GIT binary patch literal 28795 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 xG+ZaNh0_M-6oRjz=d#LAijl7Z{s#xFZ!7=+ literal 0 HcmV?d00001 diff --git a/docs/images/kubedns.jpg b/docs/images/kubedns.jpg new file mode 100644 index 0000000000000000000000000000000000000000..001c79b91c3e1b4e147c3b5386019fdbc918e78f GIT binary patch literal 30904 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 literal 0 HcmV?d00001 -- GitLab