---
# System prepended metadata

title: 存取 OpenShift 內部的 Registry
tags: [redhat, OpenShift]

---

###### tags: `redhat` `OpenShift`
# 存取 OpenShift 內部的 Registry

因為 Opeshift 本身提供 Image Registry, 但預設並不能由外部來存取，只能通過 Deployment/DeploymentcConfig 來指向內部 entrypoint。
但如果使用 oc new-app 產生的 images 會自動存入其中，如要備份要匯出，則需要能從外部經由 podman/docker cli 來存取並匯出。由於預設的 route 並不能提供此功能，所以需要以下步驟開啟 HTTPS route 提供外部存取之用

### 手動建立路由 (route)
使用 OpenShift CLI 來開啟此通道
```
oc patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=merge
```
完成後，可以取得存取用的URL
```
URL=$(oc get route default-route -n openshift-image-registry --template='{{ .spec.host }}')
```
取得此連結的憑證, 並放在 Linux 中
```
oc get secret -n openshift-ingress  router-certs-default -o go-template='{{index .data "tls.crt"}}' | base64 -d | sudo tee /etc/pki/ca-trust/source/anchors/${HOST}.crt  > /dev/null
```
更新系統憑證
```
sudo update-ca-trust enable
```
如此一來就可以登入
```
podman login -u kubeadmin -p $(oc whoami -t) $URL
```
如果不想安裝憑證也可先使用不安全的方式先登入
```
podman login -u kubeadmin -p $(oc whoami -t) --tls-verify=false $URL
```
如果在載入憑證的條件下又是使用 docker cli, 則需要在 `/etc/docker/daemon.json` 中設定不安全的連結；以下範例需將 $URL 改成上面取後的連結
```
{
  "insecure-registries" : ["$URL"]
}
```
```
doceker login -u kubeadmin -p $(oc whoami -t) --tls-verify=false $URL
```