规划图

image.png

etcd

etcd ca

  1. {
  2. "CN": "etcd-ca",
  3. "key": {
  4. "algo": "rsa",
  5. "size": 2048
  6. },
  7. "ca": {
  8. "expiry": "87600h"
  9. }
  10. }

cfssl gencert -initca etcd-ca-csr.json | cfssljson -bare etcd-ca
image.png

证书生成策略文件

{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "etcd": {
         "expiry": "87600h",
         "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ]
      }
    }
  }
}

etcd 证书申请

{
    "CN": "etcd",
    "hosts": [
        "192.168.80.201",
        "192.168.80.202",
        "192.168.80.203",
        "etcd01",
        "etcd02",
        "etcd03",
        "127.0.0.1"

    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {   
            "C": "CN",
            "L": "BJ"
        }
    ]
}

cfssl gencert -ca=etcd-ca.pem -ca-key=etcd-ca-key.pem -config=ca-config.json -profile=etcd etcd-csr.json | cfssljson -bare etcd
image.png

解压 tar 包

tar xf etcd-v3.4.16-linux-amd64.tar.gz
mv etcd-v3.4.16-linux-amd64 /data/etcd

启动脚本参照

#!/bin/bash
/data/etcd/etcd \
--name=etcd-201 \
--data-dir=/data/etcd/data \
--wal-dir=/data/etcd/wal \
--listen-client-urls=https://192.168.80.201:2379,http://127.0.0.1:2379 \
--listen-peer-urls=https://192.168.80.201:2380 \
--initial-advertise-peer-urls=https://192.168.80.201:2380 \
--advertise-client-urls=https://192.168.80.201:2379,http://127.0.0.1:2379 \
--initial-cluster=etcd-201=https://192.168.80.201:2380,etcd-202=https://192.168.80.202:2380,etcd-203=https://192.168.80.203:2380 \
--initial-cluster-token=etcd-cluster-token-1 \
--initial-cluster-state=new \
--cert-file=/data/etcd/etcd.pem  \
--key-file=/data/etcd/etcd-key.pem \
--client-cert-auth \
--trusted-ca-file=/data/etcd/etcd-ca.pem \
--peer-cert-file=/data/etcd/etcd.pem  \
--peer-key-file=/data/etcd/etcd-key.pem \
--peer-client-cert-auth \
--peer-trusted-ca-file=/data/etcd/etcd-ca.pem

etcd集群验证

/data/etcd/etcdctl \
—cacert=/data/etcd/etcd-ca.pem \
—cert=/data/etcd/etcd.pem \
—key=/data/etcd/etcd-key.pem \
—endpoints=”https://192.168.80.201:2379,https://192.168.80.202:2379,https://192.168.80.203:2379“ member list

/data/etcd/etcdctl \
—cacert=/data/etcd/etcd-ca.pem \
—cert=/data/etcd/etcd.pem \
—key=/data/etcd/etcd-key.pem \
—endpoints=”https://192.168.80.201:2379,https://192.168.80.202:2379,https://192.168.80.203:2379“ endpoint status

/data/etcd/etcdctl \
—cacert=/data/etcd/etcd-ca.pem \
—cert=/data/etcd/etcd.pem \
—key=/data/etcd/etcd-key.pem \
—endpoints=”https://192.168.80.201:2379,https://192.168.80.202:2379,https://192.168.80.203:2379“ endpoint health

k8s

k8s ca

{
    "CN": "k8s-ca",
    "key": {
        "algo": "rsa",
        "size": 2048
    }
}

cfssl gencert -initca k8s-ca-csr.json | cfssljson -bare k8s-ca
image.png

证书生成策略文件

{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "k8s": {
         "expiry": "87600h",
         "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ]
      }
    }
  }
}

front-proxy

ca

{
    "CN": "front-proxy-ca",
    "key": {
        "algo": "rsa",
        "size": 2048
    }
}

