摘要:
  kube-proxy的作用主要是负责service的实现,具体来说,就是实现了内部从pod到service和外部的从node port向service的访问

新版本目前 kube-proxy 组件全部采用 ipvs 方式负载,所以为了 kube-proxy 能正常工作需要预先处理一下 ipvs 配置以及相关依赖(每台 node 都要处理)
  1. ## 开启ipvs
  2. [root@k8s-master01 ~]# ansible k8s-node -m shell -a "yum install -y ipvsadm ipset conntrack"
  3. [root@k8s-master01 ~]# ansible k8s-node -m shell -a 'modprobe -- ip_vs'
  4. [root@k8s-master01 ~]# ansible k8s-node -m shell -a 'modprobe -- ip_vs_rr'
  5. [root@k8s-master01 ~]# ansible k8s-node -m shell -a 'modprobe -- ip_vs_wrr'
  6. [root@k8s-master01 ~]# ansible k8s-node -m shell -a 'modprobe -- ip_vs_sh'
  7. [root@k8s-master01 ~]# ansible k8s-node -m shell -a 'modprobe -- nf_conntrack_ipv4'
1)创建kube-proxy证书请求

  1. [root@k8s-master01 ~]# vim /opt/k8s/certs/kube-proxy-csr.json
  2. {
  3. "CN": "system:kube-proxy",
  4. "hosts": [],
  5. "key": {
  6. "algo": "rsa",
  7. "size":
  8. },
  9. "names": [
  10. {
  11. "C": "CN",
  12. "ST": "ShangHai",
  13. "L": "ShangHai",
  14. "O": "system:kube-proxy",
  15. "OU": "System"
  16. }
  17. ]
  18. }
2)生成kube-proxy证书与私钥

  1. [root@k8s-master01 ~]# cd /opt/k8s/certs/
  2. [root@k8s-master01 certs]# cfssl gencert -ca=/etc/kubernetes/ssl/ca.pem \
  3. -ca-key=/etc/kubernetes/ssl/ca-key.pem \
  4. -config=/opt/k8s/certs/ca-config.json \
  5. -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy
  6. // :: [INFO] generate received request
  7. // :: [INFO] received CSR
  8. // :: [INFO] generating key: rsa-
  9. // :: [INFO] encoded CSR
  10. // :: [INFO] signed certificate with serial number
  11. // :: [WARNING] This certificate lacks a "hosts" field. This makes it unsuitable for
  12. websites. For more information see the Baseline Requirements for the Issuance and Management
  13. of Publicly-Trusted Certificates, v.1.1., from the CA/Browser Forum (https://cabforum.org);
  14. specifically, section 10.2. ("Information Requirements").
3)查看证书生成

  1. [root@k8s-master01 certs]# ll kube-proxy*
  2. -rw-r--r-- root root Apr : kube-proxy.csr
  3. -rw-r--r-- root root Apr : kube-proxy-csr.json
  4. -rw------- root root Apr : kube-proxy-key.pem
  5. -rw-r--r-- root root Apr : kube-proxy.pem
4)证书分发

  1. [root@k8s-master01 certs]# ansible k8s-node -m copy -a 'src=/opt/k8s/certs/kube-proxy-key.pem dest=/etc/kubernetes/ssl/'
  2. [root@k8s-master01 certs]# ansible k8s-node -m copy -a 'src=/opt/k8s/certs/kube-proxy.pem dest=/etc/kubernetes/ssl/'
5)创建kube-proxy kubeconfig文件
kube-proxy组件连接 apiserver 所需配置文件
  1. ## 配置集群参数
  2. [root@k8s-master01 ~]# kubectl config set-cluster kubernetes \
  3. --certificate-authority=/etc/kubernetes/ssl/ca.pem \
  4. --embed-certs=true \
  5. --server=https://127.0.0.1:6443 \
  6. --kubeconfig=kube-proxy.kubeconfig
  7. Cluster "kubernetes" set.
  8. ## 配置客户端认证参数
  9. [root@k8s-master01 ~]# kubectl config set-credentials system:kube-proxy \
  10. --client-certificate=/opt/k8s/certs/kube-proxy.pem \
  11. --embed-certs=true \
  12. --client-key=/opt/k8s/certs/kube-proxy-key.pem \
  13. --kubeconfig=kube-proxy.kubeconfig
  14. User "system:kube-proxy" set.
  15. ## 配置集群上下文
  16. [root@k8s-master01 ~]# kubectl config set-context system:kube-proxy@kubernetes \
  17. --cluster=kubernetes \
  18. --user=system:kube-proxy \
  19. --kubeconfig=kube-proxy.kubeconfig
  20. Context "system:kube-proxy@kubernetes" created.
  21. ## 配置集群默认上下文
  22. [root@k8s-master01 ~]# kubectl config use-context system:kube-proxy@kubernetes --kubeconfig=kube-proxy.kubeconfig
  23. Switched to context "system:kube-proxy@kubernetes".
  24.  
  25. ##配置文件分发至node节点
  26. [root@k8s-master01 ~]# ansible k8s-node -m copy -a 'src=/root/kube-proxy.kubeconfig dest=/etc/kubernetes/config/'
