Help us understand the problem. What is going on with this article?

Kubernetes(GKE)でHTTPS通信する方法

本記事について

Google Cloud Platform のKubernetes(GKE)でHTTPS通信する方法についてまとめました。

はじめに

Kubernetesが外部と通信できるようにするには

  • Serviceによる方法
  • Ingressによる方法

の2通りのやり方があります。

Serviceによる方法では、外部IPはGCPのロードバランサーに直接接続され、外部からのデータはロードバランサーの機能により、KubernetesのServiceに分配されます。ロードバランサーは単純にデータを分配するだけで、外部からのデータはそのままServiceに流されるため、HTTPSの処理はデータを受け取ったKubernetesの内部のPodで処理する必要があります。

Ingressによる方法では、外部IPはIngressというKubernetesのルーティングを行う所に接続され、Ingressは設定に応じて、KubernetesのServiceにデータを分配します。Ingressは内部的にはnginxで作成されており、外部からのHTTPSをHTTPに変換してServiceに流すといった、通信内容に応じたルーティングが可能になります。

本記事では、Ingressを使ったHTTPS通信を行い、IngressでHTTPSをHTTPに変換し、KubernetesにはHTTPを送るように設定します。

手順

外部IP

Ingressの外部IPは「global」である必要があり、「regional」では動作しません。そこで「global」なstatic IPを用意します。

シークレットの作成

証明書と鍵のセットをシークレットとしてKubernetesに登録し、そのシークレットを参照する形でIngressを作成します。
まずは、シークレットの作成を行います。

kubectl create secret tls <シークレット名> \
    --key <鍵ファイル> \
    --cert <証明書ファイル>

Ingressの作成

ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
    name: ingress
    annotations:
        kubernetes.io/ingress.allow-http: "false"
        kubernetes.io/ingress.global-static-ip-name: "<外部IP名>"
    labels:
        app: ingress
spec:
    tls:
    - secretName: <シークレット名>
    backend:
        serviceName: <接続先Service名>
        servicePort: <接続先ポート番号>

(HTTPSのみを許可し、HTTP通信は不可としています)

「ingress.yaml」でIngressを作成

kubectl create -f ingress.yaml

ヘルスチェックの確認

以上でIngressが作成され、外部からHTTPSで通信できるようになります。
Ingressが作成されると、Kubernetesはロードバランサーを作成し、ヘルスチェックの設定も行います。

  • [GCP]-[ネットワークサービス]-[負荷分散]-[<ロードバランサー名>]-[ヘルスチェック]

でヘルスチェックの詳細が見れます。

このヘルスチェックをパスしないと、Ingressへデータが流されず、動作しませんので注意が必要です。
デフォルトのヘルスチェックはHTTPで「/」アクセスをチェックしていますので、接続先ServiceでHTTPで「/」にアクセスできるようにしておく必要があります。

関連記事

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away