3.kubernetes之ssl加密方式部署-部署Kubectl命令行工具

古冷 2018-06-08 735人围观 kubernetesdockercontainer

部署 kubectl 命令行工具

kubectl命令 默认从 ~/.kube/config 配置文件获取访问 kube-apiserver 地址、证书、用户名等信息,如果没有配置该文件,执行命令的,它是默认去链接kube-apiserver的

截图.png

需要所有的node上使用kubectl的话将下载的 kubectl 二进制程序和生成的 ~/.kube/config 配置文件拷贝到所有使用 kubectl 命令的机器上即可

本文kubernetes是1.9.1版本

服务器系统:CentOS 7.3.2


下载kubernetes的二进制程序放到服务器上

mkdir /opt/kubernetes
wget  
tar xf  kubernetes-server-linux-amd64.tar.gz   
cd  kubernetes-server-linux-amd64
cp  server/bin/*  /opt/kubernetes/

加入环境变量
vim /etc/profile.d/kubernetes.sh

export PATH=/opt/kubernetes:$PATH

刷新环境变量
source /etc/profile

创建 admin 证书

kubectl 与 kube-apiserver 的安全端口通信,需要为安全通信提供 TLS 证书和秘钥。
创建 admin 证书签名请求
 

vim  admin-csr.json

{
  "CN": "admin",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "BeiJing",
      "L": "BeiJing",
      "O": "system:masters",
      "OU": "System"
    }
  ]
}
  • 后续 kube-apiserver 使用 RBAC 对客户端(如 kubeletkube-proxyPod)请求进行授权;

  • kube-apiserver 预定义了一些 RBAC 使用的 RoleBindings,如 cluster-admin 将 Group system:masters 与 Role cluster-admin 绑定,该 Role 授予了调用kube-apiserver 所有 API的权限;

  • O 指定该证书的 Group 为 system:masterskubelet 使用该证书访问 kube-apiserver 时 ,由于证书被 CA 签名,所以认证通过,同时由于证书用户组为经过预授权的 system:masters,所以被授予访问所有 API 的权限;

  • hosts 属性值为空列表;

生成 admin 证书和私钥:

$ cfssl gencert -ca=/etc/kubernetes/ssl/ca.pem \
  -ca-key=/etc/kubernetes/ssl/ca-key.pem \
  -config=/etc/kubernetes/ssl/ca-config.json \
  -profile=kubernetes admin-csr.json | cfssljson -bare admin
$ ls admin*admin.csr  admin-csr.json  admin-key.pem  admin.pem
$ mv admin*.pem /etc/kubernetes/ssl/

创建 kubectl kubeconfig 文件

$ # 设置集群参数
$ kubectl config set-cluster kubernetes \
  --certificate-authority=/etc/kubernetes/ssl/ca.pem \
  --embed-certs=true \
  --server=https://192.168.10.1:6443
  
$ # 设置客户端认证参数
$ kubectl config set-credentials admin \
  --client-certificate=/etc/kubernetes/ssl/admin.pem \
  --embed-certs=true \
  --client-key=/etc/kubernetes/ssl/admin-key.pem
  
$ # 设置上下文参数
$ kubectl config set-context kubernetes \
  --cluster=kubernetes \
  --user=admin
  
$ # 设置默认上下文
$ kubectl config use-context kubernetes
  • admin.pem 证书 O 字段值为 system:masterskube-apiserver 预定义的 RoleBinding cluster-admin 将 Group system:masters 与 Role cluster-admin 绑定,该 Role 授予了调用kube-apiserver 相关 API 的权限;

  • 生成的 kubeconfig 被保存到 ~/.kube/config 文件;

分发 kubeconfig 文件

将 ~/.kube/config 文件拷贝到运行 kubelet 命令的机器的 ~/.kube/ 目录下。

这样在每个node上都可以执行kubectl命令,方便了很多


请发表您的评论
152文章数 1评论数
请关注微信公众号
微信二维码
Powered By Z-BlogPHP