2番目の部分(バイナリ展開k8sクラスター--- etcdクラスターの構築)

この記事etcdクラスターは3つのcentos7で構築されています。
etcd1:192.168.206.31
etcd2:192.168.206.32
etcd3:192.168.206.33

1.CA証明書とキーを作成します。k8s-master1で次の手順を実行します。
1.すべてのマシンに関連するディレクトリを作成します

mkdir -p /opt/kubernetes/{bin,ssl,yaml,conf,log,cfg}
echo 'export PATH=$PATH:/opt/kubernetes/bin' >> /etc/profile
source /etc/profile

2.cfsslをダウンロードします

curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o /usr/local/bin/cfssl
curl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o /usr/local/bin/cfssljson
curl -L https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -o /usr/local/bin/cfssl-certinfo
chmod +x /usr/local/bin/cfssl /usr/local/bin/cfssljson /usr/local/bin/cfssl-certinfo

3.証明書発行機関CAを作成するには、最初に証明書作成用のフォルダーを作成します。

mkdir -p /data/ssl
cd /data/ssl

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

ca-config.json:可以定义多个 profiles,分别指定不同的过期时间、使用场景等参数;后续在签名证书时使用某个 profile;
signing:表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE;
server auth:表示 client 可以用该 CA 对 server 提供的证书进行验证;
client auth:表示 server 可以用该 CA 对 client 提供的证书进行验证;

4.CA証明書署名要求を作成します

cat > ca-csr.json <<EOF
{
    "CN": "kubernetes",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "hangzhou",
            "ST": "Zhejiang",
            "O": "k8s",
            "OU": "System"
        }
    ]
}
EOF

CN:Common Name,kube-apiserver 从证书中提取该字段作为请求的用户名 (User Name),浏览器使用该字段验证网站是否合法;
O:Organization,kube-apiserver 从证书中提取该字段作为请求用户所属的组 (Group);
kube-apiserver 将提取的 User、Group 作为 RBAC 授权的用户标识;

6.CA証明書と秘密鍵を生成します。

cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
[root@master1 ssl]# ls
ca-config.json  ca.csr  ca-csr.json  ca-key.pem  ca.pem

创建存放etcd证书文件夹
mkdir /opt/kubernetes/ssl/etcd/
cp *.pem /opt/kubernetes/ssl/

7. etcd証明書署名要求を作成するには、最初に証明書を作成するためのフォルダーを作成します

mkdir /data/ssl/etcd
cd /data/ssl/etcd

cat > etcd-csr.json <<EOF
{
    "CN": "etcd",
    "hosts": [
      "192.168.206.31",
      "192.168.206.32",
      "192.168.206.33"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "hangzhou",
            "ST": "Zhejiang",
            "O": "k8s",
            "OU": "System"
        }
    ]
}
EOF

8.etcd証明書と対応する秘密鍵を生成します

cfssl gencert -ca=/data/ssl/ca.pem \
-ca-key=/data/ssl/ca-key.pem \
-config=/data/ssl/ca-config.json \
-profile=kubernetes etcd-csr.json \
| cfssljson -bare etcd

cp *.pem /opt/kubernetes/ssl/etcd

注:証明書3兄弟etcdを置く必要があります。

ETCDは、次のように証明書コンポーネントを使用します
。etcd:ca.pem、etcd-key.pem、etcd.pemを使用します。

2.etcdクラスターをデプロイします
1.etcdインストールパッケージをダウンロードします

wget https://github.com/etcd-io/etcd/releases/download/v3.3.10/etcd-v3.3.10-linux-amd64.tar.gz
tar zxf etcd-v3.3.10-linux-amd64.tar.gz
cp  etcd-v3.3.10-linux-amd64/etcd* /opt/kubernetes/bin/

2.作業ディレクトリを作成します

mkdir /opt/kubernetes/etcd

3. systemdユニットファイルを作成します(対応するetcdホスト名とIPを変更します)

