# Kubernetesサービス

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2FR1un6KfIP3dOW7EodsGK%2FKubernetes.jpg?alt=media&#x26;token=5fe7aaf2-8c13-4c35-a376-d80fec564888" alt=""><figcaption></figcaption></figure>

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

{% hint style="info" %}
SSL証明書が必要となりますので、お持ちでない場合は[カスタムSSL証明書の作成](/sso-connect-cloud/jp/device-approvals/automator/custom-ssl-certificate.md)ページをご参照ください。
{% endhint %}

### 1. Kubernetesのセットアップ

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

#### **Dockerのセットアップ**

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

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

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

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

```shell
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
```

#### **マスターノードの初期化**

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

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

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

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

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

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

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

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

{% code overflow="wrap" %}

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

{% endcode %}

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

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

```shell
sudo kubeadm join [your code from kubeadm init command]
```

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

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

### **2. Kubernetes Secretの作成**

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

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

### 3. マニフェスト**の作成**

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

* デプロイメントリソースはKeeperオートメーターDockerコンテナを実行します。
* SSL証明書と証明書パスワードファイルは、マウントされたSecretとして参照されます。
* Secretは初期化コンテナ内のポッドにコピーされます。
* オートメーターサービスはポート30000でリスンしてから、コンテナーのポート443にルーティングします。
* 本手順では、単一のコンテナ (replicas: 1) のみをデプロイしてコンテナを設定できるようにします。最後の手順でreplicasの数を増やします。

{% code overflow="wrap" lineNumbers="true" fullWidth="false" %}

```yaml
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
```

{% endcode %}

### 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コマンダーを使用してオートメーターをご利用の環境に統合します。

### 6. コマンダーでポッドを設定

ポッドを設定してオートメーター機能を使うには、Keeperコマンダーが必要となります。Keeperコマンダーはどこからでも実行できます。

ご利用のワークステーションにKeeperコマンダーCLIをインストールします。バイナリインストーラーを含むインストール手順については[こちら](/keeperpam/jp/commander-cli/commander-installation-setup.md)をご覧ください。

コマンダーをインストールした後、`keeper shell`と入力してセッションを開いてから`login`コマンドを使用してログインします。オートメーターをセットアップするには、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コマンダーにログインし、`automator create`で始まる一連のコマンドを使用してオートメーターを有効にします。

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

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

<figure><img src="https://1914737032-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mfd2v-YT48Ljtykb8qm%2Fuploads%2FNdYz9XWKABSVqtIAV5Ff%2FScreen%20Shot%202021-09-10%20at%203.59.58%20PM.png?alt=media&#x26;token=3c897624-3ae2-465e-9749-c4357015dacc" alt=""><figcaption><p>オートメーターの作成</p></figcaption></figure>

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

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

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

{% code overflow="wrap" %}

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

{% endcode %}

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

```
automator setup "My Automator"
```

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

```
automator init "My Automator"
```

オートメーターサービスを有効にします。

```
automator enable "My Automator"
```

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

### 7. サービスの確保

Keeperのサーバーおよびご利用のワークステーションからサービスへのネットワークアクセスを制限することを推奨します。許可するKeeper IPアドレスのリストについては、[イングレス要件](/sso-connect-cloud/jp/device-approvals/automator/ingress-requirements.md)をご参照ください。

### 8. オートメーターサービスのテスト

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

* ブラウザのシークレットモードでウィンドウを開きます。
* SSOユーザーアカウントを使用してKeeperウェブボルトにログインします。
* SSOログインの成功後にデバイスの承認が必要ないことを確認します。

### 9. ポッド設定の更新

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

```
replicas: 3
```

次に変更を適用します。

```
kubectl apply -f automator-deployment.yaml
```

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

### オートメーターサービスのトラブルシューティング

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

```
kubectl get pods
```

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

```
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
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.keeper.io/sso-connect-cloud/jp/device-approvals/automator/kubernetes-service.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
