Service Mesh(ASM)では、証明書をドメイン名に視覚的に紐付けることができます。証明書をドメイン名に紐付けると、イングレスゲートウェイを使用して HTTPS などのプロトコルでドメイン名にアクセスできます。これにより、イングレスゲートウェイのセキュリティが向上します。このトピックでは、証明書をドメイン名に紐付ける方法について説明します。
前提条件
Enterprise Edition または Ultimate Edition の ASM インスタンスが作成されていること。アプリケーションが、ASM インスタンスに追加された Container Service for Kubernetes(ACK)クラスターにデプロイされていること。詳細については、「ASM インスタンスに追加された ACK クラスターへのアプリケーションのデプロイ」をご参照ください。
イングレスゲートウェイがデプロイされていること。詳細については、「イングレスゲートウェイの作成」をご参照ください。
アクセスするサービスの名前空間でサイドカープロキシインジェクションが有効になっていること。詳細については、「サイドカープロキシインジェクションポリシーの設定」をご参照ください。
イングレスゲートウェイの IP アドレスが取得されていること。詳細については、「手順 2:ASM イングレスゲートウェイの IP アドレスを取得する」をご参照ください。
背景情報
この例では、ドメイン名が aliyun.com である myexampleapp サービスを使用します。 aliyun.com ドメイン名に証明書を紐付けると、イングレスゲートウェイを使用して HTTPS 経由で myexampleapp サービスにアクセスできます。
手順
myexampleapp という名前のサンプルサービスを作成します。
以下の内容を含む myexample-nginx.conf ファイルを作成します。
この例では、ドメイン名が aliyun.com である myexampleapp サービスは NGINX に基づいて実装されています。NGINX サーバーの設定ファイルを作成する必要があります。次のコードブロックは、サービスのルートパスへのリクエストに対して、メッセージ
Welcome to aliyun.com!とステータスコード200が返されることを指定しています。events { } http { log_format main '$remote_addr - $remote_user [$time_local] $status ' // メインログフォーマット '"$request" $body_bytes_sent "$http_referer" ' // リクエスト、送信バイト数、リファラー '"$http_user_agent" "$http_x_forwarded_for"'; // ユーザーエージェント、転送元IP access_log /var/log/nginx/access.log main; // アクセスログの設定 error_log /var/log/nginx/error.log; // エラーログの設定 server { listen 80; // 80番ポートでリッスン location / { // ルートパスへのリクエスト return 200 'Welcome to aliyun.com!'; // 200 OK とメッセージを返す add_header Content-Type text/plain; // Content-Typeヘッダーを追加 } } }次のコマンドを実行して、NGINX サーバーの ConfigMap を作成します。
kubectl create configmap myexample-nginx-configmap --from-file=nginx.conf=./myexample-nginx.conf以下の内容を含む myexampleapp.yaml ファイルを作成します。
次のコマンドを実行して、ドメイン名が aliyun.com である myexampleapp サービスを作成します。
kubectl apply -f myexampleapp.yaml
myexampleapp サービスをイングレスゲートウェイにインポートします。
ASM コンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。
[イングレスゲートウェイ] ページで、目的のイングレスゲートウェイの名前をクリックします。
[ゲートウェイの概要] ページの左側のナビゲーションペインで、[アップストリームサービス] をクリックします。
[ゲートウェイのアップストリームサービス] ページで、[サービスのインポート] をクリックします。
[サービスのインポート] ページで、[名前空間] ドロップダウンリストから myexampleapp サービスの名前空間を選択します。サービス選択ボックスで、[myexampleapp] サービスを選択し、
アイコンをクリックしてサービスを選択済みボックスに移動します。次に、[送信] をクリックします。
aliyun.com サーバーの証明書と秘密鍵を作成します。
次の openssl コマンドを実行して、ルート証明書と秘密鍵を作成します。
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -subj '/O=myexample Inc./CN=aliyun.com' -keyout aliyun.root.key -out aliyun.root.crt // ルート証明書と秘密鍵を作成次のコマンドを実行して、aliyun.com サーバーの証明書と秘密鍵を作成します。
次のコマンドを実行して、aliyun.com.crt 証明書を作成します。
openssl x509 -req -days 365 -CA aliyun.root.crt -CAkey aliyun.root.key -set_serial 0 -in aliyun.com.csr -out aliyun.com.crt // サーバー証明書を作成次のコマンドを実行して、aliyun.com.key 秘密鍵を作成します。
openssl req -out aliyun.com.csr -newkey rsa:2048 -nodes -keyout aliyun.com.key -subj "/CN=aliyun.com/O=myexample organization" // サーバー秘密鍵を作成
証明書と秘密鍵をボリュームにマウントし、ボリュームをイングレスゲートウェイに追加します。
説明バージョン 1.17 以降の ASM インスタンスでは、[証明書管理] ページに追加された証明書を使用できます。できるだけ早く証明書を [証明書管理] に移行することをお勧めします。証明書を移行するには、[証明書管理] ページで既存の証明書と同じ名前の新しい証明書を作成します。その後、既存の証明書は上書きされるため、削除する必要はありません。ASM インスタンスの更新方法の詳細については、「ASM インスタンスの更新」をご参照ください。
[証明書管理] ページに追加された証明書の場合、システムはデータプレーンに証明書と同じ名前のシークレットを自動的に生成します。同じ名前のシークレットが既に存在する場合、シークレットの新しい内容が元の内容を上書きします。
バージョン 1.17 より前の ASM インスタンス
ASM コンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。
[イングレスゲートウェイ] ページで、設定するゲートウェイの名前をクリックします。[ゲートウェイの概要] ページの左側のナビゲーションペインで、[ドメイン/証明書] をクリックします。
表示されるページで、[証明書] タブをクリックし、[作成] をクリックします。
[新しい証明書] ページで、[名前] フィールドに証明書名を入力し、
aliyun.com.crt証明書の内容を [証明書] ボックスにコピーし、aliyun.com.key秘密鍵の内容を [鍵] ボックスにコピーして、[作成] をクリックします。
バージョン 1.17 以降の ASM インスタンス
ASM コンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。
[証明書管理] ページで、[作成] をクリックします。[証明書情報] パネルで、必要なパラメーターを設定し、[OK] をクリックします。
パラメーター
説明
[名前]
証明書の名前を入力します。この例では、myexample-credential と入力します。
[公開鍵証明書]
手順 3 で生成された
aliyun.com.crt証明書の内容を入力します。[秘密鍵]
手順 3 で生成された
aliyun.com.key秘密鍵の内容を入力します。
証明書をドメイン名に紐付けます。
ASM コンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。
[イングレスゲートウェイ] ページで、構成するゲートウェイの名前をクリックします。[ゲートウェイの概要] ページの左側のナビゲーションペインで、[ドメイン/証明書] をクリックします。
表示されるページで、[ドメイン] タブをクリックし、[作成] をクリックします。
[ドメインの追加] ページで、[ドメイン名] パラメーターを *.aliyun.com に設定し、[プロトコル] パラメーターを [HTTPS] に設定し、ビジネス要件に基づいてポート名とポート番号を入力します。さらに、イングレスゲートウェイにインポートした証明書を選択し、[標準 TLS セマンティクスで安全な接続を確立する] を選択して、[作成] をクリックします。
説明[標準 TLS セマンティクスで安全な接続を確立する] を選択した場合、TLS リクエストのみがドメイン名にアクセスできます。
次のコマンドを実行して、HTTPS 経由で aliyun.com ドメイン名にアクセスし、ドメイン名と証明書が紐付けられているかどうかを確認します。
curl -k -H Host:www.aliyun.com --resolve www.aliyun.com:443:{IP address of the ingress gateway} https://www.aliyun.com // イングレスゲートウェイのIPアドレスを指定してHTTPSでアクセス予期される出力:
Welcome to aliyun.com!aliyun.com ドメイン名に HTTPS 経由でアクセスできます。これは、証明書がドメイン名に紐付けられていることを示します。