Cert-Manager 統合による証明書の生成
ServiceNow 外部発行者 (sn-external-issuer) を使用して Kubernetes Cert-Manager を介して証明書を要求し、それをシークレットとして保存します。
必須条件
Cert-Manager は、Kubernetes 環境に展開する必要があります。[インスタンス URL]、[証明書の所有者グループ]、[証明書の所有者]、[環境]、および [更新追跡] で manager.yaml を更新します。
ServiceNow 外部発行者 (sn-external-issuer) は Kubernetes 環境に展開する必要があります。インスタンスのユーザー名とパスワードを使用して、Kubernetes シークレット clusterissuer-servicenow-credentials を作成します。ユーザーには、証明書を要求するための適切なロールが必要です。
ServiceNow 外部発行者 (sn-external-issuer)
外部発行者は、Cert-Manager コアに組み込まれていない API とサービスを使用して証明書を発行するように Cert-Manager を拡張します。ServiceNow 外部発行者は、外部発行者の ServiceNow 実装を提供します。
新しい証明書タスクが作成されると、その証明書要求 UID と証明書タスク Sys ID が、「true」としてアクティブであるインスタンスのローカル json キャッシュと「タスクマップへの証明書要求 UID」テーブルに追加されます。ServiceNow 外部発行者はインスタンスをポーリングし、タスクのステータスを確認します。
次に、ServiceNow 外部発行者は証明書タスクのステータスを確認します。タスクが [対応中] ステータスの場合、その 証明書要求 UID と 証明書タスク Sys ID は、インスタンスの外部発行者 UID マップテーブルとローカルの Json キャッシュの両方に追加されます。証明書要求が保留されている間、Cert-Manager は自動的に同じ証明書を要求しようとします。
証明書要求を受信すると、Cert-Manager はその UID に対して作成されたタスクがローカルの Json キャッシュにあるかどうかを確認します。一致するタスクがある場合は、同じタスクを再度ポーリングします。一致するタスクがない場合は、インスタンスにクエリを実行して外部発行者 UID マップテーブルからレコードを取得し、ローカルの JSON キャッシュに入力します。
タスクが完了として正常にマークされ、証明書が生成されると、ServiceNow 外部発行者はインスタンスに別の要求を送信し、証明書の添付ファイルをダウンロードします。Cert-Manager は、Kubernetes の証明書リソースと対応するシークレットを更新します。
Kubernetes での ServiceNow 外部発行者の展開
インスタンスのダウンロードページから、Helm チャートまたは YAML zip パッケージをダウンロードできます。ダウンロードが完了したら、特定のユースケースに合わせて manager.yaml ファイルまたは values.yaml ファイルをカスタマイズできます。これらのファイルを変更して、インスタンス URL や証明書所有者グループなどの重要な情報を含めることができます。
さらに、次のコマンドを使用してシークレットの clusterissuer-servicenow-credentials を作成する必要があります。
“kubectl create secret generic clusterissuer-servicenow-credentials --from-literal=user=<user_name> --from-literal=password=<password> -n system”
このコマンドは、Helm チャート内に組み込むこともできます。関連するカスタマイズが完了し、シークレット資格情報が作成されたら、次のように kubectl apply または helm install コマンドを使用して ServiceNow 外部発行者の展開を続行できます。
kubectl create ns system
kubectl apply -f crd
kubectl apply -f rbac
kubectl apply -f issuers
kubectl apply -f manager/manager.yaml
新しい証明書の要求フロー
展開が完了したら、次の情報を使用して証明書リソースを送信できます。
- issuerRef : clusterissuer-servicenow
- issuer : issuer-servicenow
- kind : ClusterIssuer
- issuerRef : servicenow-issuer.servicenow.com
サンプル証明書リソース:
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: certificate-by-clusterissuer
spec:
commonName: certificate-by-clusterissuer.servicenow.com
secretName: certificate-by-clusterissuer
dnsNames:
- servicenow.com
- foo.servicenow.com
issuerRef:
name: clusterissuer-servicenow
group: servicenow-issuer.servicenow.com
kind: ClusterIssuerkubectl apply -f certificate_clusterissuer.yaml