上次搭建了kubernetes最核心最基础的服务,也学习了一些命令,如今我们在这个之上proxy和dns,虽然这2个功能很是很是的重要,可是从技术层面他们属于kubernetes的附加组件,能够有也能够没有,若是须要service的功能能够添加kubernetes proxy,若是须要dns经过名字解析服务就须要增长kubernetes dns组件。非必须的功能作成组件的形式,而不是必须安装的形式。这也说明了kubernetes的设计,尽可能避免这种强依赖,首先就为集群增长proxy的功能。源码:
github.com/limingios/m… k8s分支和
github.com/limingios/k… 基础集群的搭建查看32节到34节
为集群增长service功能 - kube-proxy(工做节点102,103)
简介
每台工做节点上都应该运行一个kube-proxy服务,它监听API server中service和endpoint的变化状况,并经过iptables等来为服务配置负载均衡,是让咱们的服务在集群外能够被访问到的重要方式。
部署
mkdir -p /var/lib/kube-proxy
cp ~/kubernetes-starter/target/worker-node/kube-proxy.service /lib/systemd/system/
cp ~/kubernetes-starter/target/worker-node/kube-proxy.kubeconfig /etc/kubernetes/
systemctl enable kube-proxy.service
service kube-proxy start
journalctl -f -u kube-proxy复制代码
9.3 重点配置说明
[Unit] Description=Kubernetes Kube-Proxy Server ... [Service] #工做目录 WorkingDirectory=/var/lib/kube-proxy ExecStart=/home/michael/bin/kube-proxy \ #监听地址 --bind-address=192.168.1.103 \ #依赖的配置文件,描述了kube-proxy如何访问api-server --kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig \ ...
[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target
[Service]
WorkingDirectory=/var/lib/kube-proxy
ExecStart=/root/bin/kube-proxy \
--bind-address=192.168.66.102 \
--hostname-override=192.168.66.102 \
--kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig \
--logtostderr=true \
--v=2
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target复制代码
[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target
[Service]
WorkingDirectory=/var/lib/kube-proxy
ExecStart=/root/bin/kube-proxy \
--bind-address=192.168.66.103 \
--hostname-override=192.168.66.103 \
--kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig \
--logtostderr=true \
--v=2
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target复制代码
kube-proxy.kubeconfig 配置了kube-proxy如何访问api-server,内容与kubelet雷同,再也不赘述。
操练service
api的时候就创建的一个service,查看类型是Type:ClusterIp,它有一个虚拟的Ip(10.68.0.1)至关于给apiservice作成了一个服务,一个是集群内的其余组件,能够经过这个ip直接进行访问,不须要依赖具体worker的ip地址了,负载均衡,apiserver的高可用,经过apiserver的ip来完成。上次访问对应的deployment,都是启动代理,而后另外一个窗口经过curl的方式来进行访问。
kubectl get services
kubectl describe serivce kubernetes复制代码
感受比较乱,命令去执行的2个端口target-port 和port ,在执行service的时候又出现了一个端口,
-
随机的端口23492节点启动的端口,能够经过端口访问服务
-
target-port 这个端口实际启动的端口
-
port 虚拟ip下须要访问的端口
kubectl expose deploy kubernetes-bootcamp --type="NodePort" --target-port=8080 --port=80复制代码
curl http://192.168.66.103:23492复制代码
经过docker ps 找到容器id,进入容器exec -it 后
curl http://10.68.99.134:80复制代码
都是能够curl通的这是符合k8s的规范的pod之间是互通的。
vi nginx-service.yamlapiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
ports:
- port: 8080
targetPort: 80
nodePort: 20000
selector:
app: nginx
type: NodePort复制代码
为集群增长dns功能 - kube-dns(app)
简介
kube-dns为Kubernetes集群提供命名服务,主要用来解析集群服务名和Pod的hostname。目的是让pod能够经过名字访问到集群内服务。它经过添加A记录的方式实现名字和service的解析。普通的service会解析到service-ip。headless service会解析到pod列表。
部署
经过kubernetes应用的方式部署 kube-dns.yaml文件基本与官方一致(除了镜像名不一样外)。 里面配置了多个组件,之间使用”---“分隔
kubectl create -f target/services/kube-dns.yaml复制代码
kubectl -n kube-system get svc
说白了 只要运行dns服务,就能够直接用啦。
PS:基础集群的没有通过认证受权,也就基本完成了,这些组件就是每一个k8s公司所必须的,很是重要很是核心,整个集群的搭建让老铁对k8s有个深刻的了解,了解每一个组件都是干啥用的,让老铁以为k8s没有那么复杂,经过上边的安装,确实没有mesos和swarm那么简单,可是也没有那么复杂。必定要熟悉k8s的命令。下次了解下认证的受权。