《kubernetes-1.8.0》01-环境准备

来源:互联网 发布:python语言及其应用 编辑:程序博客网 时间:2024/06/11 03:17

《kubernetes-1.8.0》01-环境准备

《kubernetes 1.8.0 测试环境安装部署》

时间:2017-11-21

一、环境介绍

测试环境采用4台虚拟机( OS centos7 ),所有kubernets组件均采用rpm方式安装,使用systemd来做管理,网络组件采用calico,Master实现HA。rpm安装包来自 Mritd 所做的tarball,版本1.8.0。下载链接:漠然提供的百度云 密码: 4zaz。

后续所有例子中使用的gcr.io镜像–> :images 密码:m0yq

镜像加载小脚本(试用centos 7):

vi load-image.sh #!/bin/bashdir=$(ls -l  ./ |awk '{print $9}')for i in $dirdo    docker load -i $idone

进到镜像存放目录执行脚本会将当前目录下的所有镜像load进去。

资源分配:

IP 组件 172.18.169.131 Master、Node、etcd 172.18.169.132 Master、Node、etcd 172.18.169.133 Master、Node、etcd 172.18.169.133 Master、Node、etcd、harbor

二、生成TLS相关证书和秘钥

kubernetes 系统各组件需要使用 TLS 证书对通信进行加密,本文档使用 CloudFlare 的 PKI 工具集 cfssl 来生成 Certificate Authority (CA) 证书和秘钥文件,CA 是自签名的证书,用来签名后续创建的其它 TLS 证书。

证书工具仍使用的是cfssl,百度云的压缩包里已经包含了,也可自行下载安装(注意,所有证书生成只需要在任意一台主机上生成一遍即可,我这里在 Master 上操作的)

证书说明:

证书名称 配置文件 用途 etcd-root-ca.pem etcd-root-ca-csr.json etcd 根 CA 证书 etcd.pem etcd-gencert.json、etcd-csr.json etcd 集群证书 k8s-root-ca.pem k8s-root-ca-csr.json k8s 根 CA 证书 kube-proxy.pem k8s-gencert.json、kube-proxy-csr.json kube-proxy 使用的证书 admin.pem k8s-gencert.json、admin-csr.json kubectl 使用的证书 kubernetes.pem k8s-gencert.json、kubernetes-csr.json kube-apiserver 使用的证书

1. 安装cfssl

etcd_ssl 目录用于存放etcd相关证书/秘钥,kubernets_ssl用于存放kubernets相关证书/秘钥

$ wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64$ chmod +x cfssl_linux-amd64$ sudo mv cfssl_linux-amd64 /usr/local/bin/cfssl$ wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64$ chmod +x cfssljson_linux-amd64$ sudo mv cfssljson_linux-amd64 /usr/local/bin/cfssljson$ wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64$ chmod +x cfssl-certinfo_linux-amd64$ sudo mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo$ export PATH=/usr/local/bin:$PATH$ mkdir ~/etcd_ssl ~/kubernets_ssl 

2. 生成etcd相关证书秘钥

2.1 创建etcd 根CA证书

$ cd ~/etcd_ssl/$ cat > etcd-root-ca-csr.json << EOF{  "key": {    "algo": "rsa",    "size": 4096  },  "names": [    {      "O": "etcd",      "OU": "etcd Security",      "L": "Beijing",      "ST": "Beijing",      "C": "CN"    }  ],  "CN": "etcd-root-ca"}EOF

2.2 创建etcd群集证书配置文件

$ cat >  etcd-gencert.json << EOF  {                                   "signing": {                        "default": {                        "expiry": "8760h"               },                                "profiles": {                       "etcd": {                     "usages": [                           "signing",                        "key encipherment",               "server auth",             "client auth"          ],          "expiry": "8760h"        }      }    }  }  EOF
  • etcd-gencert.json:可以定义多个 profiles,分别指定不同的过期时间、使用场景等参数;后续在签名证书时使用某个 profile;
  • signing:表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE;
  • server auth:表示 client 可以用该 CA 对 server 提供的证书进行验证;
  • client auth:表示 server 可以用该 CA 对 client 提供的证书进行验证;

2.3 生成etcd证书签名请求(csr)

$ cat > etcd-csr.json << EOF{  "key": {    "algo": "rsa",    "size": 4096  },  "names": [    {      "O": "etcd",      "OU": "etcd Security",      "L": "Beijing",      "ST": "Beijing",      "C": "CN"    }  ],  "CN": "etcd",  "hosts": [    "127.0.0.1",    "localhost",    "172.18.169.131",    "172.18.169.132",    "172.18.169.133",    "172.18.169.134",    "172.18.169.135"  ]}EOF
  • "hosts":表明指定授权使用该证书的 etcd 节点 IP,如果只写127.0.0.1,和本机网卡IP,则需要在3台etcd节点上分别进行证书签名请求,本次为了方便将所有节点的IP都写入。后续只需要将证书进行复制即可。

2.4 生成etcd证书

cfssl gencert --initca=true etcd-root-ca-csr.json \| cfssljson --bare etcd-root-ca

创建根CA(etcd-root-ca.csr、etcd-root-ca.pem、etcd-root-ca-key.pem)

cfssl gencert --ca etcd-root-ca.pem \--ca-key etcd-root-ca-key.pem \--config etcd-gencert.json \-profile=etcd etcd-csr.json | cfssljson --bare etcd
  • -profile=:指定etcd证书配置文件中的profile(etcd);

创建被CA签名过的etcd证书对(etcd.csr、etcd.pem、etcd-key.pem)

