ASM gateway supports the creation of HTTPS type listening on SLB side

前提条件

• ASM インスタンスが作成済みであること。詳細については、「ASM インスタンスの作成」を参照してください。

• ACK クラスターが作成済みであること。詳細については、「マネージド Kubernetes クラスターの作成」を参照してください。

• クラスターが ASM インスタンスに追加済みであること。詳細については、「ASM インスタンスへのクラスターの追加」を参照してください。

背景情報

K8s Service の HTTPS タイプリスナーの作成方法
まず Alibaba Cloud コンソールで証明書を作成し、cert-id を控えておきます。その後、以下の Annotation を使用して HTTPS タイプの SLB を作成します。

注意: HTTPS リクエストは SLB レイヤーで復号化され、HTTP リクエストの形式でバックエンド Pod に送信されます。
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: "https:443"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${YOUR_CERT_ID}"
name: sample
namespace: default
spec:
ports:
- port: 443
protocol: TCP
targetPort: 80
selector:
app: sample
type: LoadBalancer

ステップ 1: SLB に必要な証明書の準備

この例では、aliyun.com 用の証明書と秘密鍵を生成します。
aliyun.com 用に使用できる証明書と秘密鍵が既に用意されている場合は、キーを aliyun.com.key、証明書を aliyun.com.crt という名前に変更する必要があります。用意されていない場合は、以下の手順で openssl を使用して証明書とキーを生成できます。

1. 以下のコマンドを実行して、ルート証明書と秘密鍵を作成します。
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

2. 以下のコマンドを実行して、aliyun.com サーバー用の証明書と秘密鍵を生成します。

openssl req -out aliyun.com.csr -newkey rsa:2048 -nodes -keyout aliyun.com.key -subj "/CN=aliyun.com/O=myexample organization"
openssl x509 -req -days 365 -CA aliyun.root.crt -CAkey aliyun.root.key -set_serial 0 -in aliyun.com.csr -out aliyun.com.crt

3. SLB コンソールで証明書を作成する

HTTPS モニタリングを設定するには、SSL 証明書サービスの証明書を直接使用するか、サードパーティから発行された必要なサーバー証明書と CA 証明書を Server Load Balancer (SLB) にアップロードします。

ステップ 2: HTTPS タイプのリスナーを作成する

Alibaba Cloud ASM では、イングレスゲートウェイサービスをカスタマイズする機能が提供されており、YAML 設定を通じて特定の機能パラメータを定義できます。

以下の設定では、serviceAnnotation を通じて HTTPS SLB が作成され、ポート 443 の HTTPS リクエストが SLB レイヤーで復号化された後、HTTP リクエストの形式でバックエンド Pod のポート 80 に送信されます。

apiVersion: istio.alibabacloud.com/v1beta1
kind: Istio Gateway
metadata:
name: ingressgateway
namespace: istio-system
spec:
....
ports:
- name: http-0
port: 80
protocol: HTTP
targetPort: 80
- name: https-1
port: 443
protocol: HTTPS
targetPort: 80
....
serviceAnnotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-cert-id: "${YOUR_CERT_ID}"
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-protocol-port: 'https:443'
....
serviceType: LoadBalancer

実行結果

ASM コンソールから確認します。コンソールで対応するサービスメッシュインスタンスを選択し、左側のナビゲーションバーで ASM ゲートウェイを選択して、右側のページで対応する情報を確認します。

以下のコマンドを実行して、HTTPS プロトコル経由で httpbin サービスにアクセスします。

curl -k https://{replace with the real IP address of the ingress gateway}:443/headers
{
"headers": {
"Accept": "*/*",
"Host": "xxxx",
"Remoteip": "xxxx",
"User-Agent": "curl/7.79.1",
"X-Envoy-Attempt-Count": "1",
"X-Envoy-External-Address": "xxxx",
"X-Forwarded-Client-Cert":
}
}

Related Articles

Explore More Special Offers

  1. Short Message Service(SMS) & Mail Service

    50,000 email package starts as low as USD 1.99, 120 short messages start at only USD 1.00

phone お問い合わせ
Hi, I'm Alibaba Cloud AI Assistant!
I can help with questions and solutions.