Kubernetesサービス

KubernetesサービスとしてKeeper Automatorをインストール

本ガイドでは、Keeper AutomatorをKubernetesサービスとして実行するための手順を解説します。

SSL証明書が必要となりますので、お持ちでない場合はカスタムSSL証明書の作成ページをご参照ください。

(1) Kubernetesのセットアップ

Kubernetesのインストールとデプロイについては詳しく触れませんが、デモの目的でプラットフォームに依存しない2つのEC2インスタンス(マスターとワーカー)を使用する、非常に基本的な単一ノード環境について記載しました。K8環境がすでに整っている場合には手順2へお進みください。

Dockerのセットアップ

Kubernetesはコンテナランタイムを要しますのでDockerを使用します。

sudo yum update -y
sudo yum install -y docker
sudo systemctl enable docker
sudo systemctl start docker

kubeadm、kubelet、kubectlのインストール

これらのパッケージは、マスターノードとワーカーノードの両方にインストールする必要があります。 今回の例ではAWS Amazon Linux 2インスタンスタイプを使用しています。

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

sudo systemctl enable --now kubelet

マスターノードの初期化

マスターノードとして使用をご希望のマシンで以下を実行します。

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

--pod-network-cidr 引数は、特定のネットワークプロバイダーで必要となります。ポッドに設定するIP範囲を置き換えます。

kubeadm initが完了後、ワーカーノードをマスターに参加させるために使用できるコマンドが表示されます。レスポンスと初期化コードをメモして次の手順で使えるようにします。

ローカルのkubeconfigをセットアップします。

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

ポッドネットワークのインストール

クラスターが機能する前にポッドネットワークをインストールする必要があります。簡単にflannelを使用できます。

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

ワーカーノードを参加させる

ワーカーノードとして追加する各マシンで、初期化コードを含む以下のコマンドを実行します。

sudo kubeadm join [your code from kubeadm init command]

セキュリティグループ内のワーカーノードとマスターノードの間でポート6443 が開いている必要があリます。

ワーカーが参加した後、Kubernetesクラスターが稼働します。マスター上でkubectl get nodesを実行すると、ノードのステータスを確認できます。

(2) Kubernetes Secretの作成

Keeper AutomatorのSSL証明書がSecretとしてKubernetesサービスに提供されます。SSL証明書とSSL証明書パスワード(SSL 証明書ガイドから作成)を保存するには、以下のコマンドを実行します。

kubectl create secret generic certificate-secret --from-file=ssl-certificate.pfx --from-file=ssl-certificate-password.txt

(3) マニフェストの作成

以下は、automator-deployment.yamlとして保存できるマニフェストファイルです。デプロイメントリソースとサービスリソースの両方の設定が含まれています。

  • デプロイメントリソースはKeeper Automator Dockerコンテナを実行します。

  • SSL証明書と証明書パスワードファイルは、マウントされたSecretとして参照されます。

  • Secretは初期化コンテナ内のポッドにコピーされます。

  • Automatorサービスはポート30000でリスンしてから、コンテナーのポート443にルーティングします。

  • 本手順では、単一のコンテナ(replicas: 1)のみをデプロイしてコンテナを設定できるようにします。最後の手順でreplicasの数を増やします。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: automator-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: automator
  template:
    metadata:
      labels:
        app: automator
    spec:
      initContainers:
        - name: init-container
          image: busybox
          command: ['sh', '-c', 'cp /secrets/* /usr/mybin/config']
          volumeMounts:
            - name: secret-volume
              mountPath: /secrets
            - name: config-volume
              mountPath: /usr/mybin/config
      containers:
        - name: automator
          image: keeper/automator:latest
          ports:
            - containerPort: 443
          volumeMounts:
            - name: config-volume
              mountPath: /usr/mybin/config
      volumes:
        - name: config-volume
          emptyDir: {}
        - name: secret-volume
          secret:
            secretName: certificate-secret
            items:
              - key: ssl-certificate.pfx
                path: ssl-certificate.pfx
              - key: ssl-certificate-password.txt
                path: ssl-certificate-password.txt
---
apiVersion: v1
kind: Service
metadata:
  name: automator-service
spec:
  type: NodePort
  ports:
  - port: 443
    targetPort: 443
    protocol: TCP
    nodePort: 30000
  selector:
    app: automator

(4) サービスのデプロイ

kubectl apply -f automator-deployment.yaml

30秒以内にサービスが起動します。

(5) サービスステータスのチェック

