Cloud / Kubernetes / OpenShift
Image registry storage is best and recommended to run on S3 storage endpoint(then filesystem storage, then block). In this blog context, we are going to see how OpenShift Container Storage (OCS) NooBaa S3 provider technically can be used(not officially supported at the moment of this blog written from OCS perspective).
In order to do that, openshift-image-registry-operator and image-registry pod need to trust NooBaa S3 https CA certificate. By right this CA certificate is not trusted, so we need to populate this certificate to all node using proxy/cluster CustomResource(CR).
Note: We are using default noobaa-default-backing-store, create your own if you want to use different backing store.
2. Get all bucket information, Buckets > Connect Applications:
1. Create ConfigMap with root CA certificate to sign the wildcard ingress route.
oc create configmap custom-ca \
--from-file=ca-bundle.crt=custom-cabundle.crt> \
-n openshift-config
2. Create new cluster wide CA trust bundle.
oc patch proxy/cluster \
--type=merge \
--patch='{"spec":{"trustedCA":{"name":"custom-ca"}}}'
Nodes will start rebooting once the proxy/cluster patched.
3. Next create secret for replacing default ingress certificate with new wildcard certificate:
oc create secret tls custom-cert \
--cert=wildcard.crt \
--key=wildcard.key \
-n openshift-ingress
4. Patch ingresscontroller to use new certificate.
oc patch ingresscontroller.operator default \
--type=merge -p \
'{"spec":{"defaultCertificate": {"name": "custom-cert"}}}' \
-n openshift-ingress-operator
Hint: At this stage the custom root CA is trusted cluster wide, hence when we connecting the registry to the S3 external endpoint (internal service endpoint not possible due to earlier error), the NooBaa S3 route endpoint is using reencrypt termination, thus will trust the replaced ingress certificate.
5. Now lets configure the registry to use NooBaa S3, we have created:
6. Configure secret to hold S3 AccessKey and SecretKey:
oc create secret generic image-registry-private-configuration-user --from-literal=REGISTRY_STORAGE_S3_ACCESSKEY=xxxxxxx --from-literal=REGISTRY_STORAGE_S3_SECRETKEY=yyyyyy --namespace openshift-image-registry
7. Lastly, edit oc edit configs.imageregistry.operator.openshift.io cluster, ensure managementState is “Managed” and storage section configured like example below:
# oc edit configs.imageregistry.operator.openshift.io cluster
<TRUNCATED>
managementState: Managed
<TRUNCATED>
storage:
s3:
bucket: registry
region: infra
regionEndpoint: https://s3-openshift-storage.apps.ocp4.local.bytewise.my/
<TRUNCATED>
HINT: openshift-image-registry-operator will validate the new CR configured. It validates if S3 endpoint configuration is valid. Therefore, if there no image-registry pod is progressing, inspect operator pod logs, it will give you some hint why it stop progressing or spawning to new configuration.
# oc get deployment image-registry -oyaml
<TRUNCATED>
containers:
- env:
- name: REGISTRY_STORAGE_S3_REGIONENDPOINT
value: https://s3-openshift-storage.apps.ocp4.local.bytewise.my/
- name: REGISTRY_STORAGE
value: s3
- name: REGISTRY_STORAGE_S3_BUCKET
value: registry
- name: REGISTRY_STORAGE_S3_REGION
value: infra
- name: REGISTRY_STORAGE_S3_ENCRYPT
value: "false"
- name: REGISTRY_STORAGE_S3_VIRTUALHOSTEDSTYLE
value: "false"
- name: REGISTRY_STORAGE_S3_USEDUALSTACK
value: "true"
- name: REGISTRY_STORAGE_S3_ACCESSKEY
valueFrom:
secretKeyRef:
key: REGISTRY_STORAGE_S3_ACCESSKEY
name: image-registry-private-configuration
- name: REGISTRY_STORAGE_S3_SECRETKEY
valueFrom:
secretKeyRef:
key: REGISTRY_STORAGE_S3_SECRETKEY
name: image-registry-private-configuration
<TRUNCATED>
Disclaimer:
The views expressed and the content shared in all published articles on this website are solely those of the respective authors, and they do not necessarily reflect the views of the author’s employer or the techbeatly platform. We strive to ensure the accuracy and validity of the content published on our website. However, we cannot guarantee the absolute correctness or completeness of the information provided. It is the responsibility of the readers and users of this website to verify the accuracy and appropriateness of any information or opinions expressed within the articles. If you come across any content that you believe to be incorrect or invalid, please contact us immediately so that we can address the issue promptly.
Tags: image-registry · noobaa · ocs · OpenShift · openshift4 · s3
Muhammad Aizuddin Zali
Red Hat ASEAN Senior Platform Consultant. Kubernetes, OpenShift and DevSecOps evangelist.
This site uses Akismet to reduce spam. Learn how your comment data is processed.2 Responses
Leave a Reply Cancel reply
I have subscribed to your youtube channel, but your blog here describes need for starting the effort with the default ingress registry certificate being replaced. For a lab or demo environment, is their an option beyond paying for a wildcard SSL certificate for each domain I’m setting up? In my demo environment lab I currently have three soon to be 4 OCP 4.5/6 clusters with OCS 4.6 running. So needing 4 seperate wildcard ssl certificates doesn’t make sense.
This is a great post. I did a very similar setup with one difference:
Instead of creating the bucket and account manually in the Noobaa interface I created an ObjectBucketClaim using the nooba StorageClass and used that one instead.