MacからPodman CLIでOpenShift 4 へpodman pushする

Openshift 4 でのCLIとして、 docker CLI から podman CLI への変遷がみてとれます。
しかしながら [Docker Desktop](https://www.docker.com/products/docker-desktop) のようなローカル環境向けの整備はこれからの状態にあリます。
そこで、 **Vagrant を用いて Macから Podman CLI でOpenshift 4 へ podman CLI を使用**してみます。

# Openshift 4のセットアップ
以前 [OpenShift 4 をMacにインストールしてみた](https://qiita.com/yurak/items/9fa14fe9335cd093b900) で作成したローカル環境での確認を行います。

## 開発アカウントでのプロジェクト作成およびログイントークン確認
admin ユーザーではなく開発ユーザーでの作業をイメージしています。
トークンは開発ユーザーが podman で ログインする際に使用します。

```
$ oc login -u developer -p developer --server=https://api.crc.testing:6443
Login successful.

$ oc new-project myproject
Now using project "myproject" on server "https://api.crc.testing:6443".

$ oc whoami -t
B85Ga87QaX9S98cvyC45GPyrFfZ0Y9Do40g6E3YoFZY
```

## 開発アカウントへの アクセス権限付与
image registry への Viewer権限、Editor権限を付与します。
（おそらく実施不要ですが未検証です。）

```
$ oc policy add-role-to-user registry-viewer developer
clusterrole.rbac.authorization.k8s.io/registry-viewer added: "developer"

$ oc policy add-role-to-user registry-editor developer
clusterrole.rbac.authorization.k8s.io/registry-editor added: "developer"
```

## image registry のIP, ドメイン確認
```
$ crc ip
192.168.64.19

$ oc login -u kubeadmin -p ********** https://api.crc.testing:6443
Login successful.

$ oc get route default-route -n openshift-image-registry --template='{{ .spec.host }}'
default-route-openshift-image-registry.apps-crc.testing
```

### kubeadminのパスワードを忘れたら
以下ファイルに記載があります。

```
/Users/yurak/.crc/cache/crc_hyperkit_4.1.11/kubeadmin-password
```
# MacでのPodmanセットアップ
Vagrantファイルを作成、VMを立ち上げopenshift 4 への接続を行います。

## Podman on Vagrant のインストール
podmanをインストールするVagrantfileを作成し、立ち上げます。
image registry の IP, ドメインは、確認したものに書き換えます。
`podman push` するカスタムイメージは[サンプル](https://github.com/yurake/k8s-3tier-webapp.git)を使用します。

```shell
Vagrant.configure("2") do |config|
  config.vm.box = "bento/fedora-30"
  config.vm.network "forwarded_port", guest: 80, host: 8080
  config.vm.network "private_network", ip: "192.168.33.30"
  config.vm.hostname = "fedora-30-podman-mac-client"
  config.vm.define "fedora-30-podman-mac-client"

  config.vm.provider "virtualbox" do |vb|
    vb.name = "fedora-30-podman-mac-client"
    vb.cpus = 2
    vb.memory = 4096
  end

  config.vm.provision :hosts do |provisioner|
    provisioner.autoconfigure = true
    provisioner.add_host '<image registry の IP>', ['<image registry の ドメイン>']
  end

  config.vm.provision "shell", inline: <<-SHELL
    ## install podman ##
    sudo yum -y install podman git
    ## install custom image settings ##
    git clone -b podman https://github.com/yurake/k8s-3tier-webapp.git
  SHELL
end
```

`vagrant up` で起動し、 `vagrant ssh` でVM内に入ります。

## podman で ログイン、ビルド、プッシュ
開発ユーザーでpodman ログイン後、サンプルイメージのビルド・プッシュを行います。

```
$ podman login -u developer -p B85Ga87QaX9S98cvyC45GPyrFfZ0Y9Do40g6E3YoFZY --tls-verify=false default-route-openshift-image-registry.apps-crc.testing
Login Succeeded!

$ cd ~/k8s-3tier-webapp/wlp
$ podman build . -t default-route-openshift-image-registry.apps-crc.testing/myproject/wlp:v0.0.1
STEP 1: FROM websphere-liberty:webProfile8
Getting image source signatures
Copying blob 3dd3cc407953 done
Copying blob 3c654ad3ed7d done
Copying blob 16c48d79e9cc done
Copying blob a4bd43ad48ce done
Copying blob 6276f4f9c29d done
Copying blob 16cc4964e36d done
Copying blob 523f6025a67e done
Copying blob b4083dba6d30 done
Copying blob 6a062d27e617 done
Copying blob 438ae348d82c done
Copying blob 559e1d6d2f2a done
Copying blob 39c5d4491a64 done
Copying blob be97054a6a58 done
Copying blob 570b9a7c7176 done
Copying config 6d19012784 done
Writing manifest to image destination
Storing signatures
STEP 2: COPY --chown=1001:0  spring.war /config/dropins/
30ac89c97ace25ed57f18ff258030fda4595dafe2702582477063599621f3c0a
STEP 3: COPY --chown=1001:0  server.xml /config/
6d66aadffec3ab9c98f0ddcf14f384f0ea00add3008f4aa96460b984d1e02a37
STEP 4: COPY lib/mysql/mysql-connector-java-8.0.12.jar /config/resources/mysql/
d12d5101b27a0ce826f12637f768aafa2907cfe9b99f95e74f8d9b14942e290a
STEP 5: ENV LICENSE accept
STEP 6: COMMIT default-route-openshift-image-registry.apps-crc.testing/myproject/wlp:v0.0.1
bee35201406465716cf71cb9cbcb0967890dfab522bc6d7ebba4992b40fb2f31

$ podman push --tls-verify=false default-route-openshift-image-registry.apps-crc.testing/myproject/wlp:v0.0.1
Getting image source signatures
Copying blob 90109bbe5b76 done
Copying blob cb81b9d8a6c9 done
Copying blob ed38768d73f7 done
Copying blob 97ef137a0aff done
Copying blob 9acfe225486b done
Copying blob ea69392465ad done
Copying blob 2816758ee55d done
Copying blob ff464e96fb43 done
Copying blob 8327b4c0220c done
Copying blob aee03ad7cbc1 done
Copying blob d4781d1cc2af done
Copying blob 4649bff58279 done
Copying blob 5f7c93c7d775 done
Copying blob a6788a884d3b done
Copying blob 27e74801394a done
Copying blob c16afb9e79ea done
Copying blob 4ef755f59ff7 done
Copying config bee3520140 done
Writing manifest to image destination
Copying config bee3520140 done
Writing manifest to image destination
Storing signatures
```
## pushされていることの確認
ImageStreamsを確認すると作成されています。
ユーザー:developer
パスワード：（ユーザーと同じ）
でログイン可能です。

https://console-openshift-console.apps-crc.testing/k8s/ns/myproject/imagestreams
<img width="1662" alt="スクリーンショット 2019-09-26 0.35.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232123/b70e3f5f-aa9b-e29b-bb1a-ec07517de35b.png">



# おまけ：イメージを動かしてみる
## サンプロプロジェクトをOpenshiftへ反映
Vagrant VM内ではなく、Mac上で行います。

```
$ git clone -b podman https://github.com/yurake/k8s-3tier-webapp.git
$ cd k8s-3tier-webapp/wlp
$ oc login -u developer -p developer --server=https://api.crc.testing:6443
$ find . -name "*.yaml"|xargs -I {} oc apply -f {}
ingress.extensions/wlp created
service/wlp created
deployment.apps/wlp created
```

## サービスの公開

```
$ oc expose svc wlp
route.route.openshift.io/wlp exposed

$  oc get route
NAME   HOST/PORT                        PATH   SERVICES   PORT   TERMINATION   WILDCARD
wlp    wlp-myproject.apps-crc.testing          wlp        9080                 None
```

## トップページへアクセス
サンプルページが表示されます。

http://wlp-myproject.apps-crc.testing/
<img width="610" alt="スクリーンショット 2019-09-26 0.43.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232123/027cd8d7-b858-586e-f604-ba03929c3116.png">

## Tips
外部からみたレジストリは`default-route-openshift-image-registry.apps-crc.testing`ですが、
内部からみる場合は、`image-registry.openshift-image-registry.svc:5000`になります。
詳細は[公式ドキュメント](https://docs.openshift.com/container-platform/4.1/registry/accessing-the-registry.html)を参照ください。
[wlp-deployment.yaml](https://github.com/yurake/k8s-3tier-webapp/blob/podman/wlp/wlp-deployment.yaml)で指定しているレジストリは内部からみる場合を指しています。

## 参考
https://podman.io/getting-started/installation
https://access.redhat.com/documentation/ja-jp/openshift_container_platform/4.1/html/registry/securing-exposing-registry