Google Cloud Kubernetesにingress-gceを5分でデプロイする方法

ingress-gceは、Google Cloud Kubernetes Engine (GKE) クラスタに外部トラフィックを管理するためのIngressコントローラーです。このガイドでは、数分でingress-gceをデプロイし、アプリケーションにロードバランシング機能を追加する方法を説明します。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

  • Google CloudプロジェクトのOwner権限を持っていること
  • gcloudコマンドラインツールがインストールされ、設定されていること
  • kubectlコマンドラインツールがインストールされていること
  • GKEクラスタが作成されていること

gcloudの設定を確認します。

gcloud config list

出力されたプロジェクトとアカウント情報が正しいことを確認し、現在のアカウントがプロジェクトのOwner権限を持っていることを確認してください。

デプロイ手順

1. リポジトリのクローン

ingress-gceのリポジトリをクローンします。

git clone https://gitcode.com/gh_mirrors/in/ingress-gce
cd ingress-gce

2. デプロイスクリプトの実行

GKEデプロイディレクトリに移動し、デプロイスクリプトを実行します。

cd docs/deploy/gke
./deploy.sh -n MY_CLUSTER -z MY_ZONE

注意: MY_CLUSTERをあなたのクラスタ名に、MY_ZONEをクラスタが存在するゾーンに置き換えてください。

3. デプロイ状態の確認

デプロイが完了したら、関連リソースが正常に動作しているか確認します。

kubectl get pods -n kube-system | grep ingress-controller
kubectl get svc -n kube-system ingress-default-backend

デプロイファイルの解説

デプロイプロセスでは、以下の主要な設定ファイルが使用されます。

デフォルトバックエンドサービスの設定

以下のYAMLファイルは、Ingressルールに一致しないリクエストを処理するデフォルトのバックエンドサービスを定義します。

# このデプロイメントは、Ingressルールに一致しないリクエストを処理するためのデフォルトのバックエンドサービスを定義します。
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ingress-default-backend
  namespace: kube-system
  labels:
    app: ingress-controller
    component: default-backend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ingress-controller
      component: default-backend
  template:
    metadata:
      labels:
        app: ingress-controller
        component: default-backend
    spec:
      containers:
      - name: default-backend-container
        image: registry.k8s.io/defaultbackend-amd64:1.5
        ports:
        - containerPort: 8080

RBAC権限の設定

以下のYAMLファイルは、ingress-gceがKubernetes APIを操作するために必要な権限を定義します。

# ingress-gceコントローラーがKubernetes APIを操作するために必要な権限を定義します。
# 1. ServiceAccount: コントローラーが実行されるためのアカウント
apiVersion: v1
kind: ServiceAccount
metadata:
  name: ingress-controller-sa
  namespace: kube-system
---
# 2. ClusterRole: 必要なAPIリソースへのアクセス権限
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: ingress-controller-role
rules:
- apiGroups: [""]
  resources: ["services", "endpoints", "secrets"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["extensions", "networking.k8s.io"]
  resources: ["ingresses"]
  verbs: ["get", "list", "watch", "update"]

よくある問題の解決方法

スクリプトが「Waiting for old GLBC service and pod to be removed...」で停止する

これは、HTTPLoadBalancingを無効にした際にデフォルトのバックエンドリソースが削除されなかったことが原因であることが多いです。手動で削除してください。

kubectl delete svc -n kube-system ingress-default-backend
kubectl delete deploy -n kube-system ingress-default-backend

権限エラー

スクリプトを実行するアカウントがプロジェクトのOwner権限を持っていることを確認してください。以下のコマンドで確認できます。

gcloud projects get-iam-policy PROJECT_ID --flatten="bindings[].members" --format='table(bindings.role)' --filter="bindings.members:$(gcloud config get-value account)"

さらに学ぶ

  • 公式ドキュメント: docs/deploy/gke/README.md
  • 設定例: docs/deploy/gke/non-gcp/
  • トラブルシューティング: docs/troubleshooting/troubleshooting.md

タグ: ingress-gce Google Kubernetes Engine GKE Kubernetes Ingress Controller

7月17日 22:21 投稿