HTTPS Ingress を設定する

シンプルな TLS を使用して HTTPS で Ingress ゲートウェイを保護し、特定のウェブページへの HTTPS 接続を有効にすることができます。また、HTTP 接続を HTTPS にリダイレクトすることもできます。

HTTPS は、安全でないネットワーク上にセキュアなチャネルを作成します。クライアントとサーバー間でトラフィックを暗号化し、中間者攻撃から保護します。HTTPS 接続を受け入れるようにウェブサーバーを準備するには、管理者がサーバーの公開鍵証明書を作成する必要があります。この証明書は、ウェブブラウザが警告なく承認するように、信頼できる認証局によって署名されている必要があります。

組み込みの Kubernetes エディタを使用して、kf 名前空間の external-gateway というゲートウェイを編集します。

kubectl edit gateway -n kf external-gateway
  1. サービスの証明書と鍵がすでに存在しているので、Ingress ゲートウェイに Kubernetes Secret を作成します。Secret 名が istio または prometheus で始まっていないことを確認します。この例では、myapp-https-credential という Secret 名を使用しています。
  2. servers: で次の操作を行います。
    1. ポート 443 のセクションを追加します。
    2. tls: で、作成した Secret の名前を credentialName に設定します。
    3. hosts: で、HTTPS で保護するサービスのホスト名を追加します。ワイルドカード(*.example.com など)を使用してドメイン全体に設定することも、1 つのホスト名(myapp.example.com など)に限定することもできます。
  3. servers: には、ポート 80 HTTP のセクションがすでに存在します。すべてのトラフィックを HTTP として受信する場合は、ゲートウェイの定義でこのセクションを残します。
  4. HTTP を HTTPS にリダイレクトするには、HTTP サーバー セクションの tls の下に httpsRedirect: true を追加します。詳しくは、Istio ゲートウェイのドキュメントをご覧ください。このオプションを hosts* に設定されているセクションに追加すると、すべてのトラフィックが HTTPS にリダイレクトされます。1 つのアプリまたはドメインの HTTP のみを HTTPS にリダイレクトする場合は、別の HTTP セクションを追加してリダイレクトを指定します。

次に、ゲートウェイ spec の例を示します。ここでは、myapp.example.com に HTTPS を設定し、そのホストの HTTP を HTTPS にリダイレクトしています。

spec:
  selector:
    istio: ingressgateway
  servers:
  - hosts:
    - myapp.example.com
    port:
      name: https
      number: 443
      protocol: HTTPS
    tls:
      credentialName: myapp-https-credential
      mode: SIMPLE
  - hosts:
    - myapp.example.com
    port:
      name: http-my-app
      number: 80
      protocol: HTTP
    tls:
      httpsRedirect: true
  - hosts:
    - '*'
    port:
      name: http
      number: 80
      protocol: HTTP