このチュートリアルは、Minikube でローカル Kubernetes クラスターを立ち上げる、Ansible で自己署名証明書を生成・管理する、Helm で Harbor コンテナイメージレジストリをデプロイする、安全なデモ Web サービスを動かすまでを一通り説明するクイックスタートガイドです。Kubernetes、Helm、Ansible の基礎知識を持つエンジニア向けに、これらのツールを組み合わせた安全な開発環境の構築方法を示します。
前提条件
始める前に、次の要件を満たすことを確認してください。
- Minikube:ローカル Kubernetes クラスターの実行に使用(Minikube をインストール)。
- Docker:コンテナイメージのビルドとプッシュに使用(Docker をインストール)。
- kubectl:Kubernetes コマンドラインツール(kubectl をインストール)。
- Helm:Harbor のデプロイに使用(Helm をインストール)。
- Ansible:証明書管理を自動化(Ansible をインストール)。
- Kubernetes、Helm、Ansible の基礎知識。
- 任意:Ansible の
k8sモジュールで 사용할 Python の Kubernetes クライアント(pip install kubernetes)。
第 1 部:Minikube で Kubernetes をセットアップ
Minikube は、ローカルで単一ノードの Kubernetes クラスターを実行できる軽量ツールです。開発やテストに最適です。
Minikube を起動する:
BASHminikube start単一ノードの Kubernetes クラスターが起動します。
Ingress アドオンを有効にする: Minikube の Ingress アドオンは、外部からの HTTP/HTTPS トラフィックを処理する NGINX Ingress コントローラーを提供します。
BASHminikube addons enable ingressIngress コントローラーが動作していることを確認します。
BASHkubectl get pods -n ingress-nginxDNS を設定する: Minikube の IP アドレスを取得します。
BASHminikube ip/etc/hostsファイルを編集し(管理者権限が必要です)、次の行を追加します。<minikube ip>は実際の IP アドレスに置き換えてください。<minikube ip> harbor.example.com demo.example.comこれにより、
harbor.example.comとdemo.example.comで各サービスにアクセスできます。
第 2 部:Ansible で自己署名証明書を生成
Ansible を使って自己署名証明書の生成を自動化します。生成した証明書は Kubernetes Secret として保存し、Harbor と Web サービスが利用します。自己署名証明書は開発環境に適していますが、本番環境では信頼された CA 証明書を使用してください。
Ansible コレクションをインストールする:
community.cryptoとkubernetes.coreコレクションをインストールします。BASHansible-galaxy collection install community.crypto ansible-galaxy collection install kubernetes.core証明書用ディレクトリを作成する:
BASHmkdir certsAnsible プレイブックを作成する:
generate_certs.yamlという名前のファイルを作成し、次の内容にします。
プレイブックを実行する:
BASHansible-playbook generate_certs.yamlharbor.example.comとdemo.example.com用の自己署名証明書が生成され、harbor-tlsとdemo-tlsという名前の Kubernetes Secret が作成されます。
第 3 部:Harbor をデプロイ
Harbor はオープンソースのコンテナイメージレジストリで、ロールベースのアクセス制御、イメージの脆弱性スキャン、イメージ署名機能を提供します。Helm を使って Harbor をデプロイし、TLS を構成して安全な通信を確保します。
Harbor の Helm リポジトリを追加する:
BASHhelm repo add harbor https://helm.goharbor.io helm repo updateHelm 設定ファイルを作成する:
values.yamlという名前のファイルを作成し、次の内容にします。
この設定では Ingress を有効化し、harbor-tls Secret で TLS を提供するとともに、Harbor の管理者パスワードを設定します。
Harbor をインストールする:
BASHhelm install harbor harbor/harbor -f values.yamlデプロイを確認する: Harbor のコンポーネントが動作しているか確認します。
BASHkubectl get podshttps://harbor.example.comにアクセスし、必要に応じて自己署名証明書の警告を承諾してから、ユーザー名admin、パスワードmysecretpasswordでログインします。
第 4 部:デモ Web サービスをデプロイ
シンプルな Node.js Web アプリケーションを作成し、Docker イメージをビルドして Harbor にプッシュします。そのうえで Kubernetes にデプロイし、Ingress 経由で HTTPS アクセスに対応します。
Web アプリケーションを作成する:
demo-appディレクトリを作成し、次のファイルを追加します。app.js:
package.json:
Dockerfile:
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
Docker イメージをビルドしてプッシュする:
Harbor にログイン:
BASHdocker login harbor.example.com -u admin -p mysecretpasswordイメージをビルド:
BASHdocker build -t harbor.example.com/library/demo-app:latest .イメージをプッシュ:
BASHdocker push harbor.example.com/library/demo-app:latest
Kubernetes リソースを作成する:
deployment.yamlを作成:
service.yamlを作成:
apiVersion: v1
kind: Service
metadata:
name: demo-service
spec:
selector:
app: demo-app
ports:
- protocol: TCP
port: 80
targetPort: 3000
ingress.yamlを作成:
Kubernetes リソースを適用する:
BASHkubectl apply -f deployment.yaml kubectl apply -f service.yaml kubectl apply -f ingress.yamlWeb サービスにアクセスする: ブラウザを開いて
https://demo.example.comにアクセスします。自己署名証明書を使用しているため、安全に関する警告が表示される場合があります。「Hello from demo app!」というメッセージが表示されるはずです。