6)配置kube-proxy参数

  1. [root@k8s-master01 ~]# vim /opt/k8s/cfg/kube-proxy.conf
  2. ###
  3. # kubernetes proxy config
  4. # default config should be adequate
  5. # Add your own!
  6. KUBE_PROXY_ARGS=" --bind-address=0.0.0.0 \
  7. --cleanup-ipvs=true \
  8. --cluster-cidr=10.254.0.0/ \
  9. --hostname-override=k8s-node01 \
  10. --healthz-bind-address=0.0.0.0 \
  11. --healthz-port= \
  12. --masquerade-all=true \
  13. --proxy-mode=ipvs \
  14. --ipvs-min-sync-period=5s \
  15. --ipvs-sync-period=5s \
  16. --ipvs-scheduler=wrr \
  17. --kubeconfig=/etc/kubernetes/config/kube-proxy.kubeconfig \
  18. --logtostderr=true \
  19. --v="
  20. ## 分发参数配置文件
  21. ### 修改hostname-override字段所属主机名
    [root@k8s-master01 ~]# ansible k8s-node -m copy -a 'src=/opt/k8s/cfg/kube-proxy.conf dest=/etc/kubernetes/config/'
7)kube-proxy系统服务脚本

  1. [root@k8s-master01 ~]# vim /opt/k8s/unit/kube-proxy.service
    [Unit]
  2. Description=Kubernetes Kube-Proxy Server
  3. Documentation=https://github.com/GoogleCloudPlatform/kubernetes
  4. After=network.target
  5.  
  6. [Service]
  7. EnvironmentFile=-/etc/kubernetes/config/kube-proxy.conf
  8. ExecStart=/usr/local/bin/kube-proxy $KUBE_PROXY_ARGS
  9.  
  10. Restart=on-failure
  11. LimitNOFILE=
  12.  
  13. [Install]
  14. WantedBy=multi-user.target
  15.  
  16. ## 分发至node节点
  17. [root@k8s-master01 ~]# ansible k8s-node -m copy -a 'src=/opt/k8s/unit/kube-proxy.service dest=/usr/lib/systemd/system/'
  18. ## 启动服务
  19. [root@k8s-master01 ~]# ansible k8s-node -m shell -a 'systemctl daemon-reload'
  20. [root@k8s-master01 ~]# ansible k8s-node -m shell -a 'systemctl enable kube-proxy'
  21. [root@k8s-master01 ~]# ansible k8s-node -m shell -a 'systemctl start kube-proxy'
8)查看ipvs路由规则

检查LVS状态,可以看到已经创建了一个LVS集群,将来自10.254.0.1:443的请求转到三台master的6443端口,而6443就是api-server的端口
  1. [root@k8s-node01 ~]# ipvsadm -L -n
  2. IP Virtual Server version 1.2. (size=)
  3. Prot LocalAddress:Port Scheduler Flags
  4. -> RemoteAddress:Port Forward Weight ActiveConn InActConn
  5. TCP 10.254.0.1: wrr
  6. -> 10.10.0.18: Masq
  7. -> 10.10.0.19: Masq
  8. -> 10.10.0.20: Masq

