OCP 4.7.6 Post-Installation Configuration === ###### tags: `IBM` `Infra` `OCP` ## Create Other Users with *cluster-admin* (ClusterRole) :::danger The secret key containing the users file for the --from-file argument must be named ```htpasswd```. ::: ``` htpasswd -c -B -b users.htpasswd <USER NAME> <PASSWORD> oc create secret generic <SECRET NAME> --from-file=htpasswd=./users.htpasswd -n openshift-config cat << EOF > other-users.yaml apiVersion: config.openshift.io/v1 kind: OAuth metadata: name: cluster spec: identityProviders: - name: my_htpasswd_provider mappingMethod: claim type: HTPasswd htpasswd: fileData: name: <SECRET NAME> EOF oc apply -f other-users.yaml oc adm policy add-cluster-role-to-user cluster-admin <USER NAME> ``` 刪除 kubeadmin user (可選) ## Enable *image-registry* (ClusterOperator) 預設不啟用 image-registry,必須設定好其背後的儲存空間,才可啟用。 建立 PV ``` vi image-registry-pv.yaml apiVersion: v1 kind: PersistentVolume metadata: name: image-registry-pv spec: accessModes: - ReadWriteMany capacity: storage: 10Gi nfs: path: /var/ocp/image-registry server: 172.16.30.39 persistentVolumeReclaimPolicy: Retain storageClassName: nfs01 oc create -f image-registry-pv.yaml ``` 建立 PVC ``` vi image-registry-pvc.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: image-registry-pvc namespace: openshift-image-registry spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi storageClassName: nfs01 volumeMode: Filesystem oc create -f image-registry-pvc.yaml ``` :::info PV 數量這麼多,該如何找到適合的呢? 這時候當然是要由系統管理人員對 PV 進行分類,也就是說在建立 PV 同時必須賦予有意義的 storgeClassName 做為識別證,另外也需要規範回收策略,例如: * Delete: 當用戶刪除 PersistentVolumeClaim 時,對應的 PersistentVolume 將被自動被刪除。 * Retain: 當用戶刪除 PersistentVolumeClaim 時,對應的 PersistentVolume 不會被刪除,它將變為 Released 狀態,表示所有的資料可以被手動恢復。 ::: ``` oc patch configs.imageregistry.operator.openshift.io cluster --type merge --patch '{"spec":{"storage":{"pvc":{"claim":"image-registry-pvc"}}}}' ``` 將 ManagementState 從 Removed 修改成 Managed ``` oc patch configs.imageregistry.operator.openshift.io cluster --type merge --patch '{"spec":{"managementState":"Managed"}}' oc get configs.imageregistry.operator.openshift.io/cluster -o yaml | grep managementState ``` 驗證 clusteroperator ``` oc get clusteroperator image-registry ``` 確認出現 5000 port 的 service ``` oc get svc -n openshift-image-registry NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE image-registry ClusterIP 10.246.187.88 <none> 5000/TCP 115s image-registry-operator ClusterIP None <none> 60000/TCP 3d12h ``` 測試上傳 imagestream ``` oc debug nodes/<NODE ADDRESS> sh-4.2# chroot /host sh-4.2# oc login -u <USER> -p <PASSWORD> https://api.myocp.abbyland.org:6443 sh-4.2# oc policy add-role-to-user registry-viewer $(oc whoami) sh-4.2# oc policy add-role-to-user registry-editor $(oc whoami) sh-4.2# oc patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=merge sh-4.2# IMAGE_REGISTRY_HOST=$(oc get route default-route -n openshift-image-registry --template='{{ .spec.host }}') default-route-openshift-image-registry.dte-ocp46-qj1pxa-915b3b336cabec458a7c7ec2aa7c625f-0000.us-east.containers.appdomain.cloud sh-4.2# podman login -u $(oc whoami) -p $(oc whoami -t) --tls-verify=false $IMAGE_REGISTRY_HOST sh-4.2# podman login -u abby.wu.rhn@ibm.com -p <REDHAT_PASSWORD> --tls-verify=false registry.redhat.io sh-4.2# podman pull registry.redhat.io/rhel8/support-tools sh-4.2# podman tag registry.redhat.io/rhel8/support-tools $IMAGE_REGISTRY_HOST/rhel8/support-tools sh-4.2# podman push $IMAGE_REGISTRY_HOST/rhel8/support-tools ``` ## Configure Offline OperatorHub ### Disable the default remote OperatorHub sources for OLM ``` oc patch OperatorHub cluster --type json -p '[{"op": "add", "path": "/spec/disableAllDefaultSources", "value": true}]' oc get OperatorHub cluster -o yaml ``` ### Create local mirrors of the OperatorHub content | Catalog | Description | | -------- | -------- | | redhat-operators | Public catalog for Red Hat products packaged and shipped by Red Hat. Supported by Red Hat. | | certified-operators | Public catalog for products from leading independent software vendors (ISVs). Red Hat partners with ISVs to package and ship. Supported by the ISV. | | community-operators | Public catalog for software maintained by relevant representatives in the operator-framework/community-operators GitHub repository. No official support. | 1. 建立一 Operator catalog image :::danger The internal registry of the OpenShift Container Platform cluster cannot be used as the target registry because it does not support pushing without a tag, which is required during the mirroring process. The Operator must: * List any related images, or other container images that the Operator might require to perform their functions, in the relatedImages parameter of its ClusterServiceVersion (CSV) object. * Reference all specified images by a digest (SHA) and not by a tag ::: ``` podman login registry.redhat.io podman login reg.myocp.abbyland.org:5000 ``` ``` REG_CREDS=$HOME/pull-secret.json oc adm catalog build \ --appregistry-org redhat-operators \ --from=registry.redhat.io/openshift4/ose-operator-registry:v4.7 \ --filter-by-os="linux/ppc64le" \ --to=reg.myocp.abbyland.org:5000/olm/redhat-operators:v4.7 \ -a ${REG_CREDS} \ --insecure ``` 驗證 ``` curl -u reguser:reguser1234 -k https://reg.myocp.abbyland.org:5000/v2/_catalog {"repositories":["ocp4/openshift4", "olm/redhat-operators"]} podman pull https://reg.myocp.abbyland.org:5000/olm/redhat-operators:v4.7 podman run -p 50051:50051 -it https://reg.myocp.abbyland.org:5000/olm/redhat-operators:v4.7 # grpcurl -plaintext localhost:50051 api.Registry/ListPackages { "name": "3scale-operator" } { "name": "amq-broker" } { "name": "amq-online" } ``` 2. 解壓縮 Operator catalog image 以產生所有 operators 參考到的 images 清單,將清單所有內容推入 mirror registry ``` oc adm catalog mirror \ reg.myocp.abbyland.org:5000/olm/redhat-operators:v4.7 \ reg.myocp.abbyland.org:5000 \ -a ${REG_CREDS} \ --insecure \ --filter-by-os='.*' ``` :::danger If the --filter-by-os flag remains unset or set to any value other than .*, the command filters out different architectures, which changes the digest of the manifest list, also known as a multi-arch image. The incorrect digest causes deployments of those images and Operators on disconnected clusters to fail. For more information, see BZ#1890951. ::: 產生./redhat-operators-manifests目錄,底下有: * imageContentSourcePolicy.yaml - 用來設定 nodes,使其關聯 Operator 清單參考到的 images 與對應的 mirror registry repositories * mapping.txt (欲修改清單才會用到) - 給 ```oc image mirror``` 使用的清單,包含所有需要的 images,格式如 ```registry.redhat.io/openshift-service-mesh/prometheus-rhel8@sha256:68d47c477bb9b1a4cae6432361326efd0f75146ecf104c84b9c23afb09e77f09=reg.myocp.abbyland.org:5000/openshift-service-mesh/prometheus-rhel8:27f4a38e``` 3. 建立 ImageContentSourcePolicy 物件 ``` oc apply -f ./redhat-operators-manifests/imageContentSourcePolicy.yaml ``` 4. 建立 CatalogSource 物件 ``` vi catalogsource.yaml apiVersion: operators.coreos.com/v1alpha1 kind: CatalogSource metadata: name: my-operator-catalog namespace: openshift-marketplace spec: sourceType: grpc image: reg.myocp.abbyland.org:5000/olm/redhat-operators:v4.7 displayName: My Operator Catalog publisher: Red Hat oc create -f catalogsource.yaml ``` 驗證 ``` oc get pods -n openshift-marketplace oc get catalogsource -n openshift-marketplace oc get packagemanifest -n openshift-marketplace NAME CATALOG AGE etcd My Operator Catalog 34s ``` ## Reference - [乾貨!OpenShift離線環境OperatorHub和ImageStream配置實戰技巧](https://www.mdeditor.tw/pl/ggZY/zh-tw) - [Using Operator Lifecycle Manager on restricted networks](https://docs.openshift.com/container-platform/4.5/operators/admin/olm-restricted-networks.html) - [OpenShift 4 - 配置OpenShift集群日志环境EFK](https://blog.csdn.net/weixin_43902588/article/details/105586460) - [Exposing image-registry](https://docs.openshift.com/container-platform/4.1/registry/securing-exposing-registry.html)
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.