91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

kubernetes集群安裝指南:創建CA證書及相關組件證書密鑰

發布時間:2020-08-05 12:58:08 來源:網絡 閱讀:903 作者:清白之年 欄目:云計算

在實際kubernetes應用場景中,集群內組件之間訪問都是通過TLS雙向認證安全訪問,即https訪問,所以在部署時,給kubernetes各個組件創建證書是必要的,這是因為沒有https安全訪問會導致集群間節點通信訪問不安全,非法用戶可以通過客戶端操作,對集群資源非法操作,引起集群服務異常,甚至集群宕機。例如:非法操作etcd存儲的數據,因此集群開啟https訪問雙向認證是必要的。

1 準備工作

1.1 變量定義及各組件使用證書說明
環境變量
# 證書及密鑰存放路徑
SSL_BIN_PATH=/usr/local/cfssl
CA_DIR=/etc/k8s/ssl
# 外網和內網apiserver vip訪問地址
VIP_KUBEAPI_OUTSIDE=192.168.20.100
VIP_KUBEAPI_INSIDE=10.10.10.100
# master集群各節點組件監聽地址
MASTER1_IP=10.10.10.22
MASTER2_IP=10.10.10.23
MASTER3_IP=10.10.10.24
# etcd集群內各節點監聽地址
ETCD1_IP=10.10.10.22
ETCD2_IP=10.10.10.23
ETCD3_IP=10.10.10.24
# kubernetes默認service發地址
CLUSTER_KUBERNETES_SVC_IP=10.254.0.1
證書認證域名
DOMAIN=mo9.com
證書使用說明
kube-apiserver組件:
使用 ca.pem、kubernetes.pem、kubernetes-key.pem、etcd公私鑰證書、 metric公私鑰等證書;
kube-controller-manager組件
使用 ca-key.pem, ca.pem, kuber-controller-manager公私鑰等證書;
kube-scheduler組件: 
使用ca.pem、kube-scheduler.pem、kube-scheduler-key.pem等證書;
kube-proxy組件:
使用 ca.pem、kube-proxy-key.pem、kube-proxy.pem等證書;
kubelet組件:
使用 ca.pem等證書;
kubectl組件:
使用 ca.pem、admin-key.pem、admin.pem等證書;
etcd組件:
使用 ca.pem、etcd-key.pem、etcd.pem等證書;
flannel組件:
使用ca.pem、flannel.pem、flannel-key.pem等證書;
備注說明:

本安裝文檔為所有的組件生成證書文件,實際情況下也可以選擇部分組件共用某個證書或不選擇開啟https訪問。如:etcd、flannel共用apiserver組件證書或不啟用https訪問,controller-manager,scheduler也可以基于http訪問;

1.2 創建相關目錄
mkdir -p $SSL_BIN_PATH
mkdir -p $CA_DIR
1.3 安裝 cfssl 工具集

大多數情況下,kubernetes集群都是建立在自己的私有網絡里,比如公有云vpc區域,自建數據中心等等,由于k8s所有相關組件都是需要TLS雙向認證,合法證書機構大多都是提供ssl單向認證證書,所以必須自建CA根證書,并生成相應的公鑰和私鑰根證書,可以通過openssl或cfssl創建CA證書,這里以cfssl為例:

mkdir -p $SSL_BIN_PATH/bin  > /dev/null 2>&1
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -P $SS_BINL_PATH/bin/ 
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -P $SSL_BIN__PATH/bin/ 
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -P $SSL_BIN_PATH/bin/
cd  $SSL_BIN_PATH/bin/
mv cfssl_linux-amd64 cfssl  && mv cfssljson_linux-amd64 cfssljson
mv cfssl-certinfo_linux-amd64 cfssl-certinfo
chmod +x * && ln -sf $SSL_BIN_PATH/bin/cfssl* /usr/local/bin/

2. 創建相關證書


2.1 創建根證書 (CA)

CA 證書是集群所有節點共享的,只需要創建一個 CA 證書,后續創建的所有證書都由它簽名。

創建CA配置文件

