1. はじめに
IBM Cloud Kubernetes Services(IKS)/IBM Cloud Red Hat OpenShift Services(ROKS)では、IBM Cloud Secrets Manageで管理されている以下のsecretをIKS/ROKS上のsecretとして連携することが可能である。
- Arbitrary secrets hold one string value.
- IAM credentials hold an IAM API key.
- Username and password secrets hold a username and password as two separate values.
- Key values hold JSON values.
(参考リンク)
- https://cloud.ibm.com/docs/openshift?topic=openshift-secrets&locale=en#non-tls
- https://cloud.ibm.com/docs/containers?topic=containers-secrets&locale=en#non-tls
上記IBM Cloud docs上ではCLIでSecrets ManagerのCRNを指定することで連携処理を実施しているが、IBM Cloud Portal上でもUIで同様のことは実施可能なので、本稿ではUIを使って実施してみる。
2. IAMで権限付与
IBM Cloud Red Hat OpenShift ServicesからSecrets Managerを呼び出す必要があるため、IAMにて以下のような認可を事前に構成しておく。
3. OpenShift projectの作成
今回は、syasuda
というproject(namespace)を作成し、そこにSecrets Manager上のsecretを連携することにする。
$ oc new-project syasuda
Now using project "syasuda" on server "https://c115-e.jp-tok.containers.cloud.ibm.com:31149".
You can add applications to this project with the 'new-app' command. For example, try:
oc new-app rails-postgresql-example
to build a new example application in Ruby. Or use kubectl to deploy a simple Kubernetes application:
kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.43 -- /agnhost serve-hostname
$ oc get secrets -n syasuda
NAME TYPE DATA AGE
builder-dockercfg-rvwzp kubernetes.io/dockercfg 1 53s
builder-token-vb9gm kubernetes.io/service-account-token 4 53s
default-dockercfg-ks5p4 kubernetes.io/dockercfg 1 53s
default-token-86sdh kubernetes.io/service-account-token 4 53s
deployer-dockercfg-l6lhj kubernetes.io/dockercfg 1 53s
deployer-token-g9ksk kubernetes.io/service-account-token 4 53s
4. secretの作成と、ROKSへの連携
以下の操作に従い、Secrets Managerでsecretを作成する
- Add
- 今回はSecrets Manager上で管理するusername/passwordをIBM Cloud Red Hat OpenShift Servicesに連携したいので、ここでは
User credentails
を選択する。 - secretの名前を設定
- credential情報を入力。
- まとめ
ROKSに上記のsecretを連携する。
- ROKSの管理画面から、Ingress -> Secretsと移動し、
Create
を押下。 - 連携するSecretを指定する。先ほど作成したProject/Namespaceにこのsecretを連携したいので、
Namespace
を適切に入力することを忘れないようにする(今回の場合はsyasuda
)。 - 追加された。
以下でROKS上に連携されたことを確認する。
$ oc get secrets -n syasuda
NAME TYPE DATA AGE
builder-dockercfg-rvwzp kubernetes.io/dockercfg 1 6m52s
builder-token-vb9gm kubernetes.io/service-account-token 4 6m52s
default-dockercfg-ks5p4 kubernetes.io/dockercfg 1 6m52s
default-token-86sdh kubernetes.io/service-account-token 4 6m52s
deployer-dockercfg-l6lhj kubernetes.io/dockercfg 1 6m52s
deployer-token-g9ksk kubernetes.io/service-account-token 4 6m52s
syasuda-test-secret Opaque 2 41s
$ oc get secrets syasuda-test-secret -n syasuda -o yaml
apiVersion: v1
data:
password: emFxMTJ3c3g=
username: c3lhc3VkYQ==
kind: Secret
metadata:
annotations:
ingress.cloud.ibm.com/cert-source: ibm
creationTimestamp: "2024-03-05T09:45:00Z"
name: syasuda-test-secret
namespace: syasuda
resourceVersion: "1711335"
uid: ab9cef53-93e8-4527-87a1-d6453d3a67a9
type: Opaque
$ oc get secrets syasuda-test-secret -n syasuda -o jsonpath='{.data.username}'| base64 -d
syasuda
$ oc get secrets syasuda-test-secret -n syasuda -o jsonpath='{.data.password}'| base64 -d
zaq12wsx
5. Secrets Manager上でのsecretのRotate
これだけだとROKSにはまだ反映されない
$ oc get secrets syasuda-test-secret -n syasuda -o jsonpath='{.data.password}'| base64 -d
zaq12wsx
更新処理を実施すると反映された。
$ ibmcloud oc ingress secret update --cluster xxxxxxxxx --name syasuda-test-secret --namespace syasuda
OK
$ oc get secrets syasuda-test-secret -n syasuda -o jsonpath='{.data.password}'| base64 -d
zaq12wsxCDE#$RFV
``