この手順は 標準の Ngix コンテナをセキュアにする の続きです。
ROSA では、コンテナアプリケーションの開発に必要な Docker Registry が既にセットアップされて使えるようになっています。
主に、この ROSA Cluster の内部のプロジェクトから使用される事を目的とした、シンプルな Docker Image Registry なので、内部 OpenShift Registry
のように呼ばれています。
1. 内部 OpenShift Registry の公開 #
コンテナをビルドした端末から、直接、内部 OpenShift Registry にアクセスできるようにするために、Route を使って 内部 OpenShift Registry をクラスター外のネットワークに公開します。
oc patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=merge
2. 内部 OpenShift Registry へのログイン #
内部 OpenShift Registry の ドメイン名を取得します。
export IMAGE_SERVER=`oc get route default-route -n openshift-image-registry --template='{{ .spec.host }}'`
変数に値がセットされているか確認します。
echo $IMAGE_SERVER
内部 OpenShift Registry に、Bearerトークン を使ってログインします。
podman login -u `oc whoami` -p `oc whoami --show-token` ${IMAGE_SERVER}
3. 内部 OpenShift Registry への Image の Push #
新しい project を作成します。
export PROJECT_NAME=secure-nginx
oc new-project $PROJECT_NAME
現在、作業端末上にある image を確認します。
$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/new-nginx latest d623ca329bc4 19 minutes ago 303 MB
$
作成したローカルイメージにタグを付けます。
内部 OpenShift Registry は、プロジェクト名を持った名前空間で区切られます。 tag 名に $PROJECT_NAME を入れる事で、特に追加の設定をしなくても、イメージが $PROJECT_NAME 内からアクセスできるようになります。
podman tag localhost/new-nginx:latest $IMAGE_SERVER/$PROJECT_NAME/mynginx:latest
イメージを push します
podman push $IMAGE_SERVER/$PROJECT_NAME/mynginx:latest
これで内部 OpenShift Registryにビルドした image が push されました。
4. Push した Image の OpenShift 上へのデプロイ #
内部 Image Registry に Push したイメージを使用してアプリケーションを Deploy します。
- 現在いるプロジェクトを確認します。タグ付けに使った $PROJECT_NAME である事を確認します。
oc project
- コンテナをデプロイします。
oc new-app
コマンドで Depoloyment と Service を作成します。
oc new-app --name new-nginx --image mynginx:latest
oc new-app
コマンドが、image 名を引数に指定するだけで、Service まで作成できるのは、OpenShift が、コンテナ image 内でEXPOSE されているポートを自動的に認識しているためです。コンテナ image 内で EXPOSE が行われてない場合は、Service は自動では作成されません。
new-nginx
という名前で Deployment と Service が作成されている事を確認します。
oc get deployment,service
今度は Pod が起動している事を確認します。
oc get pods
サービスを公開します。これをする事で Route
オブジェクトが作成されます。
oc expose svc new-nginx
route を確認します。
oc get route
route の HOST 名を変数 HOST
に取り出します。
HOST=$(oc get route/new-nginx -o jsonpath={.spec.host})
curl でアクセスできる事を確認します。
curl $HOST