カスタムドメイン名を使用してKnativeサービスを公開する場合は、データ送信を保護するためにドメイン名の証明書を設定することをお勧めします。 Knativeを使用すると、DomainMappingを使用してHTTPS経由でサービスにアクセスする証明書を設定できます。
前提条件
Knativeはクラスターにデプロイされています。 詳細については、「」「Knativeのデプロイ」をご参照ください。
手順1: Knativeサービスの作成
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスターページで、管理するクラスターの名前をクリックし、 左側のナビゲーションウィンドウに表示されます。
Knativeページの [サービス] タブで、名前空間をデフォルトに設定し、[テンプレートから作成] をクリックします。 helloworldという名前のKnativeサービスを作成する-コンソールにあるサンプルテンプレートから移動し、[作成] をクリックします。 次に、helloworld-goという名前のサービスが作成されます。
ステップ2: シークレットとして管理される証明書を作成する
Knativeでは、秘密はキー、パスワード、証明書などの機密情報の保存と管理に使用されます。 この例では、OpenSSLを使用して自己署名証明書を作成します。 証明書と秘密鍵ファイルは、Base64を使用してエンコードされ、クラスター内のシークレットに保存されます。 次の例は、シークレットとして管理される自己署名証明書を作成する方法を示しています。
次のOpenSSLコマンドを実行して、自己署名証明書を作成します。
openssl genrsa -out knativetop-key.pem 4096 openssl req -subj "/CN=helloworld.knative.top" -sha256 -new -key knativetop-key.pem -out knativetop.csr echo subjectAltName = DNS:helloworld.knative.top > extfile.cnf openssl x509 -req -days 3650 -sha256 -in knativetop.csr -signkey knativetop-key.pem -out knativetop-cert.pem -extfile extfile.cnf
期待される出力:
Signature ok subject=CN = helloworld.knative.top Getting Private key
手順1の
knativetop-key.pem
およびknativetop-cert.pem
ファイルをエンコードするには、Base64を使用します。次のコマンドを実行し、Base64を使用して
knativetop-key.pem
ファイルをエンコードします。cat knativetop-key.pem | base64
期待される出力:
a25hdGl2ZXRvcC1r******
次のコマンドを実行し、Base64を使用して
knativetop-cert.pem
ファイルをエンコードします。cat knativetop-cert.pem | base64
期待される出力:
a25hdGl2ZXRvcC1jZ******==
次のコマンドを実行して、シークレットを作成します。
シークレットは、ドメイン名
helloworld. Knative. top
に安全にアクセスするために、knative ServiceのTLS設定で使用できます。kubectl create secret tls secret-tls --key knativetop-key.pem --cert knativetop-cert.pem
期待される出力:
secret/secret-tls created
ステップ3: DomainMappingの作成
DomainMappingsはKnativeのリソースオブジェクトです。 DomainMappingは、ドメイン名を1つ以上のKnativeサービスにマップします。 DomainMappingを作成して、カスタムドメイン名をKnativeサービスにマップし、アプリケーションがドメイン名を介してサービスにアクセスできるようにすることができます。
次のコマンドを実行して、
helloworld.knative.top.yaml
という名前のファイルを作成します。vim helloworld.knative.top.yaml
viエディターを開き、次のYAMLコンテンツを追加し、変更を保存してから終了します。
apiVersion: serving.knative.dev/v1beta1 kind: DomainMapping metadata: name: helloworld.knative.top namespace: default spec: ref: name: helloworld-go kind: Service apiVersion: serving.knative.dev/v1 # tls block specifies the secret to be used tls: secretName: secret-tls
次のコマンドを実行して、
helloworld.knative.top.yaml
ファイルに定義されているリソースをACKクラスターにデプロイします。kubectl apply -f helloworld.knative.top.yaml
期待される出力:
domainmapping.serving.knative.dev/helloworld.knative.top created
次のコマンドを実行して、DomainMappingを確認します。
kubectl get domainmapping helloworld.knative.top
期待される出力:
NAME URL READY REASON helloworld.knative.top https://helloworld.knative.top True
ステップ4: HTTPS経由でKnativeサービスにアクセスする
次のコマンドを実行して、HTTPS経由でKnativeサービスにアクセスします。
ALB
AlbConfigのポート443にリスナーを追加します。次のコードは、knative-internetのポート443にリスナーを追加する例を示しています。
apiVersion: alibabacloud.com/v1
kind: AlbConfig
metadata:
name: knative-internet
spec:
config:
...
listeners:
- port: 443
protocol: HTTPS # Valid values for protocol: HTTP, HTTPS, and QUIC.
...
次のコマンドを実行して、アクセステストを実行します。
# alb-ppcate4ox6******.cn-beijing.alb.aliyuncs.com is the address of the ALB Ingress.
curl -H "host: helloworld.knative.top" https://alb-ppcate4ox6******.cn-beijing.alb.aliyuncs.com -k
MSE
# 8.141.XX.XX is the address of the MSE Ingress.
curl -H "host: helloworld-go.default.example.com" https://8.141.XX.XX -k
ASM
# 8.141.XX.XX is the address of the ASM Ingress.
curl -H "host: helloworld-go.default.example.com" http://8.141.XX.XX -k
期待される出力:
Hello Knative!
関連ドキュメント
プローブを構成して、Knativeサービスのステータスと可用性を監視できます。 詳細については、「Knativeでのポートプロービングの設定」をご参照ください。
elastic IPアドレス (EIP) に関連付けることで、elasticコンテナインスタンスのインターネットアクセスを有効にできます。 詳細については、「Knative Serviceが実行されているEIPのelasticコンテナーインスタンスへの関連付け」をご参照ください。