Disconnected workarounds
Make ImageContentSourcePolicies work using image tags
The ImageContentSourcePolicies (ICSP) have not exposed the API to handle the parameter mirror-by-digest-only
, so in order to do that, we need to manually create a MachineConfig change to be applied in all the HostedCluster workers. This change will perform a similar action in the workers like an ICSP.
Note
You don't need to do this with future versions of Openshift because config.openshift.io/v1
has an exposed API to do this, called ImageTagMirrorSet
.
Note
This workaround could also be applied in the management cluster first, prior to deploying a HostedCluster from the management cluster.
This is our MachineConfig template:
mc-icsp-template.yaml
--- apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: labels: machineconfiguration.openshift.io/role: master name: 99-worker-mirror-by-digest-registries spec: config: ignition: version: 3.1.0 storage: files: - contents: source: data:text/plain;charset=utf-8;base64,$B64_RAWICSP filesystem: root mode: 420 path: /etc/containers/registries.conf.d/99-mirror-by-digest-registries.conf
Basically, we create a file inside of /etc/containers/registries.conf.d/
called 99-mirror-by-digest-registries.conf
which tells the runtime to use the custom registry instead of the external one.
Also, here we have our final file content:
icsp-raw-mc.yaml
[[registry]] prefix = "" location = "registry.redhat.io/openshift4/ose-kube-rbac-proxy" mirror-by-digest-only = false [[registry.mirror]] location = "registry.ocp-edge-cluster-0.qe.lab.redhat.com:5000/openshift4/ose-kube-rbac-proxy" [[registry]] prefix = "" location = "quay.io/acm-d" mirror-by-digest-only = false [[registry.mirror]] location = "registry.ocp-edge-cluster-0.qe.lab.redhat.com:5000/acm-d" [[registry]] prefix = "" location = "quay.io/open-cluster-management/addon-manager" mirror-by-digest-only = false [[registry.mirror]] location = "registry.ocp-edge-cluster-0.qe.lab.redhat.com:5000/open-cluster-management/addon-manager"
Now we just need to mix the things up and apply them into our HostedCluster
export B64_RAWICSP=$(cat icsp-raw-mc.yaml | base64)
envsubst < mc-icsp-template.yaml | oc apply -f -
These two commands will create the MachineConfig change in the Openshift cluster, so eventually the worker nodes will get rebooted.
After applying this change, the worker nodes will be able to consume the mirror when only the tags are involved.