通常我们是使用username/password登录OpenShift,不过还可以证书登录OpenShift。使用证书除了可以参考《OpenShift 4 - 获取OpenShift的证书,实现基于证书的操作》,还可用本文创建自定义的证书然后注册到OpenShift中,这样就可以用证书登录操作OpenShift了。
- 通过《OpenShift 4之增加 HTPasswd方式的身份认证》一文在OpenShift中增加一个用户(例如user100,密码password)
- 用user100登录OpenShift控制台,并创建user100-1项目。
- 用集群管理员在命令行登录OpenShift。
- 设置环境变量。
$ export OCP_USERNAME="user100"
$ export OCP_API_SERVER=$(oc whoami --show-server)
$ mkdir ${OCP_USERNAME}
- 创建自签名证书。
$ openssl req -new -nodes -subj "/CN=${OCP_USERNAME}" -keyout ${OCP_USERNAME}/private.key -out ${OCP_USERNAME}/request.csr
- 创建CertificateSigningRequest对象。
$ cat <<EOF | oc apply -f -
apiVersion: certificates.k8s.io/v1beta1
kind: CertificateSigningRequest
metadata:
name: tls-auth-${OCP_USERNAME}
spec:
signerName: "kubernetes.io/kube-apiserver-client"
request: $(cat ${OCP_USERNAME}/request.csr | base64 | tr -d '\n')
usages:
- digital signature
- key encipherment
- client auth
extra:
scopes.authorization.openshift.io:
- user:full
EOF
- 在OpenShift中通过CertificateSigningRequest审批。
$ oc adm certificate approve tls-auth-${OCP_USERNAME}
- 从已签名的CSR中获得客户端证书。
$ oc get csr tls-auth-${OCP_USERNAME} -o jsonpath="{.status.certificate}" | base64 -d > ${OCP_USERNAME}/certificate.pem
- 从API Server中获得CA链
$ oc get cm kube-apiserver-server-ca -o jsonpath="{.data.ca-bundle\.crt}" -n openshift-kube-apiserver > api-ca.pem
- 为用户创建kubeconfig文件,其中包括了用户证书、私钥要CA链。
$ oc adm create-kubeconfig \
--kubeconfig=${OCP_USERNAME}/kubeconfig \
--user=${OCP_USERNAME} \
--client-certificate=${OCP_USERNAME}/certificate.pem \
--client-key=${OCP_USERNAME}/private.key \
--certificate-authority=api-ca.pem \
--public-master=${OCP_API_SERVER} \
--master=${OCP_API_SERVER}
- 从OpenShift退出集群管理员。
$ oc logout
- 设置KUBECONFIG,修改缺省使用的kubeconfig文件。
$ export KUBECONFIG="${OCP_USERNAME}/kubeconfig"
- 执行命令,确认当前是user100用户,可以创建应用,但是看不到Session的Token。
$ oc whoami
user100
$ oc whoami -t
error: no token is currently in use for this session
$ oc project user100-1
$ oc new-app openshift/hello-openshift