CA 配置文件用于配置根證書的使用場景 (profile) 和具體參數 (usage,過期時間、服務端認證、客戶端認證、加密等),后續在簽名其它證書時需要指定特定場景。

cat >$CA_DIR/ca-config.json<<EOF
{
  "signing": {
    "default": {
      "expiry": "175200h"
    },
    "profiles": {
      "kubernetes": {
        "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ],
        "expiry": "175200h"
      }
    }
  }
}
EOF
  • signing:表示該證書可用于簽名其它證書,生成的 ca.pem 證書 中 CA=TRUE;
  • server auth:表示 client 可以用該該證書對 server 提供的證書進行驗證;
  • client auth:表示 server 可以用該該證書對 client 提供的證書進行驗證;
  • expiry 表示證書使用時間,即30年;
創建CA證書簽名請求文件
cat >$CA_DIR/ca-csr.json<<EOF
{
  "CN": "kubernetes",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "ShangHai",
      "L": "ShangHai",
      "O": "k8s",
      "OU": "System"
    }
  ]
}
EOF
  • CN:Common Name,kube-apiserver 從證書中提取該字段作為請求的用戶名 (User Name),瀏覽器使用該字段驗證網站是否合法;
  • O:Organization,kube-apiserver 從證書中提取該字段作為請求用戶所屬的組 (Group);
  • kube-apiserver 將提取的 User、Group 作為 RBAC 授權的用戶標識;
生成 CA 證書公鑰和私鑰
cd $CA_DIR
cfssl gencert --initca=true ca-csr.json | cfssljson --bare ca
2.2 創建kubernetes公鑰和私鑰
創建證書簽名請求:
cat >$CA_DIR/kubernetes-csr.json << EOF
{
    "CN": "kubernetes",
    "hosts": [
      "127.0.0.1",
      "${MASTER1_IP}",
      "${MASTER2_IP}",
      "${MASTER3_IP}",
      "${VIP_KUBEAPI_INSIDE}",
      "${VIP_KUBEAPI_OUTSIDE}",
      "${CLUSTER_KUBERNETES_SVC_IP}",
      "*.${DOMAIN}",
      "kubernetes",
      "kubernetes.default",
      "kubernetes.default.svc",
      "kubernetes.default.svc.cluster",
      "kubernetes.default.svc.cluster.local"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "ST": "ShangHai",
            "L": "SahgnHai",
            "O": "k8s",
            "OU": "System"
        }
    ]
}
EOF
  • apiserver需要開啟https訪問,需要使用到服務端證書,所以需要指定host字段,哪些域名或IP使用;
  • hosts 字段指定授權使用該證書的 IP 和域名列表,這里列出了 master 節點 IP、kubernetes 服務的 IP 和域名;
  • kubernetes證書也叫kube-apiserver證書,也可以定義為kube-apiserver證書;
  • 如果需要額外指定域名,請使用泛域名方式填寫,即域名型證書要求,填寫對應的域名即可;
  • kubernetes 服務 IP 是 apiserver 自動創建的,一般是 --service-cluster-ip-range 參數指定的網段的第一個IP,后續可以通過下面命令獲取:
$ kubectl get svc kubernetes
NAME         CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   10.254.0.1   <none>        443/TCP   1d
  • kubernetes中默認的server-cluster ip以10.254.0.0開頭,如需要其他網絡請在apiserver配置中指定;
生成證書公鑰和私鑰
cd $CA_DIR
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes \
kubernetes-csr.json | cfssljson -bare kubernetes
2.3 創建kube-controller-manager證書公鑰和私鑰
創建證書簽名請求:
cat > $CA_DIR/kube-controller-manager-csr.json <<EOF
{
    "CN": "system:kube-controller-manager",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "hosts": [
      "127.0.0.1",
      "${MASTER1_IP}",
      "${MASTER2_IP}",
      "${MASTER3_IP}"
    ],
    "names": [
      {
        "C": "CN",
        "ST": "ShangHai",
        "L": "ShangHai",
        "O": "system:kube-controller-manager",
        "OU": "System"
      }
    ]
}
EOF
  • kube-controller-manager開啟https訪問,需要使用到服務端證書,所以需要指定host字段,哪些IP使用;
  • hosts 列表包含所有 kube-controller-manager 節點 IP,否則無法認證;
  • CN 和 O 均為 system:kube-controller-manager,kubernetes 內置的 ClusterRoleBindings system:kube-controller-manager 賦予 kube-controller-manager 工作所需的權限。
