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":
}
}
• 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
-
A detailed explanation of Hadoop core architecture HDFS
Knowledge Base Team
-
What Does IOT Mean
Knowledge Base Team
-
6 Optional Technologies for Data Storage
Knowledge Base Team
-
What Is Blockchain Technology
Knowledge Base Team
Explore More Special Offers
-
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
