LoginSignup
57
38

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-06-25

本記事について

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で「/」にアクセスできるようにしておく必要があります。

関連記事

57
38
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
57
38