K8S インストールプロセス 5: 証明書の作成と生成

1. PKI証明書管理ツールをダウンロードする

wget -O cfssl https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssl_1.6.3_linux_amd64

chmod +x cfssl

mv cfssl /usr/local/bin/

wget -O cfssljson https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssljson_1.6.3_linux_amd64

chmod +x cfssljson

mv cfssljson /usr/local/bin/

2. CA ルート証明書を作成する

  • ca-config.json ファイルを作成する
{
  "signing": {
      "default": {
          "expiry": "87600h"
        },
      "profiles": {
          "kubernetes": {
              "usages": [
                  "signing",
                  "key encipherment",
                  "server auth",
                  "client auth"
              ],
              "expiry": "87600h"
          }
      }
  }
}
  • ca-csr.json ファイルを作成する
{
  "CN": "kubernetes",
  "key": {
      "algo": "rsa",
      "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "Hubei",
      "L": "Wuhan",
      "O": "kubernetes",
      "OU": "system"
    }
  ],
  "ca": {
          "expiry": "87600h"
  }
}
  • ルート証明書を生成する
cfssl gencert -initca ca-csr.json | cfssljson -bare ca -

次の 3 つのファイルを生成します

* ca.csr
* ca-key.pem
* ca.pem

3. kube-apiserver の証明書を生成する

  • kube-apiserver-csr.json ファイルを作成する
{
  "CN": "kubernetes",
  "hosts": [
    "127.0.0.1",
    "192.168.0.200",
    "192.168.0.233",
    "192.168.0.145",
    "192.168.0.110",
    "10.0.0.1",
    "10.255.0.1",
    "kubernetes",
    "kubernetes.default",
    "kubernetes.default.svc",
    "kubernetes.default.svc.cluster",
    "kubernetes.default.svc.cluster.local"
  ],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "Hubei",
      "L": "Wuhan",
      "O": "kubernetes",
      "OU": "system"
    }
  ]
}

このステップのホスト リストの内容は非常に重要であり、この範囲外のノードによるこの証明書へのアクセスは拒否されます。したがって、kubernetes クラスター内のノード IP または対応するドメイン名を追加してください。ホスト リストの値は汎用ドメイン名をサポートします。

  • kube-apiserver の証明書を生成する
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-apiserver-csr.json | cfssljson -bare kube-apiserver

生成されるファイルは次のとおりです。

* kube-apiserver.csr  
* kube-apiserver-key.pem  
* kube-apiserver.pem

4. kube-controller-manager の証明書を生成する

  • kube-controller-manager-csr.json ファイルを作成する
{
    "CN": "system:kube-controller-manager",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "hosts": [
      "127.0.0.1",
      "192.168.0.200",
      "192.168.0.233",
      "192.168.0.110",
      "192.168.0.145"
    ],
    "names": [
      {
        "C": "CN",
        "ST": "Hubei",
        "L": "Wuhan",
        "O": "system:kube-controller-manager",
        "OU": "system"
      }
    ]
}
  • kube-controller-manager の証明書を生成する
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

生成されるファイルは次のとおりです。

* kube-controller-manager.csr
* kube-controller-manager-key.pem
* kube-controller-manager.pem

5. kube-scheduler の証明書を生成する

  • kube-scheduler-csr.json ファイルを作成する
{
    "CN": "system:kube-scheduler",
    "hosts": [
      "127.0.0.1",
      "192.168.0.110",
      "192.168.0.200",
      "192.168.0.233",
      "192.168.0.145"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
      {
        "C": "CN",
        "ST": "Hubei",
        "L": "Wuhan",
        "O": "system:kube-scheduler",
        "OU": "system"
      }
    ]
}
  • kube-scheduler の証明書を生成する
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-scheduler-csr.json | cfssljson -bare kube-scheduler

生成されるファイルは次のとおりです。

* kube-scheduler.csr
* kube-scheduler-key.pem
* kube-scheduler.pem

6. kube-proxy の証明書を生成します - kube-proxy-csr.json ファイルを作成します

{
  "CN": "system:kube-proxy",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "Hubei",
      "L": "Wuhan",
      "O": "kubernetes",
      "OU": "system"
    }
  ]
}
  • kube-proxy の証明書を生成する
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy

生成されるファイルは次のとおりです。

* kube-proxy-key.pem
* kube-proxy.pem
* kube-proxy.csr

7. etcd の証明書を生成する

  • etcd-csr.json ファイルを作成する
{
  "CN": "etcd",
  "hosts": [
    "127.0.0.1",
    "192.168.0.200",
    "192.168.0.233",
    "192.168.0.145",
    "192.168.0.110"
  ],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [{
    "C": "CN",
    "ST": "Hubei",
    "L": "Wuhan",
    "O": "kubernetes",
    "OU": "system"
  }]
}
  • etcd の証明書を生成する
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes etcd-csr.json | cfssljson -bare etcd

生成されるファイルは次のとおりです。

* etcd-key.pem
* etcd.pem
* etcd.csr

8. 管理証明書の生成

  • admin-csr.json ファイルを作成する
{
  "CN": "admin",
  "hosts": [],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "Hubei",
      "L": "Wuhan",
      "O": "system:masters",             
      "OU": "system"
    }
  ]
}
  • 管理証明書の生成
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin

生成されるファイルは次のとおりです。

* admin.csr
* admin.pem
* admin-key.pem

9. 各ノードへの証明書配布

Kubernetes クラスター全体が、現在のステップで生成された証明書を使用します。まず証明書を /etc/kubernetes/ssl ディレクトリに保存します

mkdir -pv /etc/kubernetes/ssl
cp ./*.pem /etc/kubernetes/ssl

現在のノードで生成された証明書を他のノードにコピーし、次の操作を実行して証明書を他のノードにコピーします。

ssh root@其他节点IP地址或内网域名 "mkdir -pv /etc/kubernetes/ssl"
scp /etc/kubernetes/ssl/* root@其他节点IP地址或内网域名:/etc/kubernetes/ssl

おすすめ

転載: blog.csdn.net/hzwy23/article/details/128084829