Konfigurace OCP pro použití Artifactory remote repository
install and configuration
Pro instalaci a používání OCP v privátní síti bude jako zdroj všech kontejnerů využita Artifactory. Všechny remote repository (vnější) budou whitelistovány přez ní a bude pro ně vytvořena konfigurace.
Artifactory facts
Artifactory SANDBOX link – adresa se může do budoucna lišit udávám jen z důvodu reference
Artifactory TEST tenant link – adresa se může do budoucna lišit udávám jen z důvodu reference
repository:
- artifactory.sudlice.org/docker-quay (remote repositoru directed to quay.io)
- artifactory.sudlice.org/docker-quay-local (local repository for mirroring)
Na artifactory je potřeba konfiguraci typu remote repository vytvořit. Zatím nejsou standartizovány názvy. Obrázek níže je informativního charakteru. artifactory remote repository settings
Použití “remote repository” při instalaci OCP (QUAY.IO repository)
Jediný dostupný “container registry” bude pro instalaci v privátní síti “artifactory container registry” proto z instalátoru install-config.yaml odstraníme všechny ostatní pull secrety a nahradíme ho pouze pull secretem artifactory. Provedeme konfigurace CRD ImageContentSourcePolicy tak aby místo repozitáře “quay.io” použil artifactory.
Trusted TLS cert must be used for docker registry, there is no option to use insecure container repo during install.
Vytvoření a test “remote repository pro QUAY.IO” na Artifactory
Quay.io vyžaduje autorizaci pro přihlášení, použijeme tedy identitu vygenerovanou v pull-secret.txt from Redhat pull secret pull-secret.txt
# repository for images
oc adm release info --image-for=machine-os-content quay.io/openshift-release-dev/ocp-release@sha256:ea7ac3ad42169b39fce07e5e53403a028644810bee9a212e7456074894df40f3
> quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:be4802b6fe6343053d9f5668acecd68dfb38c4be364a9a3c06e818d56ed61ad1
# decode Redhat quay.io pull secret:
cat pull-secret.txt|jq -r '.auths."quay.io".auth'|base64 -d
> openshift-release-dev+dedtomrund93wu0v54cs60osj6x1sk5i:Z56AATkk2OIGKV9OJVTKP8T3G357329ECKAUX0LBRHIGUGJ4H3UGOLHSIJPNHK4N
# it is a robot login
docker login -u firstpart_decoded -p secondpart_decoded quay.io
# test quay.io pull
podman pull quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:8a752dfed8c27a60d13f3dc578a1ea15efb2800041810204dd7b3bb79eedee04
do install-config.yaml přidáme konfiguraci pro repository mirror.
# artifactory.sudlice.org/docker-quay is remote repository
imageContentSources:
- mirrors:
- artifactory.sudlice.org/docker-quay/openshift-release-dev/ocp-release
source: quay.io/openshift-release-dev/ocp-release
- mirrors:
- artifactory.sudlice.org/docker-quay/openshift-release-dev/ocp-v4.0-art-dev
source: quay.io/openshift-release-dev/ocp-v4.0-art-dev
On artifactory UI page go to Remote registry, enable Token Authentication and in Advanced tab–> Remote Authentication add username and password from
cat pull-secret.txt|jq -r '.auths."quay.io".auth'|base64 -d
artifactory remote authentication settings
docker pull artifactory.sudlice.org/docker-quay/openshift-release-dev/ocp-v4.0-art-dev@sha256:8a752dfed8c27a60d13f3dc578a1ea15efb2800041810204dd7b3bb79eedee04
CREATE Artifactory PULL SECRET FILE for install-config.yaml
Vložíme pullsecret pro Artifactory do instalačního souboru install-config.yaml a nahradíme tak původní pullSecret.
# original pull secret is redhat for quay.io repository usage
# auth string
export encode_pass=echo -n 'usernametoartifactory:password'|base64 -w0
# inplace change
yq write -i install-config.yaml pullSecret $(jq -Rnc '.auths = {"artifactory.sudlice.org": {"auth":env.encode_pass ","email": "dedtom@gmail.com"}}')
Prezentace imageContentSourcepolicy CRD na nodech
imageContentSourcepolicy —> Machineconfig —> /etc/containers/registries.conf
oc get machineconfig|grep registries
> 99-master-c8f3919a-ee7b-4c98-a1f7-96f7bdbb3747-registries
> 99-worker-72f09b45-8b75-4609-9071-b2c50143f309-registries
oc get imeagecontentsourcepolicy
# zkraceno
oc get machineconfig 99-master-c8f3919a-ee7b-4c98-a1f7-96f7bdbb3747-registries -o yaml
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
machineconfiguration.openshift.io/role: master
spec:
config:
ignition:
version: 2.2.0
storage:
files:
- contents:
source: data:text/plain,unqualified-search-registries%20%3D%20%5B%22registry.access.redhat.com%22%2C%20%22docker.io%22%5D%0A%0A%5B%5Bregistry%5D%5D%0A%20%20prefix%20%3D%20%22%22%0A%20%20location%20%3D%20%22quay.io%2Fopenshift-release-dev%2Focp-release%22%0A%20%20mirror-by-digest-only%20%3D%20true%0A%0A%20%20%5B%5Bregistry.mirror%5D%5D%0A%20%20%20%20location%20%3D%20%22artifactory.sudlice.org%2Fdocker-quay%2Fopenshift-release-dev%2Focp-release%22%0A%0A%5B%5Bregistry%5D%5D%0A%20%20prefix%20%3D%20%22%22%0A%20%20location%20%3D%20%22quay.io%2Fopenshift-release-dev%2Focp-v4.0-art-dev%22%0A%20%20mirror-by-digest-only%20%3D%20true%0A%0A%20%20%5B%5Bregistry.mirror%5D%5D%0A%20%20%20%20location%20%3D%20%22artifactory.sudlice.org%2Fdocker-quay%2Fopenshift-release-dev%2Focp-v4.0-art-dev%22%0A
filesystem: root
mode: 420
path: /etc/containers/registries.conf
O zapis se tedy stara coreOS ignition.
Použití remote repository pro ostatní “image repository” (registry.redhat.io, docker.io … )
Problém je že imageContentSourcepolicy tedy vytvoří Machineconfig a následně soubor registries.conf ale vždy obsahuje parametr mirror-by-digest-only=true zároveň nelze upravovat na přímo ostatní parametry.
CRD imageContentSourcepolicy tak jen pro instalaci a upgrade kde se odkazujeme digestem.
# example
oc explain Imagecontentsourcepolicy --recursive
Přez machineconfig vytvoříme soubory v /etc/containers/registries.conf.d/ které budou obsahovat upravenou konfiguraci pro jednotlivé registry.
příklad konfigurace:
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
labels:
machineconfiguration.openshift.io/role: worker
name: 99-sudlice-mirror-registry
spec:
config:
ignition:
version: 2.2.0
storage:
files:
- contents:
source: data:text/plain;charset=utf-8;base64,W1tyZWdpc3RyeV1dCiAgcHJlZml4ID0gIiIKICBsb2NhdGlvbiA9ICJkb2NrZXIucGtnLmdpdGh1Yi5jb20iCiAgbWlycm9yLWJ5LWRpZ2VzdC1vbmx5ID0gZmFsc2UKCiAgW1tyZWdpc3RyeS5taXJyb3JdXQogICAgbG9jYXRpb24gPSAiYXJ0aWZhY3RvcnkuY3Nhcy5lbG9zdGVjaC5jejo0NDMvZG9j
a2VyIgoKW1tyZWdpc3RyeV1dCiAgcHJlZml4ID0gIiIKICBsb2NhdGlvbiA9ICJkb2NrZXIuaW8iCiAgbWlycm9yLWJ5LWRpZ2VzdC1vbmx5ID0gZmFsc2UKCiAgW1tyZWdpc3RyeS5taXJyb3JdXQogICAgbG9jYXRpb24gPSAiYXJ0aWZhY3RvcnkuY3Nhcy5lbG9zdGVjaC5jejo0NDMvZG9ja2VyIgo=
filesystem: root
path: /etc/containers/registries.conf.d/sudlice-mirror-registry.conf
příklad konfigurace, remote repository musí být na artifactory nakonfigurovány:
echo 'W1tyZWdpc3RyeV1dCiAgcHJlZml4ID0gIiIKICBsb2NhdGlvbiA9ICJkb2NrZXIucGtnLmdpdGh1Yi5jb20iCiAgbWlycm9yLWJ5LWRpZ2VzdC1vbmx5ID0gZmFsc2UKCiAgW1tyZWdpc3RyeS5taXJyb3JdXQogICAgbG9jYXRpb24gPSAiYXJ0aWZhY3RvcnkuY3Nhcy5lbG9zdGVjaC5jejo0NDMvZG9j
a2VyIgoKW1tyZWdpc3RyeV1dCiAgcHJlZml4ID0gIiIKICBsb2NhdGlvbiA9ICJkb2NrZXIuaW8iCiAgbWlycm9yLWJ5LWRpZ2VzdC1vbmx5ID0gZmFsc2UKCiAgW1tyZWdpc3RyeS5taXJyb3JdXQogICAgbG9jYXRpb24gPSAiYXJ0aWZhY3RvcnkuY3Nhcy5lbG9zdGVjaC5jejo0NDMvZG9ja2VyIgo='|base64 -d
[[registry]]
prefix = ""
location = "docker.pkg.github.com"
mirror-by-digest-only = false
[[registry.mirror]]
location = "artifactory.sudlice.org:443/docker"
[[registry]]
prefix = ""
location = "docker.io"
mirror-by-digest-only = false
[[registry.mirror]]
location = "artifactory.sudlice.org:443/docker"
Změna pull secret pro repository
Content of .pullSecret is stored in MachineConfig and as a secret in
oc get machineconfig 00-master -o yaml|grep artifactory -A4
oc get machineconfig 00-worker -o yaml|grep artifactory -A4
# nebo si vsechny hodnoty muzeme vytahnout z renderconfigu
Machineconfig odkazuje na soubor /var/lib/kubelet/config.json ktery obsahuje pull secrety pro container registry. Neni potreba ho menit prez machineconfig ale pokud upravime secret openshift-config/pull-secret tak se jeho hodnoty propisi sem rime
# get all cluster-wide pull secrets
oc get secret -n openshift-config pull-secret -o json |jq -r '.data[]'|base64 -d
# a pridani hodnot pro novou artifactory repository
echo -n 'username:password'|base64 -w0
# pridani nove hodnoty do stavajicich pull-secretu
oc get secret -n openshift-config pull-secret -o json |jq -r '.data[]'|base64 -d|jq '.auths += {"artifactory.sudlice.org":{"auth":"b2NwOlRyZTVaaXpxbEdKT1NZdzhCUVZ5ZGFXbjk0eVZNZg==","email":"dedtom@gmail.com"}}' >pull-secret.json
oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson=pull-secret.json
# dojde k postupnemu restartu vsech nodu
!HAPPY GUNNING!