cat > /etc/systemd/system/etcd.service << EOF
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
Documentation=https://github.com/coreos

[Service]
Type=notify
WorkingDirectory=/opt/kubernetes/etcd/
ExecStart=/opt/kubernetes/bin/etcd \
  --name etcd1 \
  --cert-file=/opt/kubernetes/ssl/etcd/etcd.pem \
  --key-file=/opt/kubernetes/ssl/etcd/etcd-key.pem \
  --peer-cert-file=/opt/kubernetes/ssl/etcd/etcd.pem \
  --peer-key-file=/opt/kubernetes/ssl/etcd/etcd-key.pem \
  --trusted-ca-file=/opt/kubernetes/ssl/etcd/ca.pem \
  --peer-trusted-ca-file=/opt/kubernetes/ssl/etcd/ca.pem \
  --initial-advertise-peer-urls https://192.168.206.31:2380 \
  --listen-peer-urls https://192.168.206.31:2380 \
  --listen-client-urls https://192.168.206.31:2379,http://127.0.0.1:2379 \
  --advertise-client-urls https://192.168.206.31:2379 \
  --initial-cluster-token etcd-cluster-0 \
  --initial-cluster etcd1=https://192.168.206.31:2380,etcd2=https://192.168.206.32:2380,etcd3=https://192.168.206.33:2380 \
  --initial-cluster-state new \
  --data-dir=/opt/kubernetes/etcd
Restart=on-failure
RestartSec=5
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

为了保证通信安全,需要指定 etcd 的公私钥(cert-file和key-file)、Peers 通信的公私钥和 CA 证书(peer-cert-file、peer-key-file、peer-trusted-ca-file)、客户端的CA证书(trusted-ca-file); 

创建etcd.pem 证书时使用的 etcd-csr.json 文件的 hosts 字段包含所有 etcd 节点的IP,否则证书校验会出错;
–initial-cluster-state 值为 new 时,–name 的参数值必须位于 –initial-cluster 列表中.

4. etcdサービスを開始し、自動的に開始するようにブートを設定します

systemctl daemon-reload
systemctl start etcd.service
systemctl status etcd.service
systemctl enable etcd.service

最初に開始されたetcdプロセスはしばらくスタックし、他のノードのetcdプロセスがクラスターに参加するのを待ちます。これは正常です。

5. etcdクラスターのステータスを確認し、リーダーを表示して、etcdノードで実行します

[root@k8s-master1 etcd]# etcdctl --ca-file=/opt/kubernetes/ssl/etcd/ca.pem --cert-file=/opt/kubernetes/ssl/etcd/etcd.pem --key-file=/opt/kubernetes/ssl/etcd/etcd-key.pem cluster-health
member 8b7aa04311a7389f is healthy: got healthy result from https://192.168.206.32:2379
member 9b7dcd0eef5c1758 is healthy: got healthy result from https://192.168.206.33:2379
member f617b05c8dbf5231 is healthy: got healthy result from https://192.168.206.31:2379
cluster is healthy
[root@k8s-master1 etcd]# etcdctl --ca-file=/opt/kubernetes/ssl/etcd/ca.pem --cert-file=/opt/kubernetes/ssl/etcd/etcd.pem --key-file=/opt/kubernetes/ssl/etcd/etcd-key.pem member list
8b7aa04311a7389f: name=etcd2 peerURLs=https://192.168.206.32:2380 clientURLs=https://192.168.206.32:2379 isLeader=false
9b7dcd0eef5c1758: name=etcd3 peerURLs=https://192.168.206.33:2380 clientURLs=https://192.168.206.33:2379 isLeader=true
f617b05c8dbf5231: name=etcd1 peerURLs=https://192.168.206.31:2380 clientURLs=https://192.168.206.31:2379 isLeader=false

これまでのところ、ETCDTLS証明書クラスターの展開は完了しています。

おすすめ

転載: blog.51cto.com/14033037/2552368