zoukankan      html  css  js  c++  java
  • K8S从入门到放弃系列-(10)kubernetes集群之kube-proxy部署

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

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

    [root@k8s-master01 ~]# vim /opt/k8s/certs/kube-proxy-csr.json
    {
        "CN": "system:kube-proxy",
        "hosts": [],
        "key": {
            "algo": "rsa",
            "size": 2048
        },
        "names": [
            {
                "C": "CN",
                "ST": "ShangHai",
                "L": "ShangHai",
                "O": "system:kube-proxy",
                "OU": "System"
            }
        ]
    }
    2)生成kube-proxy证书与私钥

    [root@k8s-master01 ~]# cd /opt/k8s/certs/
    [root@k8s-master01 certs]# cfssl gencert -ca=/etc/kubernetes/ssl/ca.pem 
     -ca-key=/etc/kubernetes/ssl/ca-key.pem 
     -config=/opt/k8s/certs/ca-config.json 
     -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy
    2019/04/25 17:39:22 [INFO] generate received request
    2019/04/25 17:39:22 [INFO] received CSR
    2019/04/25 17:39:22 [INFO] generating key: rsa-2048
    2019/04/25 17:39:22 [INFO] encoded CSR
    2019/04/25 17:39:22 [INFO] signed certificate with serial number 265052874363255358468035370835573343349230196562
    2019/04/25 17:39:22 [WARNING] This certificate lacks a "hosts" field. This makes it unsuitable for
    websites. For more information see the Baseline Requirements for the Issuance and Management
    of Publicly-Trusted Certificates, v.1.1.6, from the CA/Browser Forum (https://cabforum.org);
    specifically, section 10.2.3 ("Information Requirements").
    3)查看证书生成

    [root@k8s-master01 certs]# ll kube-proxy*
    -rw-r--r-- 1 root root 1029 Apr 25 17:39 kube-proxy.csr
    -rw-r--r-- 1 root root  302 Apr 25 17:37 kube-proxy-csr.json
    -rw------- 1 root root 1675 Apr 25 17:39 kube-proxy-key.pem
    -rw-r--r-- 1 root root 1428 Apr 25 17:39 kube-proxy.pem
    4)证书分发

    [root@k8s-master01 certs]# ansible k8s-node -m copy -a 'src=/opt/k8s/certs/kube-proxy-key.pem dest=/etc/kubernetes/ssl/'
    [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 所需配置文件
    ## 配置集群参数
    [root@k8s-master01 ~]# kubectl config set-cluster kubernetes 
     --certificate-authority=/etc/kubernetes/ssl/ca.pem 
     --embed-certs=true 
     --server=https://127.0.0.1:6443 
     --kubeconfig=kube-proxy.kubeconfig
    Cluster "kubernetes" set.
    ## 配置客户端认证参数
    [root@k8s-master01 ~]# kubectl config set-credentials system:kube-proxy 
     --client-certificate=/opt/k8s/certs/kube-proxy.pem 
     --embed-certs=true 
     --client-key=/opt/k8s/certs/kube-proxy-key.pem 
     --kubeconfig=kube-proxy.kubeconfig
    User "system:kube-proxy" set.
    ## 配置集群上下文
    [root@k8s-master01 ~]# kubectl config set-context system:kube-proxy@kubernetes 
     --cluster=kubernetes 
     --user=system:kube-proxy 
     --kubeconfig=kube-proxy.kubeconfig
    Context "system:kube-proxy@kubernetes" created.
    ## 配置集群默认上下文
    [root@k8s-master01 ~]# kubectl config use-context system:kube-proxy@kubernetes --kubeconfig=kube-proxy.kubeconfig
    Switched to context "system:kube-proxy@kubernetes".
    
    ##配置文件分发至node节点
    [root@k8s-master01 ~]# ansible k8s-node -m copy -a 'src=/root/kube-proxy.kubeconfig dest=/etc/kubernetes/config/'
    6)配置kube-proxy参数

    [root@k8s-master01 ~]# vim /opt/k8s/cfg/kube-proxy.conf
    ###
    # kubernetes proxy config
    # default config should be adequate
    # Add your own!
    KUBE_PROXY_ARGS="   --bind-address=0.0.0.0 
                        --cleanup-ipvs=true 
                        --cluster-cidr=10.254.0.0/16 
                        --hostname-override=k8s-node01 
                        --healthz-bind-address=0.0.0.0 
                        --healthz-port=10256 
                        --masquerade-all=true 
                        --proxy-mode=ipvs 
                        --ipvs-min-sync-period=5s 
                        --ipvs-sync-period=5s 
                        --ipvs-scheduler=wrr 
                        --kubeconfig=/etc/kubernetes/config/kube-proxy.kubeconfig 
                        --logtostderr=true 
                        --v=2"
    ## 分发参数配置文件
    ### 修改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系统服务脚本

    [root@k8s-master01 ~]# vim /opt/k8s/unit/kube-proxy.service
    [Unit] Description=Kubernetes Kube-Proxy Server Documentation=https://github.com/GoogleCloudPlatform/kubernetes After=network.target [Service] EnvironmentFile=-/etc/kubernetes/config/kube-proxy.conf ExecStart=/usr/local/bin/kube-proxy $KUBE_PROXY_ARGS Restart=on-failure LimitNOFILE=65536 [Install] WantedBy=multi-user.target ## 分发至node节点 [root@k8s-master01 ~]# ansible k8s-node -m copy -a 'src=/opt/k8s/unit/kube-proxy.service dest=/usr/lib/systemd/system/' ## 启动服务 [root@k8s-master01 ~]# ansible k8s-node -m shell -a 'systemctl daemon-reload' [root@k8s-master01 ~]# ansible k8s-node -m shell -a 'systemctl enable kube-proxy' [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的端口
    [root@k8s-node01 ~]# ipvsadm -L -n
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  10.254.0.1:443 wrr
      -> 10.10.0.18:6443              Masq    1      0          0         
      -> 10.10.0.19:6443              Masq    1      0          0         
      -> 10.10.0.20:6443              Masq    1      0          0
  • 相关阅读:
    使用jquery获取url以及jquery获取url参数的方法(转)
    Css3 选择器
    取出表A中第31到第40记录
    C#统计给定的文本中字符出现的次数,使用循环和递归两种方法
    Selenium 的页面加载以及几种等待的问题
    Selenium定位策略
    为什么一个java源文件中只能有一个public类
    Eclipse在线安装插件进度缓慢问题
    2.6.2 XML配置:使用testNG进行并发多浏览器测试
    ie11 selenium 报错org.openqa.selenium.NoSuchWindowException: Unable to get browser 处理方法
  • 原文地址:https://www.cnblogs.com/tchua/p/10772686.html
Copyright © 2011-2022 走看看