W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
Kubernetes 需要 PKI 證書才能進(jìn)行基于 TLS 的身份驗證。如果你是使用 kubeadm 安裝的 Kubernetes, 則會自動生成集群所需的證書。你還可以生成自己的證書。 例如,不將私鑰存儲在 API 服務(wù)器上,可以讓私鑰更加安全。此頁面說明了集群必需的證書。
Kubernetes 需要 PKI 才能執(zhí)行以下操作:
Note: 只有當(dāng)你運行 kube-proxy 并要支持 擴(kuò)展 API 服務(wù)器 時,才需要 ?
front-proxy
? 證書
etcd 還實現(xiàn)了雙向 TLS 來對客戶端和對其他對等節(jié)點進(jìn)行身份驗證。
假如通過 kubeadm 安裝 Kubernetes,大多數(shù)證書都存儲在 ?/etc/kubernetes/pki
?。 本文檔中的所有路徑都是相對于該目錄的,但用戶賬戶證書除外,kubeadm 將其放在 ?/etc/kubernetes
? 中。
如果你不想通過 kubeadm 生成這些必需的證書,你可以使用一個單一的根 CA 來創(chuàng)建這些證書或者直接提供所有證書。
你可以創(chuàng)建一個單根 CA,由管理員控制器它。該根 CA 可以創(chuàng)建多個中間 CA,并將所有進(jìn)一步的創(chuàng)建委托給 Kubernetes。
需要這些 CA:
路徑 | 默認(rèn) CN | 描述 |
---|---|---|
ca.crt,key | kubernetes-ca | Kubernetes 通用 CA |
etcd/ca.crt,key | etcd-ca | 與 etcd 相關(guān)的所有功能 |
front-proxy-ca.crt,key | kubernetes-front-proxy-ca | 用于 前端代理 |
上面的 CA 之外,還需要獲取用于服務(wù)賬戶管理的密鑰對,也就是 ?sa.key
? 和 ?sa.pub
?。
下面的例子說明了上表中所示的 CA 密鑰和證書文件。
/etc/kubernetes/pki/ca.crt
/etc/kubernetes/pki/ca.key
/etc/kubernetes/pki/etcd/ca.crt
/etc/kubernetes/pki/etcd/ca.key
/etc/kubernetes/pki/front-proxy-ca.crt
/etc/kubernetes/pki/front-proxy-ca.key
如果你不想將 CA 的私鑰拷貝至你的集群中,你也可以自己生成全部的證書。
需要這些證書:
默認(rèn) CN | 父級 CA | O (位于 Subject 中) | 類型 | 主機(jī) (SAN) |
---|---|---|---|---|
kube-etcd | etcd-ca | server, client | <hostname> , <Host_IP> , localhost , 127.0.0.1
|
|
kube-etcd-peer | etcd-ca | server, client | <hostname> , <Host_IP> , localhost , 127.0.0.1
|
|
kube-etcd-healthcheck-client | etcd-ca | client | ||
kube-apiserver-etcd-client | etcd-ca | system:masters | client | |
kube-apiserver | kubernetes-ca | server | <hostname> , <Host_IP> , <advertise_IP> , [1]
|
|
kube-apiserver-kubelet-client | kubernetes-ca | system:masters | client | |
front-proxy-client | kubernetes-front-proxy-ca | client |
[1]: 用來連接到集群的不同 IP 或 DNS 名 (就像 kubeadm 為負(fù)載均衡所使用的固定 IP 或 DNS 名,?kubernetes
?、?kubernetes.default
?、?kubernetes.default.svc
?、 ?kubernetes.default.svc.cluster
?、?kubernetes.default.svc.cluster.local
?)。
其中,?kind
?對應(yīng)一種或多種類型的 x509 密鑰用途:
kind | 密鑰用途 |
---|---|
server | 數(shù)字簽名、密鑰加密、服務(wù)端認(rèn)證 |
client | 數(shù)字簽名、密鑰加密、客戶端認(rèn)證 |
Note:
上面列出的 Hosts/SAN 是推薦的配置方式;如果需要特殊安裝,則可以在所有服務(wù)器證書上添加其他 SAN。
Note:
對于 kubeadm 用戶:
- 不使用私鑰,將證書復(fù)制到集群 CA 的方案,在 kubeadm 文檔中將這種方案稱為外部 CA。
- 如果將以上列表與 kubeadm 生成的 PKI 進(jìn)行比較,你會注意到,如果使用外部 etcd,則不會生成 ?
kube-etcd
?、?kube-etcd-peer
? 和 ?kube-etcd-healthcheck-client
? 證書。
證書應(yīng)放置在建議的路徑中(以便 kubeadm 使用)。無論使用什么位置,都應(yīng)使用給定的參數(shù)指定路徑。
默認(rèn) CN | 建議的密鑰路徑 | 建議的證書路徑 | 命令 | 密鑰參數(shù) | 證書參數(shù) |
---|---|---|---|---|---|
etcd-ca | etcd/ca.key | etcd/ca.crt | kube-apiserver | --etcd-cafile | |
kube-apiserver-etcd-client | apiserver-etcd-client.key | apiserver-etcd-client.crt | kube-apiserver | --etcd-keyfile | --etcd-certfile |
kubernetes-ca | ca.key | ca.crt | kube-apiserver | --client-ca-file | |
kubernetes-ca | ca.key | ca.crt | kube-controller-manager | --cluster-signing-key-file | --client-ca-file, --root-ca-file, --cluster-signing-cert-file |
kube-apiserver | apiserver.key | apiserver.crt | kube-apiserver | --tls-private-key-file | --tls-cert-file |
kube-apiserver-kubelet-client | apiserver-kubelet-client.key | apiserver-kubelet-client.crt | kube-apiserver | --kubelet-client-key | --kubelet-client-certificate |
front-proxy-ca | front-proxy-ca.key | front-proxy-ca.crt | kube-apiserver | --requestheader-client-ca-file | |
front-proxy-ca | front-proxy-ca.key | front-proxy-ca.crt | kube-controller-manager | --requestheader-client-ca-file | |
front-proxy-client | front-proxy-client.key | front-proxy-client.crt | kube-apiserver | --proxy-client-key-file | --proxy-client-cert-file |
etcd-ca | etcd/ca.key | etcd/ca.crt | etcd | --trusted-ca-file, --peer-trusted-ca-file | |
kube-etcd | etcd/server.key | etcd/server.crt | etcd | --key-file | --cert-file |
kube-etcd-peer | etcd/peer.key | etcd/peer.crt | etcd | --peer-key-file | --peer-cert-file |
etcd-ca | etcd/ca.crt | etcdctl | --cacert | ||
kube-etcd-healthcheck-client | etcd/healthcheck-client.key | etcd/healthcheck-client.crt | etcdctl | --key | --cert |
注意事項同樣適用于服務(wù)帳戶密鑰對:
私鑰路徑 | 公鑰路徑 | 命令 | 參數(shù) |
---|---|---|---|
sa.key | kube-controller-manager | --service-account-private-key-file | |
sa.pub | kube-apiserver | --service-account-key-file |
下面的例子展示了自行生成所有密鑰和證書時所需要提供的文件路徑。 這些路徑基于前面的表格。
/etc/kubernetes/pki/etcd/ca.key
/etc/kubernetes/pki/etcd/ca.crt
/etc/kubernetes/pki/apiserver-etcd-client.key
/etc/kubernetes/pki/apiserver-etcd-client.crt
/etc/kubernetes/pki/ca.key
/etc/kubernetes/pki/ca.crt
/etc/kubernetes/pki/apiserver.key
/etc/kubernetes/pki/apiserver.crt
/etc/kubernetes/pki/apiserver-kubelet-client.key
/etc/kubernetes/pki/apiserver-kubelet-client.crt
/etc/kubernetes/pki/front-proxy-ca.key
/etc/kubernetes/pki/front-proxy-ca.crt
/etc/kubernetes/pki/front-proxy-client.key
/etc/kubernetes/pki/front-proxy-client.crt
/etc/kubernetes/pki/etcd/server.key
/etc/kubernetes/pki/etcd/server.crt
/etc/kubernetes/pki/etcd/peer.key
/etc/kubernetes/pki/etcd/peer.crt
/etc/kubernetes/pki/etcd/healthcheck-client.key
/etc/kubernetes/pki/etcd/healthcheck-client.crt
/etc/kubernetes/pki/sa.key
/etc/kubernetes/pki/sa.pub
你必須手動配置以下管理員帳戶和服務(wù)帳戶:
文件名 | 憑據(jù)名稱 | 默認(rèn) CN | O (位于 Subject 中) |
---|---|---|---|
admin.conf | default-admin | kubernetes-admin | system:masters |
kubelet.conf | default-auth | system:node:<nodeName> (參閱注釋) |
system:nodes |
controller-manager.conf | default-controller-manager | system:kube-controller-manager | |
scheduler.conf | default-scheduler | system:kube-scheduler |
Note: ?
kubelet.conf
? 中 ?<nodeName>
? 的值 必須 與 kubelet 向 apiserver 注冊時提供的節(jié)點名稱的值完全匹配。
kubectl
?命令:KUBECONFIG=<filename> kubectl config set-cluster default-cluster --server=https://<host ip>:6443 --certificate-authority <path-to-kubernetes-ca> --embed-certs
KUBECONFIG=<filename> kubectl config set-credentials <credential-name> --client-key <path-to-key>.pem --client-certificate <path-to-cert>.pem --embed-certs
KUBECONFIG=<filename> kubectl config set-context default-system --cluster default-cluster --user <credential-name>
KUBECONFIG=<filename> kubectl config use-context default-system
這些文件用途如下:
文件名 | 命令 | 說明 |
---|---|---|
admin.conf | kubectl | 配置集群的管理員 |
kubelet.conf | kubelet | 集群中的每個節(jié)點都需要一份 |
controller-manager.conf | kube-controller-manager | 必需添加到 manifests/kube-controller-manager.yaml 清單中 |
scheduler.conf | kube-scheduler | 必需添加到 manifests/kube-scheduler.yaml 清單中 |
下面是前表中所列文件的完整路徑。
/etc/kubernetes/admin.conf
/etc/kubernetes/kubelet.conf
/etc/kubernetes/controller-manager.conf
/etc/kubernetes/scheduler.conf
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: