kubernetes集群命令kube-proxy详解

前言

proxy和dns这2个功能非常非常的重要,但是从技术层面他们属于kubernetes的附加组件,可以有也可以没有,如果需要service的功能可以添加kubernetes proxy,如果需要dns通过名字解析服务就需要增加kubernetes dns组件。非必须的功能做成组件的形式,而不是必须安装的形式。这也说明了kubernetes的设计,尽量避免这种强依赖,首先就为集群增加proxy的功能。

为集群增加service功能 - kube-proxy(工作节点node52,node53)

简介:每台工作节点上都应该运行一个kube-proxy服务,它监听API server中service和endpoint的变化情况,并通过iptables等来为服务配置负载均衡,是让我们的服务在集群外可以被访问到的重要方式。

  • 部署:通过系统服务方式部署
#确保工作目录存在
mkdir -p /var/lib/kube-proxy
#复制kube-proxy服务配置文件
cp ~/kubernetes-starter/target/worker-node/kube-proxy.service /lib/systemd/system/
#复制kube-proxy依赖的配置文件
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

  • 重点配置说明

kube-proxy.service

[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 \
...

152和153的kube-proxy

[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.18.152 \
  --hostname-override=192.168.66.152 \
  --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相关练习

  • 查看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

 

  • deploy升级成为service

感觉比较乱,命令去执行的2个端口target-port 和port ,在执行service的时候又出现了一个端口,

  1. 随机的端口23492节点启动的端口,可以通过端口访问服务
  2. target-port 这个端口实际启动的端口
  3. port 虚拟ip下需要访问的端口
kubectl expose deploy kubernetes-bootcamp --type="NodePort" --target-port=8080 --port=80

  • worker访问
curl http://192.168.66.103:23492

  • 进入容器内部访问的话

通过docker ps 找到容器id,进入容器exec -it 后

curl http://10.68.99.134:80

都是可以curl通的这是符合k8s的规范的pod之间是互通的。

  • 通过yaml文件将pod生成services
vi nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  ports:
  - port: 8080
    targetPort: 80
    nodePort: 20000
  selector:
    app: nginx
  type: NodePort

 

发布了382 篇原创文章 · 获赞 306 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/lixinkuan328/article/details/103979866