《OpenShift / RHEL / DevSecOps / Ansible 汇总目录》
说明:本文已经在 OpenShift 4.14 + ACM 2.9 + AWS 环境中验证
本文是《OpenShift 4 - 用 HyperShift 实现以“托管集群”方式部署运行 OpenShift 集群(视频)》的后续。
托管集群的管理模式
由于 OpenShift 托管集群的 “控制平面” 是运行在 “管理集群” 中对应的命名空间里,因此 “控制集群” 的一部分运维管理是由 “管理集群” 的管理员完成的。
- “管理集群”的管理员负责创建、升级所有“托管集群”环境、手动扩展“托管集群”的节点、配置“托管集群”的认证方式等。
- “托管集群”的管理员负责管理管理自己集群内部资源的管理,例如分配所属“托管集群”的用户的访问权限、安装 Operator 等。
- “托管集群”的一般用户负责部署应用资源,监控应用运行。
本文为演示方便,将在 “管理集群” 上为一个 “托管集群” 配置 HTPasswd 认证方式。正式环境可以配置例如 RedHat SSO 或其他更正式的用户认证方式。
创建托管集群
- 执行命令可以创建一个名为 devops 的托管集群。
$ CLUSTER_NAME=devops
$ hcp create cluster aws \
--name ${CLUSTER_NAME} \
--infra-id ${CLUSTER_NAME} \
--region us-west-1 \
--zones us-west-1b,us-west-1c \
--instance-type m5a.large \
--root-volume-type gp3 \
--root-volume-size 100 \
--etcd-storage-class gp3-csi \
--control-plane-availability-policy SingleReplica \
--infra-availability-policy SingleReplica \
--network-type OVNKubernetes \
--release-image quay.io/openshift-release-dev/ocp-release:4.13.2-x86_64 \
--node-pool-replicas 1 \
--namespace local-cluster \
--secret-creds aws-credentials \
--auto-repair \
--generate-ssh
-
在托管集群完成创建后,可以查看到登录该托管集群的方法,包括 API 地址、管理员和密码。
-
(可选)可执行以下命令删除托管集群。
$ hcp destroy cluster aws --name ${CLUSTER_NAME} --secret-creds aws-credentials --namespace local-cluster
- 生成访问集群所使用的 KUBECONFIG 文件。
$ oc get secret ${CLUSTER_NAME}-kubeadmin-password -n local-cluster --template='{{ .data.password }}' | base64 -d > $HOME/.kube/${CLUSTER_NAME}.kubeadmin-password
$ oc get secret ${CLUSTER_NAME}-admin-kubeconfig -n local-cluster --template='{{ .data.kubeconfig }}' | base64 -d > $HOME/.kube/${CLUSTER_NAME}-kubeconfig
配置基于 HTPasswd 的用户认证
- 执行命令创建一个包含用户名和密码的文件,然后再基于该文件在 local-cluster 项目中生成 Secret 对象 ${CLUSTER_NAME}-htpass-secret。
$ htpasswd -b -c users.htpasswd user1 password
$ htpasswd -b users.htpasswd user2 password
$ oc create secret generic ${CLUSTER_NAME}-htpass-secret --from-file=htpasswd=users.htpasswd -n local-cluster
- 执行名创建基于 HTPasswd 的 identityProvider 配置 文件,它使用了 ${CLUSTER_NAME}-htpass-secret 对象作为认证源。
$ cat << EOF > patch.yaml
spec:
configuration:
oauth:
identityProviders:
- htpasswd:
fileData:
name: ${CLUSTER_NAME}-htpass-secret
mappingMethod: claim
name: my_htpasswd_provider
type: HTPasswd
EOF
- 备份 ${CLUSTER_NAME}-kubeadmin-password 中的密码,因为下一步会自动删除这个 secret 对象。
- 执行命令,使用 patch.yaml 更新名为 ${CLUSTER_NAME} 的 hostedcluster 配置。
$ oc patch hostedcluster ${CLUSTER_NAME} -n local-cluster --type merge --patch-file patch.yaml
- 查看 oauth-openshift 相关的 pod 的状态,更新完。
$ oc get pod -n local-cluster-${CLUSTER_NAME} | grep oauth-openshift -w
oauth-openshift-757f596578-xf5m8 2/2 Running 0 31s
配置托管集群用户的访问权限
- 执行获得使用 kubeadmin 用户访问托管集群的 kubeconfig 文件,并将其设到 KUBECONFIG 环境变量。
$ KUBECONFIG=$HOME/.kube/${CLUSTER_NAME}-kubeconfig
- 执行命令,设置托管集群的 user1 用户的访问权限。说明:可以显示声明使用的 kubeconfig 参数。
$ oc adm policy add-cluster-role-to-user cluster-admin user1 --kubeconfig=$HOME/.kube/${CLUSTER_NAME}-kubeconfig
- 执行命令退出托管管集群。
$ unset KUBECONFIG
访问验证
- 执行命令,使用 user1 或 user2 用户登录托管集群。
$ HOSTED_CLUSTER_API=https://$(oc get hostedcluster -n local-cluster ${CLUSTER_NAME} -ojsonpath={.status.controlPlaneEndpoint.host}):6443
$ oc login $HOSTED_CLUSTER_API -u user1 -p password
- 使用 user1 或 user2 用户登录托管集群控制台。由于 user1 已是集群管理员,他可以看到集群所有资源;而 user2 是一般用户,他只能看到下图中集群有限的资源。
视频
参考
https://hypershift-docs.netlify.app/how-to/cluster-configuration/