ウェブブラウザでサービスが実行されていることを確認します(テストしているデバイスからポート 30000を開く必要があります)。 今回の場合、URLはhttps://automator2.lurey.com:30000/api/rest/statusとなります。

自動ヘルスチェックには以下のURLもご利用になれます。

https://<server>/health

例:

$ curl https://automator2.lurey.com:30000/health
OK

これで単一ポッドのサービスが実行されていますので、Keeper Commanderを使用してAutomatorをご利用の環境に統合します。

(6) Commanderでポッドを設定

ポッドを設定してAutomator機能を使うには、Keeper Commanderが必要となります。Keeper Commanderはどこからでも実行できます。

ご利用のワークステーションにKeeper Commander CLIをインストールします。バイナリインストーラーを含むインストール手順についてはこちらをご覧ください。

Commanderをインストールした後、keeper shellと入力してセッションを開いてからloginコマンドを使用してログインします。Automatorをセットアップするには、Keeper管理者またはSSO ノードを管理する権限を持つ管理者としてログインする必要があります。

$ keeper shell

My Vault> login admin@company.com

  _  __  
 | |/ /___ ___ _ __  ___ _ _ 
 | ' </ -_) -_) '_ \/ -_) '_|
 |_|\_\___\___| .__/\___|_|
 vxx.x.xx     |_|

Logging in to Keeper Commander

SSO user detected. Attempting to authenticate with a master password.
(Note: SSO users can create a Master Password in Web Vault > Settings)

Enter password for admin@company.com
Password: 
Successfully authenticated with Master Password
Syncing...
Decrypted [58] record(s)

My Vault>

Keeper Commanderにログインし、automator createで始まる一連のコマンドを使用してAutomatorを有効にします。

My Vault> automator create --name="My Automator" --node="Azure Cloud"

ノード名 (この場合はAzure Cloud) は、以下のように管理コンソールUIから取得します。

コマンドの出力には、IDプロバイダからのメタデータを含むAutomator設定が表示されます。

                    Automator ID: 1477468749950
                            Name: My Automator
                             URL: 
                         Enabled: No
                     Initialized: No
                          Skills: Device Approval

URLはまだ入力されていませんので、以下のようにautomator editコマンドを実行します。これによりURLとスキルが設定されます(teamteam_for_userdevice)。

automator edit --url https://automator2.lurey.com:30000 --skill=team --skill=team_for_user --skill=device "My Automator"

次にキーを交換します。Automator公開キーで暗号化されたエンタープライズ秘密キーがAutomatorに提供されます。

automator setup "My Automator"

次に、他のIdPメタデータをAutomatorに送信します。

automator init "My Automator"

Automatorサービスを有効にします。

automator enable "My Automator"

この時点で設定は完了となります。

(7) サービスの確保

Keeperのサーバーおよびご利用のワークステーションからサービスへのネットワークアクセスを制限することを推奨します。許可するKeeper IPアドレスのリストについては、イングレス要件をご参照ください。

(8) Automatorサービスのテスト

単一のポッドでAutomatorサービスが適切に動作していることを確認するには、以下の手順を行います。

  • ブラウザのシークレットモードでウィンドウを開きます。

  • SSOユーザーアカウントを使用してKeeperウェブボルトにログインします。

  • SSOログインの成功後にデバイスの承認が必要ないことを確認します。

(9) ポッド設定の更新

この時点では、単一のポッド設定を実行しています。最初のポッドにAutomatorサービスがセットアップされKeeper クラウドに設定されましたので、ポッドの数を増やせます。以下のように、YAMLファイル内のreplicasステートメントを実行したいポッドの数に更新します。

replicas: 3

次に変更を適用します。

kubectl apply -f automator-deployment.yaml

複数のポッドが実行されている場合、コンテナはラウンドロビン方式のセットアップで負荷が分散されます。最初の承認リクエスト時に構成設定がKeeperクラウドからAutomatorポッドへ自動的かつ安全にロードされます。

Automatorサービスのトラブルシューティング

Automatorサービスを実行しているログファイルでエラーを監視できます。ポッドのリストを取得するには以下を実行します。

kubectl get pods

以下のコマンドを使用して、ターミナル経由でAutomatorコンテナに接続します。

kubectl exec -it automator-deployment-<POD> --container automator -- /bin/sh

ログファイルはlogs/フォルダにあります。ターミナルに接続する代わりに、以下のコマンドからコンテナのログファイルを追跡することもできます。

kubectl exec -it automator-deployment-<POD> --container automator -- tail -f /usr/mybin/logs/keeper-automator.log

最終更新