生成證書公鑰和私鑰
cd $CA_DIR
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes \
kube-controller-manager-csr.json | cfssljson -bare kube-controller-manager
2.4 創建kube-scheduler證書公鑰和私鑰
創建證書簽名請求:
cat > $CA_DIR/kube-scheduler-csr.json <<EOF
{
    "CN": "system:kube-scheduler",
    "hosts": [
      "127.0.0.1",
      "${MASTER1_IP}",
      "${MASTER2_IP}",
      "${MASTER3_IP}"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
      {
        "C": "CN",
        "ST": "ShangHai",
        "L": "ShangHai",
        "O": "system:kube-scheduler",
        "OU": "System"
      }
    ]
}
EOF
  • kube-scheduler開啟https訪問,需要使用到服務端證書,所以需要指定host字段,IP使用;
  • hosts 列表包含所有 kube-scheduler 節點 IP,否則無法認證;
  • CN 和 O 均為 system:kube-scheduler,kubernetes 內置的 ClusterRoleBindings system:kube-scheduler 將賦予 kube-scheduler 工作所需的權限;
生成證書公鑰和私鑰
cd $CA_DIR
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes  \
kube-scheduler-csr.json | cfssljson -bare kube-scheduler
2.5 創建kube-proxy證書公鑰和私鑰
創建證書簽名請求:
cat > $CA_DIR/kube-proxy-csr.json << EOF
{
  "CN": "system:kube-proxy",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "ShangHai",
      "L": "SahgnHai",
      "O": "k8s",
      "OU": "System"
    }
  ]
}
EOF
  • 該證書只會被 kube-proxy 當做 client 證書鏈接apiserver使用,所以 hosts 字段為空;
  • CN:指定該證書的 User 為 system:kube-proxy;
  • 預定義的 RoleBinding system:node-proxier 將User system:kube-proxy 與 Role system:node-proxier 綁定,該 Role 授予了調用 kube-apiserver Proxy 相關 API 的權限;
生成證書公鑰和私鑰
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes \
kube-proxy-csr.json | cfssljson -bare kube-proxy
2.6 創建kubectl證書公鑰和私鑰
創建證書簽名請求:
cat > $CA_DIR/admin-csr.json << EOF
{
  "CN": "admin",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "ShangHai",
      "L": "SahgnHai",
      "O": "system:masters",
      "OU": "System"
    }
  ]
}
EOF
  • 該證書只會被 kubectl 當做 client 證書鏈接apiserver使用,所以 hosts 字段為空;
  • O 為 system:masters,kube-apiserver 收到該證書后將請求的 Group 設置為 system:masters;
  • 預定義的 ClusterRoleBinding cluster-admin 將 Group system:masters 與 Role cluster-admin 綁定,該 Role 授予所有 API的權限;
  • kubectl證書為集群最高權限證書,對集群所有的資源都有root權限,所以請謹慎存放;
生成證書公鑰和私鑰
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes \
admin-csr.json | cfssljson -bare admin
2.7 創建etcd證書公鑰和私鑰
創建證書簽名請求:
cat > $CA_DIR/etcd-csr.json << EOF
{
  "CN": "etcd",
  "hosts": [
    "127.0.0.1",
    "${ETCD1_IP}",
    "${ETCD2_IP}",
    "${ETCD3_IP}"
  ],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "ShangHai",
      "L": "SahgnHai",
      "O": "k8s",
      "OU": "System"
    }
  ]
}
EOF
  • etcd開啟https訪問,需要用到服務端證書,所以需要指定哪些IP使用該證書
  • hosts 字段指定授權使用該證書的 etcd 節點 IP 或域名列表,需要將 etcd 集群的三個節點 IP 都列在其中;
