はじめに
この実験では、Kubernetes クラスタ内で実行されているサービスに外部トラフィックをルーティングするために Ingress をどのように使用するかを学びます。
Kubernetes Ingress は、Kubernetes クラスタ内のサービスへの外部アクセスを管理するための強力なツールです。Ingress は 7 層ロードバランサとして機能し、入力 URL パスまたはホスト名に基づいてトラフィックを異なるサービスにルーティングすることができます。
この実験では、サンプルアプリケーションを作成し、Ingress を使用して外部に公開します。Kubernetes Ingress に人気があり広く使用されているソリューションであるnginx-ingressを Ingress コントローラとして使用します。
Minikube クラスタを起動する
リソースを作成する前に、動作中の Kubernetes クラスタが必要です。Minikube は、ローカルマシン上で動作する軽量の Kubernetes 環境です。
作業ディレクトリに移動する:
ターミナルを開き、デフォルトのプロジェクトフォルダに移動します。
cd /home/labex/projectMinikube を起動する:
Minikube を起動して Kubernetes クラスタを初期化します。
minikube start- このコマンドは、ローカルマシン上に単一ノードの Kubernetes クラスタをセットアップします。
- Minikube の起動には、システムの性能に応じて数分かかる場合があります。
Minikube が動作していることを確認する:
Minikube クラスタの状態を確認します。
minikube statuskubeletやapiserverなどのコンポーネントがRunningと表示されていることを確認します。- クラスタが動作していない場合は、
minikube startを再度実行します。
Minikube の起動に問題がある場合は、必要に応じてminikube deleteを使用して環境をリセットします。
Nginx イングレスコントローラをインストールする
まず、クラスタ内にnginx-ingressコントローラをインストールする必要があります。これは、Ingress コントローラを実行するための Deployment と Service を作成することで行うことができます。
Ingress コントローラ用の名前空間を作成します。
kubectl create namespace ingress-nginx
kubectlを使用してingress-nginxチャートをインストールします。
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.7.0/deploy/static/provider/cloud/deploy.yaml
ingress-nginxコントローラのポッドが実行されていることを確認します。
kubectl get pods -n ingress-nginx
NAME READY STATUS RESTARTS AGE
ingress-nginx-admission-create-zjfqx 0/1 ContainerCreating 0 2s
ingress-nginx-admission-patch-8rvzw 0/1 ContainerCreating 0 2s
ingress-nginx-controller-6bdb654777-qz8fb 0/1 ContainerCreating 0 2s
サンプルアプリケーションを作成する
次に、Ingress を使用して公開するサンプルアプリケーションを作成します。
サンプルアプリケーション用の Deployment を作成します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: sample-app
spec:
replicas: 3
selector:
matchLabels:
app: sample-app
template:
metadata:
labels:
app: sample-app
spec:
containers:
- name: sample-app
image: nginx
ports:
- containerPort: 80
この YAML ファイルはsample-app.yamlと呼ばれます。次のコマンドでクラスタに Deployment を適用します。
kubectl apply -f sample-app.yaml
サンプルアプリケーション用の Service を作成します。
apiVersion: v1
kind: Service
metadata:
name: sample-app
spec:
selector:
app: sample-app
ports:
- name: http
port: 80
targetPort: 80
この YAML ファイルはservice-sample-app.yamlと呼ばれます。次のコマンドでクラスタに Deployment を適用します。
kubectl apply -f service-sample-app.yaml
イングレス リソースを作成する
これで Ingress コントローラがセットアップされ、バックエンドサービスが実行されているので、Ingress リソースのルールを作成することができます。
この例では、test.localドメインのトラフィックをバックエンドサービスにルーティングするための単純なルールを作成します。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: test-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: test.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: sample-app
port:
name: http
この YAML ファイルはingress.yamlと呼ばれます。クラスタに Ingress リソースを適用します。
kubectl apply -f ingress.yaml
イングレス リソースをテストする
最後に、すべてが正常に動作していることを確認するために、Ingress リソースをテストすることができます。
まず、ノードの IP アドレスを確認します。
kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
minikube Ready control-plane 93s v1.26.1 192.168.49.2 <none> Ubuntu 20.04.5 LTS 5.15.0-56-generic docker://20.10.23
このコマンドでは、Kubernetes ノードのアドレスが取得され、INTERNAL-IPとしてラベル付けされた IP アドレスが表示されます。
次に、/etc/hostsファイルにエントリを追加して、test.localドメインをノードの IP アドレスにマップします。
echo "<IP_ADDRESS> test.local" | sudo tee -a /etc/hosts
<IP_ADDRESS>をノードアドレスの内部 IP アドレスに置き換えます。たとえば:
echo "192.168.49.2 test.local" | sudo tee -a /etc/hosts
次に、ingress-nginxのサービスノードポートを取得します。
kubectl get services -n ingress-nginx
このコマンドでは、ingress-nginx名前空間内のサービスの一覧が表示されます。nginx-ingress-controllerサービスを探して、そのNodePortをメモします。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.104.99.158 <pending> 80:32518/TCP,443:31620/TCP 2m45s
ingress-nginx-controller-admission ClusterIP 10.100.46.109 <none> 443/TCP 2m45s
最後に、curlを使用して Ingress エンドポイントに HTTP 要求を行います。
curl test.local:NodePort
たとえば:
curl test.local:32518
<NodePort>をnginx-ingress-controllerサービスのNodePortに置き換えます。
すべてが正しく設定されていれば、Nginx のウェルカムページが表示されるはずです。
また、Web ブラウザを使用してtest.local:<NodePort>/nginxにアクセスすることで、Ingress をテストすることもできます。
おめでとうございます。Kubernetes に Ingress リソースを正常にセットアップし、それが正しく動作していることを確認しました。
まとめ
この実験では、Kubernetes における Nginx イングレスコントローラのセットアップと構成の手順を学びました。また、サンプルアプリケーションを作成し、イングレスを使って外部トラフィックを Nginx サービスにルーティングしました。これは Kubernetes ネットワーキングでできることの始まりにすぎず、さらに探求することをお勧めします。


