Container Service Kubernetes クラスターは複数のアプリケーションアクセス方法をサポートしています。 もっとも一般的な方法には、SLB:Port アクセス、NodeIP:NodePort アクセスおよびドメイン名アクセスが含まれます。 デフォルトでは、Kubernetes クラスターは HTTPS アクセスをサポートしていません。 HTTPS を介したアプリケーションへアクセスするために、Container Service および Alibaba Cloud SLB (Server Load Balancer) により提供されるセキュリティ保護された HTTPS アクセス方法を使用できます。 ここでは、例として、HTTPS アクセス設定を使用して Container Service Kubernetes での証明書の設定方法を解説します。

異なるアクセス方法に応じて、お使いの証明書を以下の 2 つの方法により設定することができます。
  • フロントエンド SLB での証明書設定
  • Ingress での証明書設定

前提条件

  • Kubernetes クラスターが作成されている必要があります。 詳しくは、「Kubernetes クラスターの作成」をご参照ください。
  • SSH を介して マスターノードへ接続されている必要があります。 詳しくは、「SSH を使用した Kubernetes クラスターへのアクセス」をご参照ください。
  • マスターノードへの接続後、以下のコマンドを実行することにより、公開鍵証明書および秘密鍵証明書を含むクラスターに関するサーバー証明書が作成されます。
    $  openssl genrsa -out tls.key 2048
    
    Generating RSA private key, 2048 bit long modulus
    ................................................................ +++
    ........................................................................................+++
    e is 65537 (0x10001)
    
    $  openssl req -sha256 -new -x509 -days 365 -key tls.key -out tls.crt
    
    You are about to be asked to enter information that will be incorporated
    ...
    -----
    Country Name (2 letter code) [XX]:CN
    State or Province Name (full name) []:zhejiang
    Locality Name (eg, city) [Default City]:hangzhou
    Organization Name (eg, company) [Default Company Ltd]:alibaba
    Organizational Unit Name (eg, section) []:test
    Common Name (eg, your name or your server's hostname) []:foo.bar.com           #you must configure the domain name correctly
    Email Address []:a@alibaba.com

方法 1: SLB での HTTPS 証明書の設定

この方法では、以下のようなメリットとデメリットがあります。
  • メリット: 証明書は SLB 上で設定され、アプリケーションの外部アクセスポータルとなります。 クラスター上のアプリケーションへのアクセスは、HTTP アクセス方法が使用されます。
  • デメリット: ドメイン名とドメイン名に対応する IP アドレスの間の多くの関連付けを維持する必要があります。
  • シナリオ: この方法は、アクセス方法を公開する Ingress よりも LoadBalancer サーバーを使用するアプリケーションに適用できます。

準備

Kubernetes クラスター上に Tomcat アプリケーションが作成されている必要があります。 LoadBalancer サービスを使用して、アプリケーションへ外部アクセスを提供します。 詳しくは、「サービスの作成」をご参照ください。

  1. Container Service コンソール にログインします。
  2. 左側のナビゲーションウィンドウから、[アプリケーション] > [サービス] をクリックし、事前に作成した Tomcat アプリケーションを参照するため、クラスターおよび名前空間を選択します。 以下の図のように、作成された Tomcat アプリケーションは "tomcat" という名前で、サービス名は "tomcat-svc" です。 アプリケーションのサービスタイプは LoadBalancer で、アプリケーションで公開されるサービスポートは 8080 です。
  3. 外部エンドポイントをクリックすることで、IP:Port を介して Tomcat アプリケーションへアクセスできます。
  4. SLB コンソール にログインします。
  5. デフォルトでは、[Server Load Balancer] ページが表示されます。 IP アドレス列で、"tomcat-svc" の外部エンドポイントに対応する Server Load Balancer を検索し、操作列の [リスナーの設定] をクリックします。
  6. Server Load Balancer を設定します。 まず、リスナープロトコルを選択します。 HTTPS を選択し、リスニングポートを 443 に設定し、[次へ] をクリックします。
  7. SSL 証明書 を設定します。
    1. [サーバー証明書の作成] をクリックします。
    2. 表示されたページで、証明書のソースを選択します。 この例では、[サードパーティ証明書のアップロード] を選択し、[次へ] をクリックします。
    3. [サードパーティ証明書のアップロード] ページで、証明書の名前を設定し、証明書をデプロイするリージョンを選択します。 [証明書の内容] および [秘密鍵] 列で、サーバー公開鍵証明書および 前提条件で作成した秘密鍵を入力し、[OK] をクリックします。
    4. [サーバー証明書の設定] ドロップダウンリストから、作成したサーバー証明書を選択します。
    5. [次へ] をクリックします。
  8. [バックエンドサーバー] を設定します。 デフォルトでは、サーバーが追加されます。 それぞれのバックエンドサーバーの "tomcat-svc" サービスのリスナーの [ポート] を設定する必要があります。その後、[次へ] をクリックします。
    Container Service Web インターフェイスで、このサービスの NodePort 数を検索し、それぞれのバックエンドサーバーのポート番号として設定する必要があります。
  9. [ヘルスチェック] を設定し、[次へ] をクリックします。 この例では、デフォルト設定を使用します。
  10. [送信] タブを確認します。 すべての設定が正確に行われたかを確認する場合は、[送信] をクリックします。
  11. 設定完了後、[OK] をクリックします。
  12. [Server Load Balancer] ページに戻り、インスタンスを参照します。 HTTPS:443 のリスニングルールが生成されます。
  13. HTTPS を通じて Tomcat アプリケーションへアクセスします。 ブラウザーのアドレスバーで、https://slb_ip を入力しアプリケーションへアクセスします。
    ドメイン名認証が証明書に含まれる場合、ドメイン名によるアプリケーションへのアクセスができます。 slb_ip:8080 を介してアプリケーションへアクセスすることもできます。これは tcp:8080 が削除されていないためです。

方法 2: Ingress での証明書の設定

この方法では、以下のようなメリットとデメリットがあります。
  • メリット: SLB 設定を変更する必要がありません。 お互いを干渉することなく Ingress を通じて、すべてのアプリケーションがそれぞれ独自の証明書を管理できます。
  • デメリット: それぞれのアプリケーションは、別々の証明書によりアクセスすることができますが、クラスターには1つの証明書のみでアクセス可能なアプリケーションがあります。

準備

Kubernetes クラスター上に Tomcat アプリケーションが作成されている必要があります。 アプリケーションのサービスにより ClusterIP を介してアクセスが提供されます。 この例では、Ingress を使用し、HTTPS アクセスサービスを提供します。

  1. Kubernetes クラスターのマスターノードへログインし、事前に準備した証明書によりシークレットを作成します。
    ドメイン名を正確に設定する必要があります。 正確に設定されない場合、HTTPS を介したアプリケーションへのアクセス時に例外が発生します。
    kubectl create secret tls secret-https --key tls.key --cert tls.crt      
  2. Container Service コンソール にログインします。
  3. 左側のナビゲーションウィンドウから、[アプリケーション] > [ Ingress ] をクリックします。クラスターおよび名前空間を選択し、右上角の [作成] をクリックします。
  4. 表示されたダイアログボックスで、Ingress を設定し、HTTPS を介したアクセスを可能にした後、[OK] をクリックします。
    Ingress の設定について詳しくは、「Container Service コンソールでの Ingress の作成」をご参照ください。 この例での設定は以下のようになります。
    • 名前: Ingress の名前を入力します。
    • ドメイン: 前出の手順で設定したドメイン名を入力します。 SSL 証明書に設定されたドメイン名と同一のものである必要があります。
    • サービス: Tomcat アプリケーションに対応するサービスを選択します。サービスポートは 8080 です。
    • TLS の有効化: TLS の有効化後、既存のシークレットを選択します。
    YAML ファイルを使用して Ingress を作成することもできます。 このページの例では、YAML サンプルファイルは以下のようになります。
    apiVersion: extensions/v1beta1
    
    kind: Ingress
    
    metadata:
    
       name: tomcat-https
    
    spec:
    
      tls:
    
      - hosts:
    
        - foo.bar.com
    
        secretName: secret-https
    
      rules:
    
      - host: foo.bar.com
    
        http:
    
          paths:
    
          - path: /
    
            backend:
    
              serviceName: tomcat-svc
    
              servicePort: 8080
  5. Ingress リストに戻り、作成された Ingress、エンドポイント、およびドメイン名を参照します。 この例では、ドメイン名は foo.bar.com です。 Ingress の詳細ページから Ingress を参照することもできます。
    この例では、foo.bar.com がテストドメイン名として使用され、"hosts" ファイルにレコードを作成する必要があります。
    47.110.119.203  foo.bar.com                   #where, the IP address is the Ingress endpoint.
  6. ブラウザで、https://foo.bar.com へアクセスします。
    HTTPS を使用してドメイン名にアクセスする必要があります。これは、TLS アクセス証明書が作成されているためです。 この例では foo.bar.com をローカルで解析するためにサンプルドメイン名として使用します。 お使いの指定した設定シナリオにおいて、登録されたドメイン名を使用する必要があります。