生成證書公鑰和私鑰
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes \
etcd-csr.json | cfssljson -bare etcd
2.8 創建網絡插件(Flannel)證書公鑰和私鑰
創建證書簽名請求:
cat > $CA_DIR/flannel-csr.json << EOF
{
  "CN": "flanneld",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "ShangHai",
      "L": "ShangHai",
      "O": "k8s",
      "OU": "System"
    }
  ]
}
EOF
  • flanneld 從 etcd 集群存取網段分配信息,而 etcd 集群啟用了雙向 x509 證書認證,所以需要為 flanneld 生成證書和私鑰用于認證etcd安全訪問。
  • 該證書只會被 kubectl 當做 client 證書使用,所以 hosts 字段為空;
生成證書公鑰和私鑰
cd $CA_DIR
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes \
flannel-csr.json | cfssljson -bare flannel
2.9 創建metric server證書公鑰和私鑰
創建證書簽名請求:
cat > $CA_DIR/proxy-client-csr.json <<EOF
{
  "CN": "aggregator",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "ShangHai",
      "L": "ShangHai",
      "O": "k8s",
      "OU": "System"
    }
  ]
}
EOF
  • CN 名稱需要位于 kube-apiserver 的 --requestheader-allowed-names 參數中,否則后續訪問 metrics 時會提示權限不足。
生成證書公鑰和私鑰
cd $CA_DIR
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes \
proxy-client-csr.json | cfssljson -bare proxy-client
2.10 刪除簽名請求相關文件(可選)
cd $CA_DIR
rm -rf *csr* && rm -rf *json
chmod 666 *

3 同步證書

  1. master節點
    同步master節點所有組件(apiserver,controller-manager,scheduler)、flannel證書、etcd證書、metric證書,ca證書;
    ansible master_k8s_vgs -m \
    synchronize -a "src=${CA_DIR} dest=${CA_DIR}/ mode=push delete=yes rsync_opts=-avz'" -b
    ansible master_k8s_vgs -m shell -a "chmod 666 ${CA_DIR}/*" -b
    ansible master_k8s_vgs -m shell -a "cd ${CA_DIR} && rm -rf kube-proxy*" -b
  2. worker節點
    同步worker節點所有證書(kube-proxy證書),flannel證書,ca證書公鑰
    ansible worker_k8s_vgs -m copy -a "src=${CA_DIR}/ca.pem dest=${CA_DIR}/" -b
    ansible worker_k8s_vgs -m copy -a "src=${CA_DIR}/flannel.pem dest=${CA_DIR}/" -b
    ansible worker_k8s_vgs -m copy -a "src=${CA_DIR}/flannel-key.pem dest=${CA_DIR}/" -b

    備注:

    • ansible部分在上一小節已經配置完成,此處使用同步模塊,將證書同步到各個節點服務;
    • 如果組件需要開啟https訪問才需要將對應的證書文件拷貝到對應的組件所在的節點上,worker節點只需要kubeconfig認證文件以及flannel等證書,kube-apiserver會自動為kubelet輪轉證書;

證書創建內容基本完成,關于tls證書雙向認證請自行查閱文檔,創建完成證書后,還需要創建各組件認證文件,請參閱下一節:kubernetes集群安裝指南:客戶端安裝及各組件認證文件創建

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

隆昌县| 蚌埠市| 安新县| 湛江市| 东海县| 怀集县| 玉林市| 普安县| 松桃| 通海县| 资溪县| 独山县| 黑水县| 万盛区| 南华县| 阆中市| 乌拉特前旗| 沙坪坝区| 卢湾区| 博乐市| 芒康县| 无为县| 聂荣县| 襄垣县| 育儿| 赤城县| 奉新县| 海南省| 日土县| 陕西省| 台北市| 黔南| 林周县| 凤冈县| 柳州市| 理塘县| 莲花县| 阳谷县| 阿鲁科尔沁旗| 大连市| 桓仁|