K8S从入门到放弃系列-(10)kubernetes集群之kube-proxy部署的更多相关文章

  1. K8S从入门到放弃系列-(16)Kubernetes集群Prometheus-operator监控部署

    Prometheus Operator不同于Prometheus,Prometheus Operator是 CoreOS 开源的一套用于管理在 Kubernetes 集群上的 Prometheus 控 ...

  2. K8S从入门到放弃系列-(15)Kubernetes集群Ingress部署

    Ingress是kubernetes集群对外提供服务的一种方式.ingress部署相对比较简单,官方把相关资源配置文件,都已经集合到一个yml文件中(mandatory.yaml),镜像地址也修改为q ...

  3. K8S从入门到放弃系列-(14)Kubernetes集群Dashboard部署

    Dashboard是k8s的web界面,用户可以用 Kubernetes Dashboard 部署容器化的应用.监控应用.并对集群本身进行管理,在 Kubernetes Dashboard 中可以查看 ...

  4. K8S从入门到放弃系列-(13)Kubernetes集群mertics-server部署

    集群部署好后,如果我们想知道集群中每个节点及节点上的pod资源使用情况,命令行下可以直接使用kubectl top node/pod来查看资源使用情况,默认此命令不能正常使用,需要我们部署对应api资 ...

  5. K8S从入门到放弃系列-(12)Kubernetes集群Coredns部署

    摘要: 集群其他组件全部完成后我们应当部署集群 DNS 使 service 等能够正常解析,1.11版本coredns已经取代kube-dns成为集群默认dns. 1)下载yaml配置清单 [root ...

  6. K8S从入门到放弃系列-(11)kubernetes集群网络Calico部署

    摘要: 前面几个篇幅,已经介绍master与node节点集群组件部署,由于K8S本身不支持网络,当 node 全部启动后,由于网络组件(CNI)未安装会显示为 NotReady 状态,需要借助第三方网 ...

  7. K8S从入门到放弃系列-(9)kubernetes集群之kubelet部署

    摘要: Kubelet组件运行在Node节点上,维持运行中的Pods以及提供kuberntes运行时环境,主要完成以下使命: 1.监视分配给该Node节点的pods 2.挂载pod所需要的volume ...

  8. K8S从入门到放弃系列-(7)kubernetes集群之kube-scheduler部署

    摘要: 1.Kube-scheduler作为组件运行在master节点,主要任务是把从kube-apiserver中获取的未被调度的pod通过一系列调度算法找到最适合的node,最终通过向kube-a ...

  9. K8S从入门到放弃系列-(6)kubernetes集群之kube-controller-manager部署

    摘要: 1.Kubernetes控制器管理器是一个守护进程它通过apiserver监视集群的共享状态,并进行更改以尝试将当前状态移向所需状态. 2.kube-controller-manager是有状 ...

随机推荐

  1. NetworkX系列教程(6)-对graph进行操作

    小书匠Graph图论 graph生成后,除了有查看操作,还有移除等操作,还有其他更多操作,具体可以看这里.下面将比较graph操作前后的不同. 目录: 7.对图进行操作 7.1移除某些节点和边 7.2 ...

  2. python qq发消息

    # 原理是先将需要发送的文本放到剪贴板中,然后将剪贴板内容发送到qq窗口 # 之后模拟按键发送enter键发送消息 import win32gui import win32con import win ...

  3. python去掉字符串中重复字符的方法

      If order does not matter, you can use   foo = "mppmt" "".join(set(foo)) set() ...

  4. 前端逼死强迫症系列之javascript续集

    一.javascript函数 1.普通函数 function func(){ } 2.匿名函数 setInterval(function(){ console.log(123); },5000) 3. ...

  5. lintcode刷题笔记(一)

    最近开始刷lintcode,记录下自己的答案,数字即为lintcode题目号,语言为python3,坚持日拱一卒吧... (一). 回文字符窜问题(Palindrome problem) 627. L ...

  6. MeasureSpec常用方法

    package com.loaderman.customviewdemo; import android.content.Context; import android.util.AttributeS ...

  7. jar启动脚本shell

    #!/bin/bash#这里可替换为你自己的执行程序,其他代码无需更改 APP_NAME=/opt/server/msp/health-api/health-2.0.2.jar#使用说明,用来提示输入 ...

  8. springboot 之JPA

    1.添加pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

  9. request cluster ID mismatch

    删除了etcd集群所有节点中的--data_dir的内容 [root@node3 ~]# cd /var/lib/etcd/ [root@node3 etcd]# ls member [root@no ...

  10. 123457123457#0#-----com.yuming.drawGame01--前拼后广--儿童画画游戏

    com.yuming.drawGame01--前拼后广--儿童画画游戏