cfssl gencert -initca front-proxy-ca-csr.json | cfssljson -bare front-proxy-ca
image.png

client

{
    "CN": "front-proxy-client",
    "key": {
        "algo": "rsa",
        "size": 2048
    }
}

cfssl gencert -ca=front-proxy-ca.pem -ca-key=front-proxy-ca-key.pem -config=ca-config.json -profile=k8s front-proxy-client-csr.json | cfssljson -bare front-proxy-client
image.png

apiserver

申请证书


{
    "CN": "apiserver",
    "hosts": [
      "10.11.0.1",
      "127.0.0.1",
      "kubernetes",
      "kubernetes.default",
      "kubernetes.default.svc",
      "kubernetes.default.svc.cluster",
      "kubernetes.default.svc.cluster.local",
      "192.168.80.191",
      "192.168.80.192",
      "192.168.80.193",
      "192.168.80.188"
    ],
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "L": "BeiJing",
            "ST": "BeiJing",
            "O": "k8s",
            "OU": "System"
        }
    ]
}

cfssl gencert -ca=k8s-ca.pem -ca-key=k8s-ca-key.pem -config=ca-config.json -profile=k8s apiserver-csr.json | cfssljson -bare apiserver
image.png

启动脚本

#!/bin/bash
/data/k8s/bin/kube-apiserver \
--logtostderr=false \
--v 2 \
--log-dir /data/k8s/logs/apiserver \
--apiserver-count 2 \
--bind-address 192.168.80.191 \
--secure-port 6443 \
--advertise-address 192.168.80.191 \
--allow-privileged=true \
--service-cluster-ip-range 10.11.0.0/24 \
--service-node-port-range 30000-50000 \
--enable-admission-plugins NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,NodeRestriction \
--authorization-mode RBAC,Node \
--enable-bootstrap-token-auth=true \
--etcd-servers https://192.168.80.201:2379,https://192.168.80.202:2379,https://192.168.80.203:2379 \
--etcd-cafile /data/k8s/ssl/etcd/etcd-ca.pem \
--etcd-certfile /data/k8s/ssl/etcd/etcd.pem \
--etcd-keyfile /data/k8s/ssl/etcd/etcd-key.pem \
--client-ca-file /data/k8s/ssl/k8s-ca.pem \
--service-account-key-file /data/k8s/ssl/k8s-ca-key.pem \
--kubelet-client-certificate /data/k8s/ssl/apiserver.pem \
--kubelet-client-key /data/k8s/ssl/apiserver-key.pem \
--tls-cert-file /data/k8s/ssl/apiserver.pem \
--tls-private-key-file /data/k8s/ssl/apiserver-key.pem \
--service-account-signing-key-file=/data/k8s/ssl/k8s-ca-key.pem \
--service-account-issuer https://kubernetes.default.svc.cluster.local

controller-manager

#!/bin/bash
/data/k8s/bin/kube-controller-manager \
 --logtostderr=false \
 --v=2 \
 --log-dir=/data/k8s/logs/controller-manager \
 --leader-elect=true \
 --master=127.0.0.1:8080 \
 --address=127.0.0.1 \
 --allocate-node-cidrs=true \
 --cluster-cidr=172.11.0.0/16 \
 --service-cluster-ip-range=10.11.0.0/24 \
 --cluster-signing-cert-file=/data/k8s/ssl/k8s-ca.pem \
 --cluster-signing-key-file=/data/k8s/ssl/k8s-ca-key.pem  \
 --root-ca-file=/data/k8s/ssl/k8s-ca.pem \
 --service-account-private-key-file=/data/k8s/ssl/k8s-ca-key.pem \
 --experimental-cluster-signing-duration=87600h0m0s

scheduler

#!/bin/bash
/data/k8s/bin/kube-scheduler \
  --logtostderr=false \
  --leader-elect  \
  --log-dir /data/k8s/logs/scheduler \
  --master http://127.0.0.1:8080 \
  --v 2