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