ingress-gceとingress-nginxをGKEにデプロイする手順

2023年1月16日

はじめに

GKE(Google Kubernetes Engine)でIngressを使う場合、ingress-gce(GLBC、GKE ingress)またはingress-nginxが主に用いられる。

Googleのチュートリアルを参考に、実際に2種類のIngressをデプロイした。

実施環境

~$ kubectl version --short                                                                                    Client Version: v1.26.0                                                                                                      Kustomize Version: v4.5.7                                                                                                    Server Version: v1.24.7-gke.900   

手順

準備(共通の手順)

Google Cloudの設定

  1. 課金を有効にする
    参考:https://cloud.google.com/billing/docs/how-to/modify-project
  2. API の概要ページに移動し、Artifact Registry APIを有効にする

Cluster作成~Service・Deploymentのデプロイ

  1. 下記のコマンドを実行し、gcloudコマンドのインストール
    $ sudo apt-get install apt-transport-https ca-certificates gnupg
    $ echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
    $ curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -
    $ sudo apt-get update && sudo apt-get install google-cloud-cli
  2. gcloudコマンドがインストールされたか確認
    $ gcloud --version
    Google Cloud SDK 413.0.0
    alpha 2023.01.06
    (略)
  3. 下記のコマンドを実行し、Googloアカウントに紐づけ
    $ gcloud init
    • You must log in to continue. Would you like to log in (Y/n)? と聞かれるので、Yを入力すると、ブラウザが開いてGoogleアカウントを選択できる
    • その後、projectとリージョン・ゾーンを設定して初期化かkん量
  4. 下記コマンドで、GKEクラスターを作成
    gcloud container clusters create ingress-test
    • ingress-testの部分は、クラスター名のため他の名前でもOK
    • クラスター作成完了後、kubectlのcurent-contextに作成したクラスターが自動で設定される
  5. web-deployment.yamlを作成
    apiVersion: v1
    kind: Service
    metadata:
      name: web
      namespace: default
    spec:
      ports:
      - port: 8080
        protocol: TCP
        targetPort: 8080
      selector:
        run: web
      type: NodePort
  6. web-service.yamlを作成
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: web
      namespace: default
    spec:
      selector:
        matchLabels:
          run: web
      template:
        metadata:
          labels:
            run: web
        spec:
          containers:
          - image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
            imagePullPolicy: IfNotPresent
            name: web
            ports:
            - containerPort: 8080
              protocol: TCP
  7. 下記コマンドを実行し、DeploymentとServiceをデプロイ
    $ kubectl apply -f web-deployment.yaml
    $ kubectl apply -f web-service.yaml

ingress-gceのデプロイ

  1. basic-ingress.yamlを作成
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: basic-ingress
    spec:
      defaultBackend:
        service:
          name: web
          port:
            number: 8080
  2. 下記コマンドを実行し、Ingressをデプロイ
    $ kubectl apply -f basic-ingress.yaml

ingress-nginxのデプロイ

  1. Helmをインストールしていない場合、下記コマンドでインストール
  2. 下記のコマンドで、Helmリポジトリを更新
    $ helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
    $ helm repo update
  3. NGINX controllerをデプロイ
    $ helm install nginx-ingress ingress-nginx/ingress-nginx
  4. nginx-ingress.yamlを作成
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: nginx-ingress
      annotations: 
        kubernetes.io/ingress.class: nginx
    spec:
      defaultBackend:
        service:
          name: web
          port:
            number: 8080
  5. 下記コマンドを実行し、Ingressをデプロイ
    $ kubectl apply -f basic-ingress.yaml

参考