硬件环境:
两台虚拟机,
10.10.20.203 部署docker、etcd、flannel、kube-apiserver、kube-controller-manager、kube-scheduler
10.10.20.206 部署docker、flannel、kubelet、kube-proxy
软件环境:
kubernetes:1.3.3
DNS-etcd:index.tenxcloud.com/google_containers/etcd:2.2.5
kube2sky:index.tenxcloud.com/google_containers/kube2sky:1.15
skyDNS:index.tenxcloud.com/google_containers/skydns:2015-10-13-8c72f8c
1、创建dns-rc.yaml
apiVersion: v1 kind: ReplicationController metadata: name: dns-rc-test labels: k8s-app: dns version: v8 kubernetes.io/cluster-service: "true" spec: replicas: 1 selector: k8s-app: dns version: v8 kubernetes.io/cluster-service: "true" template: metadata: labels: k8s-app: dns version: v8 kubernetes.io/cluster-service: "true" spec: containers: - name: etcd image: 10.10.20.202/library/etcd:2.2.5 command: - /usr/local/bin/etcd - -data-dir - /var/etcd/data - -listen-client-urls - http://127.0.0.1:2379,http://127.0.0.1:4001 - -advertise-client-urls - http://127.0.0.1:2379,http://127.0.0.1:4001 - -initial-cluster-token - skydns-etcd volumeMounts: - name : etcd-storage mountPath: /var/etcd/data - name: kube2sky image: 10.10.20.202/library/kube2sky:1.15 args: - --kube-master_url=http://10.10.20.203:8080 #改换实际的master地址 - --domain=cluster.local - name: skydns image: 10.10.20.202/library/skydns:2015-10-13 args: - -machines=http://127.0.0.1:4001 - -addr=0.0.0.0:53 - -domain=cluster.local ports: - containerPort: 53 name: dns-udp protocol: UDP - containerPort: 53 name: dns-tcp protocol: TCP volumes: - name: etcd-storage emptyDir: {} dnsPolicy: Default
2、创建dns-service.yaml
apiVersion: v1 kind: Service metadata: name: dns-svc-test labels: k8s-app: dns kubernetes.io/cluster-service: "true" kubernetes.io/name: "DNStest" spec: selector: k8s-app: dns clusterIP: 10.254.159.10 #在service-cluster-ip-range范围取一个值 ports: - name: dns-udp port: 53 protocol: UDP - name: dns-tcp port: 53 protocol: TCP
3、部署dns
kubectl create -f /root/k8s/dns/dns-rc.yaml
kubectl create -f /root/k8s/dns/dns-service.yaml
4、在kubelet的启动脚本中增加cluster-dns=10.254.159.10和cluster-domain=cluster.local,如下,并重启kubelet。
kubelet --logtostderr=true --v=0 --address=0.0.0.0 --api-servers=http://10.10.20.203:8080 --pod-infra-container-image=index.tenxcloud.com/google_containers/pause-amd64:3.0 --cluster-dns=10.254.159.10 --cluster-domain=cluster.local >> /var/log/kubelet.log 2>&1 &
5、进入一个pod中执行域名解析和telnet指令,验证域名是否可用
[root@k8s-master bin]# kubectl get service NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE dns-svc-test 10.254.159.10 <none> 53/UDP,53/TCP 4d emp-authc-service 10.254.64.191 <nodes> 11111/TCP 40m emp-portal-service 10.254.20.196 <nodes> 8080/TCP 39m kubernetes 10.254.0.1 <none> 443/TCP 10d postgresql-service 10.254.161.247 <nodes> 5432/TCP 2h redis-service 10.254.160.1 <nodes> 6379/TCP 1h zookeeper-service 10.254.229.137 <nodes> 2181/TCP 2h [root@k8s-master bin]# kubectl exec centos-master-fy8r4 -i -t -- bash -il [root@centos-master-fy8r4 /]# nslookup postgresql-service Server: 10.254.159.10 Address: 10.254.159.10#53 Name: postgresql-service.default.svc.cluster.local Address: 10.254.161.247 [root@centos-master-fy8r4 /]# telnet postgresql-service 5432 Trying 10.254.161.247... Connected to postgresql-service. Escape character is '^]'.