K8s no tiene un componente de administración de usuarios. El CN en el certificado pasado por el cliente se extrae como el nombre de usuario y el campo O es el nombre del grupo.
Instalar cfssl
https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
cp cfssl_linux-amd64 /usr/local/bin/cfssl
cp cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo
cfssljson_linux-amd64 /usr/local/bin/cfssljson
chmod +x /usr/local/bin/cfssl*
Certificado ceph de nuevo usuario
- Prepare json, en uso real, elimínelo después de #
cat <<EOF>> ceph.json { "CN": "ceph", # 用户 "hosts": [], "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "shanghai", "L": "shanghai", "O": "k8s", #组 "OU": "System" } ] } EOF
- Generar crt
cfssl gencert -ca=/etc/kubernetes/pki/ca.crt \
-ca-key=/etc/kubernetes/pki/ca.key \
-profile=kubernetes ./ceph.json | cfssljson -bare ceph
cfssl gencert -ca=/etc/kubernetes/pki/ca.crt \
-ca-key=/etc/kubernetes/pki/ca.key \
./ceph.json | cfssljson -bare ceph
Hasta ahora, se ha generado un certificado para el usuario de ceph
Cree un espacio de nombres llamado ceph, ceph puede administrar completamente este espacio de nombres
Aquí se vinculará el administrador de cla *** ole como un enlace de roles a ceph. Este comando debe ejecutarse bajo un usuario que pueda administrar k8s
kubectl create rolebinding ceph-admin-binding \
--clusterrole=admin \
--user=ceph \
--namespace=ceph
Certificado de verificación
El curl 7.29.0 en centos7 parece no poder enviar el certificado público de ceph.pem a la api, lo que hace que la api se considere acceso anónimo, y curl 7.64.0 puede acceder a la api normalmente
curl -X GET --cert ceph.pem --key ceph-key.pem --cacert cacrt https://192.168.254.99:6444/api/v1/namespaces/ceph/pods
Generar configuración
- Generar información de clúster
export KUBE_APISERVER=https://192.168.254.99:6444
kubectl config set-cluster kubernetes \
--certificate-authority=/etc/kubernetes/pki/ca.crt \
--embed-certs=true \
--server=${KUBE_APISERVER} \
--kubeconfig=ceph.kubeconfig
- Establecer el parámetro de quién en el lado del servicio al cliente
kubectl config set-credentials ceph \
--client-certificate=ceph.pem \
--client-key=ceph-key.pem \
--embed-certs=true \
--kubeconfig=ceph.kubeconfig
- Establecer parámetros de contexto
kubectl config set-context ceph \ #这个是上下文名称,可随意取
--cluster=kubernetes \
--user=ceph \
--namespace=ceph \
--kubeconfig=ceph.kubeconfig
- Establezca el contexto predeterminado, tenga en cuenta que no se puede escribir en el estilo de ~ / .kub / config, de lo contrario, la ejecución no tendrá éxito
kubectl config use-context ceph --kubeconfig=ceph.kubeconfig
Utilice kubeconfig
kubectl --kubeconfig=ceph.kubeconfig get pod
También se puede copiar a .kube y utilizar
cp ceph.kubeconfig ~/.kube/config