自己署名SSL証明書を使用したインストール

この構成は、HTTPと構成ファイルを使用する構成の上位版で、SSLを自己署名デジタル証明書とともに使用します。

自己署名デジタル証明書は無料であり、内部デプロイメントやエアギャップ・システムに適しています。

このチュートリアルでは、secretsSetup.shスクリプトをOpenSSLとともに使用して、公開キーと秘密キー、自己署名デジタル証明書、APIキーおよびPodmanシークレットを作成します。secretsSetup.shスクリプトおよびファイルのダウンロード場所の詳細は、「プライベートAIサービス・コンテナの構成」を参照してください。

コンテナのリスナーのSSLには、TLS 1.3が使用されます。つまり、HTTPSクライアントもTLS 1.3をサポートしている必要があります。たとえば、OpenSSL 1.1.1k以降などのSSLライブラリです。

この例では、構成ファイルは/home/opc/config/config.jsonです。

secretsSetup.shスクリプトを実行すると、次のファイルが$SECRETS_DIRディレクトリに作成されます:

ファイル名 説明
api-key 認証に使用されるランダム文字列。APIキーは、クライアントが必要とする共有シークレットです。
cert.pem 自己署名デジタル証明書
key.pem 生成された秘密キー
key.pub 生成された公開キー
keystore 証明書パスワードの格納に使用されるPKCS12キーストア

これらのファイルは、コンテナが最小権限で実行できるように$PRIVATE_DIR/secretsディレクトリにコピーされます。

  1. コンテナが実行される完全修飾ホスト名を特定します。
    export HOST=$(hostname -f)
    echo $HOST
  2. コンテナのシークレットを作成するディレクトリを定義します。

    OpenSSLの共通名/ホスト名の質問には必ず完全修飾ホスト名を使用し、作成されたキーストアのパスワードを覚えておいてください。

    mkdir /home/opc/privateai
    mkdir /home/opc/secrets
    export PRIVATE_DIR=/home/opc/privateai
    export SECRETS_DIR=/home/opc/secrets
    ./secretsSetup.sh -s $SECRETS_DIR
    ./configSetup.sh -d $PRIVATE_DIR -s $SECRETS_DIR 
    ./containerSetup.sh -d $PRIVATE_DIR

    これで、コンテナは、HTTPSポート8443を使用して実行されています。

  3. HTTP/SSLでcurlを使用するには、デジタル証明書をパラメータとして指定します。

    コンテナがHTTP/SSLモードで実行されているので、HTTPのこれまでのチュートリアルで使用したcurlコマンドは動作しなくなります。

    curl -i --cacert $SECRETS_DIR/cert.pem https://$HOST:8443/health

    /healthエンドポイントはAPIキーを必要としませんでしたが、他のエンドポイントはすべてAPIキーを必要とします。

  4. curl SSLコマンドが簡単になるように、API_KEYの値を定義します。
    export API_KEY=$(cat $SECRETS_DIR/api-key)
  5. SSLを使用してロードされたモデルをリストします。
    curl --header "Authorization: Bearer $API_KEY" --cacert $SECRETS_DIR/cert.pem  https://$HOST:8443/v1/models
  6. SSLを使用してベクトル埋込みを作成します。
    curl -X POST --header "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -d '{"model": "multilingual-e5-base", "input":["This is a phrase to vectorize"]}' --cacert $SECRETS_DIR/cert.pem https://$HOST:8443/v1/embeddings
  7. SSLを使用してランタイム・メトリックを表示します。
    curl --header "Authorization: Bearer $API_KEY" --cacert $SECRETS_DIR/cert.pem https://$HOST:8443/metrics/embeddings_call_latency
  8. 必要に応じて、コンテナとは異なるホストを指定してコマンドを実行します。

    リモート・ホストから接続する場合は、自己署名デジタル証明書の作成に、コンテナの完全修飾ホスト名を使用することになります。クライアント・マシンからコンテナの完全修飾ホスト名を使用します。

    コンテナの完全修飾ホスト名は、クライアント・マシンから解決できる必要があります。コンテナの完全修飾ホスト名について、クライアントの/etc/hostsファイルにエントリを追加することが必要になる場合があります。

    クライアント・マシンには、コンテナの自己署名デジタル証明書およびAPI_KEYのローカル・コピーが必要です。コンテナ・マシンから$SECRETS_DIRの内容をクライアントの$SECRETS_DIRにコピーするのが、最も簡単な方法です。

    curl -i --cacert $SECRETS_DIR/cert.pem https://$HOST:8443/health 
    curl --header "Authorization: Bearer $API_KEY" --cacert $SECRETS_DIR/cert.pem  https://$HOST:8443/v1/models
    curl -X POST --header "Authorization: Bearer $API_KEY" -H "Content-Type: application/json" -d '{"model": "multilingual-e5-base", "input":["This is a phrase to vectorize"]}' --cacert $SECRETS_DIR/cert.pem https://$HOST:8443/v1/embeddings
    curl --header "Authorization: Bearer $API_KEY" --cacert $SECRETS_DIR/cert.pem https://$HOST:8443/metrics/embeddings_call_latency