2.5 移除.csr .json

rm *.csr  *.json

3. 生成kubernets相关证书秘钥

Kubernetes 证书生成所需配置文件如下:

3.1 创建kubernets 根CA证书

$ cd ~/kubernets_ssl/$ cat > k8s-root-ca-csr.json << EOF{  "CN": "kubernetes",  "key": {    "algo": "rsa",    "size": 4096  },  "names": [    {      "C": "CN",      "ST": "BeiJing",      "L": "BeiJing",      "O": "k8s",      "OU": "System"    }  ]}EOF

3.2 创建kuber-apiserver所使用证书配置文件

$ cat > k8s-gencert.json << EOF{  "signing": {    "default": {      "expiry": "87600h"    },    "profiles": {      "kubernetes": {        "usages": [            "signing",            "key encipherment",            "server auth",            "client auth"        ],        "expiry": "87600h"      }    }  }}EOF

3.3 生成kube-apiserver证书签名请求(csr)

$ cat > kubernetes-csr.json << EOF{    "CN": "kubernetes",    "hosts": [        "127.0.0.1",        "10.254.0.1",        "172.18.169.131",        "172.18.169.132",        "172.18.169.133",        "localhost",        "kubernetes",        "kubernetes.default",        "kubernetes.default.svc",        "kubernetes.default.svc.cluster",        "kubernetes.default.svc.cluster.local"    ],    "key": {        "algo": "rsa",        "size": 2048    },    "names": [        {            "C": "CN",            "ST": "BeiJing",            "L": "BeiJing",            "O": "k8s",            "OU": "System"        }    ]}EOF

3.4 生成kube-apiserver所使用证书

cfssl gencert --initca=true k8s-root-ca-csr.json \| cfssljson --bare k8s-root-ca

生成kubernet ca根证(k8s-root-ca.csr、k8s-root-ca.pem、k8s-root-ca-key.pem)

cfssl gencert --ca=k8s-root-ca.pem \--ca-key=k8s-root-ca-key.pem \--config k8s-gencert.json \--profile kubernetes kubernetes-csr.json\ | cfssljson --bare kubernetes

生成kuber-apiserver证书对(kubernetes.csr、kubernetes.pem、kubernetes.pem)

3.5 生成kubelet证书签名请求(csr)

$ cat > admin-csr.json << EOF{  "CN": "admin",  "hosts": [],  "key": {    "algo": "rsa",    "size": 2048  },  "names": [    {      "C": "CN",      "ST": "BeiJing",      "L": "BeiJing",      "O": "system:masters",      "OU": "System"    }  ]}EOF
  • "CN":Common Name,kube-apiserver 从证书中提取该字段作为请求的用户名 (User Name);
  • "O":Organization,kube-apiserver 从证书中提取该字段作为请求用户所属的组 (Group);kubernets X509证书验证模式,会将该group通过cluster-admin这个clusterrolebinding 绑定到cluster-admin这个cluster-role,继而获得所有的kube-api访问权限。

3.6 生成kubelet所使用证书

cfssl gencert --ca=k8s-root-ca.pem \--ca-key=k8s-root-ca-key.pem \--config k8s-gencert.json \--profile kubernetes admin-csr.json\ | cfssljson --bare admin

生成kubelet所使用证书对(admin.csr、admin.pem、admin.pem)

3.7 生成kube-proxy证书签名请求(csr)

$ cat > kube-proxy-csr.json << EOF{  "CN": "system:kube-proxy",  "hosts": [],  "key": {    "algo": "rsa",    "size": 2048  },  "names": [    {      "C": "CN",      "ST": "BeiJing",      "L": "BeiJing",      "O": "k8s",      "OU": "System"    }  ]}EOF

3.8 生成kub-proxy所使用证书

cfssl gencert --ca=k8s-root-ca.pem \--ca-key=k8s-root-ca-key.pem \--config k8s-gencert.json \--profile kubernetes kube-proxy-csr.json\ | cfssljson --bare kube-proxy

生成kube-proxy所使用证书对(kube-proxy.csr、kube-proxy.pem、kube-proxy.pem)

3.9 移除.json .csr

rm *.csr  *.json

3. 配置docker环境

当前最新版本docker-ce 17.09.0-ce

$ sudo yum install -y yum-utils \device-mapper-persistent-data \lvm2

安装所需组件

$ sudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo

安装docker-ce仓库

sudo yum install docker-ce

安装docker-engine

去daocloud上找个加速器curl一下~~这里就不写了。

最后的效果:

至此环境准备完成。

提示:

  1. 关闭selinux、firewalld
  2. 确保系统时间准确一直(特别重要,否则后续会导致etcd数据库出租哦,pod卡在container creating阶段)
  3. 正确规划主机名并设置hosts文件

本系列其他内容:

  • 01-环境准备

  • 02-etcd群集搭建

  • 03-kubectl管理工具

  • 04-master搭建

  • 05-node节点搭建

  • 06-addon-calico

  • 07-addon-kubedns

  • 08-addon-dashboard

  • 09-addon-kube-prometheus

  • 10-addon-EFK

  • 11-addon-Harbor

  • 12-addon-ingress-nginx

  • 13-addon-traefik

本文参考链接:

https://mritd.me/2017/10/09/set-up-kubernetes-1.8-ha-cluster/
https://github.com/opsnull/follow-me-install-kubernetes-cluster
https://docs.docker.com/engine/installation/linux/docker-ce/centos/#set-up-the-repository
https://kubernetes.io/docs/admin/authentication/#x509-client-certs

原创粉丝点击