为 OpenShift Data Foundation 附加组件设置可信概要文件
虚拟私有云 经典集群
您可以使用 ODF 的受信任配置文件来限制群集中运行的 pod 对账户或群集中其他资源的访问。 有关可信概要文件的更多信息,请参阅 创建可信概要文件。
启用 OpenShift Data Foundation 附加组件
-
在您的集群中启用该插件。 查看 参数参考。
示例命令:
ibmcloud oc cluster addon enable openshift-data-foundation -c CLUSTER_NAME --version 4.X.X -
验证附加组件状态是否为
normal,状态是否为ready。ibmcloud oc cluster addon ls --cluster CLUSTER-ID -
验证度量代理程序 pod 是否已部署且状态为
Running。kubectl get pods -n kube-system | grep ibm-storage-metrics-agent示例输出:
ibm-storage-metrics-agent-644cd95b5b-rh2gd 2/2 Running 0 7h42m
为 ODF 设置受信任的配置文件
-
执行以下步骤以 创建可信概要文件。 在概要文件的 条件 中,确保指定以下访问权。
- 当 Namespace 等于
kube-system时允许访问 - Satellite 服务角色- Satellite Link 管理员,读者
- Kubernetes Service 角色-管理器,编辑器
- 计费服务角色-读者,操作员
- 当 Namespace 等于
-
创建可信概要文件后,请从控制台中的“可信概要文件”页面复制标识。
-
决定是要在附加组件使用的 Kubernetes 私钥中使用 概要文件标识 还是 API 密钥。 您可以使用可信概要文件的标识或 API 密钥来创建私钥。 保存以下文本并输入凭证。 您可以执行手动创建私钥的步骤,也可以使用 shell 脚本 在集群中自动创建私钥。
具有 pod 身份的凭证示例:
IBMCLOUD_AUTHTYPE=pod-identity IBMCLOUD_PROFILEID=<TRUSTED-PROFILE-ID>具有 API 密钥的示例凭证。
IBMCLOUD_AUTHTYPE=iam IBMCLOUD_APIKEY=<API-KEY> -
将凭证编码为 base64。
echo -n "IBMCLOUD_AUTHTYPE=<IAM-OR-POD-IDENTITY> IBMCLOUD_APIKEY=<API-KEY>" | base64 -
在集群中创建包含可信概要文件凭证的私钥。 将以下 YAML 保存到名为
ibm-cloud-credentials.yaml的文件中。 在ibm-credentials.env:字段中,输入 base64 编码的 API 密钥或可信概要文件的标识。apiVersion: v1 data: ibm-credentials.env: # Trusted profile ID kind: Secret metadata: name: ibm-cloud-credentials namespace: kube-system type: Opaque -
在集群中创建私钥。
kubectl apply -f ibm-cloud-credentials.yaml -
重新启动代理程序 pod。
kubectl delete pod <ibm-storage-metrics-agent> -n kube-system>
使用 Shell 脚本自动创建私钥
-
执行以下步骤以 创建可信概要文件。 在概要文件的 条件 中,确保指定以下访问权。
- 当 Namespace 等于
kube-system时允许访问 - Satellite 服务角色- Satellite Link 管理员,读者
- Kubernetes Service 角色-管理器,编辑器
- 计费服务角色-读者,操作员
- 当 Namespace 等于
-
将以下脚本保存到名为
generate-secret.sh的文件。IBMCLOUD_AUTHTYPE= SECRET= error() { if [[ $? != 0 ]]; then echo "$1"; exit 1 fi } #validate_arguments validates the arguments provided to the script validate_arguments() { if [[ "$#" -eq 1 ]]; then if [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]]; then usage; exit 1 fi fi #number of arguments provided to the script must be 2 if [[ "$#" -ne 2 ]]; then echo "Invalid number of arguments provided" usage; exit 1 fi #1st argument must be 'iam' or 'pod-identity' if [[ "$1" != "iam" ]] && [[ "$1" != "pod-identity" ]]; then echo "Provide a valid auth-type" usage; exit 1 fi IBMCLOUD_AUTHTYPE=$1 SECRET=$2 } #usage - prints the usage for execution of script usage() { echo "USAGE: bash generate-secret.sh <auth-type> <apikey/profile-id> auth-type: auth-type should be either iam or pod-identity. Provide iam to use api key, pod-identity to use trusted profile" } #main main() { validate_arguments "$@" auth_type="IBMCLOUD_AUTHTYPE=$IBMCLOUD_AUTHTYPE" secret= if [[ "$IBMCLOUD_AUTHTYPE" == "iam" ]]; then secret="IBMCLOUD_APIKEY=$SECRET" else secret="IBMCLOUD_PROFILEID=$SECRET" fi encodedValue=$(echo -e "$auth_type\n$secret" | base64) #on certain os, base64 encoding introduces newline, removing the same here. encodedValue=${encodedValue//$'\n'/} #fetch the agent pod name agentPodName=$(kubectl get pods -n kube-system | grep ibm-storage-metrics-agent | awk '{print $1}') error "$(date +"%b %d %G %H:%M:%S"): Unable to fetch ODF agent pod." if [[ "$agentPodName" == "" ]]; then echo "$(date +"%b %d %G %H:%M:%S"): Error - ibm-storage-metrics-agent pod not found" exit 1 fi echo "apiVersion: v1 data: ibm-credentials.env: $encodedValue kind: Secret metadata: name: ibm-cloud-credentials namespace: kube-system type: Opaque" > ibm-cloud-credentials.yaml #create the k8s secret kubectl apply -f ibm-cloud-credentials.yaml &> /dev/null error "$(date +"%b %d %G %H:%M:%S"): Error creating ibm-cloud-credentials secret." echo "$(date +"%b %d %G %H:%M:%S"): Created ibm-cloud-credentials secret" #restart the ODF agent pod echo "$(date +"%b %d %G %H:%M:%S"): Restarting $agentPodName pod" kubectl delete pod "$agentPodName" -n kube-system &> /dev/null error "$(date +"%b %d %G %H:%M:%S"): Error restarting $agentPodName pod in kube-system namespace." agentPodStatus= for i in {1..12} do sleep 5 agentPodStatus=$(kubectl get pods -n kube-system | grep ibm-storage-metrics-agent | awk '{print $3}') if [[ "$agentPodStatus" == "Running" ]]; then echo "$(date +"%b %d %G %H:%M:%S"): $i: ODF billing agent is now using ibm-cloud-credentials secret" rm ibm-cloud-credentials.yaml error "Error deleting ibm-cloud-credentials.yaml." exit 0 fi done error "$(date +"%b %d %G %H:%M:%S"): Error - ibm-storage-metrics-agent is in $agentPodStatus state" } main "$@" -
运行
generate-secret.sh脚本并将iam或pod-identity指定为IBMCLOUD_AUTHTYPE以及PROFILE-ID或API-KEY。用于通过将
pod-identity与可信概要文件标识配合使用来运行generate-secret.sh的示例命令。sh ./generate-secret.sh pod-identity PROFILE-ID用于将
iam与 API 密钥配合使用来运行generate-secret.sh的示例命令。sh ./generate-secret.sh iam API-KEY -
重新启动代理程序 pod。
oc delete pod <ibm-storage-metrics-agent> -n kube-sysem -
获取代理程序 pod 的日志,以通过在输出中查找
secret type来验证驱动程序是否正在使用正确的凭证。 例如,"secret-used":"ibm-cloud-credentials","type":"pod-identity"。oc logs ibm-storage-metrics-agent-xxx -c storage-secret-sidecar -n kube-system