ヒトリ歩き

愚痴とかいろいろ書きます

minikubeにプライベートレジストリからコンテナをデプロイする

f:id:kotapontan:20210516194129p:plain

目的

自作アプリを登録しているプライベートレジストリからminikubeにデプロイして動作させたい。
図にすると下記のようなイメージ。

f:id:kotapontan:20210516192953p:plain
minikube_privateregistry

目標

  • minikubeへのデプロイ
  • minikubeへのサービス登録
  • minikube上で動作するアプリへのアクセス確認

やってみた

minikubeへのデプロイ

プライベートレジストリの作成方法は前回の記事を参照。

kotapontan.hatenablog.com

Podを管理するDeploymentを作成。
192.168.0.17はプライベートレジストリが動作しているホストマシンのIPアドレス

$ kubectl create deployment tomsan --image=192.168.0.17:5000/sample/tomsan:1.0

作成したDeploymentとPodを確認。

$ kube get deployments
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
tomsan   1/1     1            1           66s
$ kube get pods
NAME                      READY   STATUS    RESTARTS   AGE
tomsan-788bfc748c-dwskl   1/1     Running   0          97s

minikube上にデプロイできた。

サービス登録

デプロイしたアプリに外部からアクセスできるようにサービスを作成。

$ kubectl expose deployment tomsan --type=LoadBalancer --port=8080
service/tomsan exposed

作成したサービスを確認。

 $ kubectl get services
 NAME         TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP      10.96.0.1       <none>        443/TCP          40m
tomsan       LoadBalancer   10.106.240.54   <pending>     8080:30549/TCP   68s

接続可能なサービスを作成

 $ minikube service tomsan
|-----------|--------|-------------|---------------------------|
| NAMESPACE |  NAME  | TARGET PORT |            URL            |
|-----------|--------|-------------|---------------------------|
| default   | tomsan |        8080 | http://192.168.49.2:30549 |
|-----------|--------|-------------|---------------------------|
🏃  Starting tunnel for service tomsan.
|-----------|--------|-------------|------------------------|
| NAMESPACE |  NAME  | TARGET PORT |          URL           |
|-----------|--------|-------------|------------------------|
| default   | tomsan |             | http://127.0.0.1:58873 |
|-----------|--------|-------------|------------------------|
🎉  Opening service default/tomsan in default browser...

ホストマシンからcurlコマンドでデプロイしたアプリにアクセスできることを確認できた。

$ curl http://localhost:58873/Sample/hello
Hello World update223%     

注意点

insecure-registryオプションが必要

プライベートリポジトリからのコンテナイメージをpullする際に、httpsで通信をしないようにするために、minikubeの起動時にinsecure-registryオプションの設定が必要。
insecure-registryオプションの値はプライベートレジストリIPアドレス:ポート番号 を指定。

minikube start --insecure-registry=192.168.0.17:5000

クラスタの再作成をしないとオプションが反映されない

insecure-registryオプションを指定して起動してもオプションが反映されない可能性がある。
その場合は、minikube deleteクラスタを削除して起動する必要がある。 insecure-registryが設定されているかどうかは、minikube sshクラスタに接続し、docker infoで確認できる。

感想

実際に手を動かしてみたが、かなり手間取ってしまった。
特にminikubeにプライベートリポジトリからコンテナイメージをpullしてデプロイする部分はHTTPSの設定やハンドブックに書いてあることを試してみたが、うまくいかず。
minikube delete で環境を再作成しないとオプションが反映されなかったのは、落とし穴だった。
実際に、手を動かしてみないと分からないことが多いので、今後もPod間の接続などを試してみようと思う。