Container Service for Kubernetes (ACK) コンソールに加えて、Kubernetes コマンドラインツールである kubectl を使用して、クラスターとアプリケーションを管理できます。 kubectl を使用してクラスターに接続する前に、現在のユーザーアイデンティティ情報を含むクラスターの kubeconfig を取得します。
手順1:kubectl クライアントのインストールと設定
kubectl をインストールするクライアントマシンを特定します。 ご使用のオペレーティング環境とクラスターバージョンに基づいて、kubectl をインストールします。
手順2:kubeconfig の取得と使用
1. kubeconfig タイプの選択
kubeconfig には、クラスターへのアクセスに必要な認証情報が含まれています。 セキュリティ要件とユースケースに基づいて kubeconfig のタイプを選択します。
責任共有モデルに基づき、お客様はご自身の kubeconfig 認証情報を管理および維持する責任を負います。 認証情報を適切かつ有効に保ち、kubeconfig を定期的にローテーションし、kubeconfig の漏洩によるセキュリティリスクを回避するために最小権限の原則に従ってください。
-
kubeconfig の有効期間別:
-
一時的な kubeconfig:kubeconfig の有効期間を 30 分から 3 日まで設定できます。 kubeconfig は設定した期間が経過すると自動的に期限切れとなり、漏洩によるセキュリティリスクを低減します。 このタイプは、日々の運用保守、トラブルシューティング、CI/CD パイプラインなど、API サーバーへの長期的な接続を必要としないユースケースに適しています。
-
長期 kubeconfig:デフォルトの有効期間は 3 年間です。 このタイプは、kubeconfig を頻繁に更新できない自動化システムや長時間実行する監視サービスに適しています。
-
-
クラスターへのアクセス方法別:
-
内部アクセス:内部アクセス用の kubeconfig を取得します。 kubectl クライアントマシンは、クラスターと同じ Virtual Private Cloud (VPC) 内にある必要があります。 Alibaba Cloud 内部ネットワーク経由の接続は、レイテンシーが低く、より安全です。
-
パブリックアクセス:パブリックアクセス用の kubeconfig を取得し、インターネット上の任意のマシンをクライアントとして使用してクラスターに接続します。 この方法は、Elastic IP Address (EIP) を使用して API サーバーに接続し、ローカル開発やリモートでの運用保守に適しています。
EIP をバインドした後、関連する料金については、「従量課金」をご参照ください。
-
-
パブリックアクセスが有効な ACK 専用クラスターを使用する場合、SSH 経由でマスターノードから kubeconfig を取得し、ローカルで kubectl を使用してクラスターを管理できます。 詳細については、「SSH 経由での ACK 専用クラスターのマスターノードへの接続」をご参照ください。
2. kubeconfig の取得とクラスターへの接続
コンソールから kubeconfig を取得した後、kubectl はそのファイルを使用してクラスターに接続し、管理できます。
RAM ユーザーがクラスターに接続する前に、Container Service のシステム権限に加えて、クラスターの操作権限を付与されている必要があります。 詳細については、「権限付与」をご参照ください。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、クラスターの名前をクリックするか、[操作] 列の [詳細] をクリックします。 クラスターの詳細ページが表示されます。
-
クラスター情報 ページで、接続情報 タブをクリックし、一時的または長期の kubeconfig を選択します。 一時的な kubeconfig の場合は、適切な有効期間を設定します。
-
パブリックアクセス または 内部アクセス タブを選択し、コピー をクリックして、コピーした kubeconfig の内容をクライアントの $HOME/.kube/config ファイルに貼り付け、ファイルを保存します。
$HOME/.kube/configファイルが存在しない場合は、mkdir -p $HOME/.kubeとtouch $HOME/.kube/configを実行して作成します。 -
設定が完了したら、kubectl コマンドを実行してクラスターへの接続性を確認します。
次の例では、名前空間を取得します。
kubectl get namespaces期待される出力:
NAME STATUS AGE default Active 4h39m kube-node-lease Active 4h39m kube-public Active 4h39m kube-system Active 4h39m
本番運用時の注意点
-
kubeconfig の有効性の確認:kubeconfig の有効期限が切れたときにクラスターへのアクセスが中断されるのを防ぐため、速やかに更新してください。
長期 kubeconfig は 3 年間有効です。 ベストプラクティスとして、有効期限が切れる 180 日以内に、ACK コンソールまたは DescribeClusterUserKubeconfig API を呼び出すことによって、新しい kubeconfig を取得してください。
新しい kubeconfig も 3 年間有効です。 古い kubeconfig は、その証明書の有効期限が切れるまで有効です。
-
kubeconfig の迅速な失効:kubeconfig が漏洩した疑いがある場合は、直ちに「クラスターの kubeconfig ファイルを失効させる」を実行してください。 失効後、システムは新しい kubeconfig と権限付与のバインディングを生成し、古い kubeconfig に基づくすべての接続は無効になります。
-
権限のクリーンアップ:プロジェクトの終了後や従業員の退職後など、ユーザーがアクセス権限を必要としなくなった場合は、クリーンアップ機能を使用して kubeconfig の権限を一括で削除します。 クリーンアップ後、システムは新しい kubeconfig を生成しません。 手順については、「kubeconfig ファイルの削除」および「ack-ram-tool を使用したユーザー権限のクリーンアップ」をご参照ください。
誤って権限を削除しないように、「kubeconfig のごみ箱を使用する」ことで、クリアされた特定の kubeconfig 権限を復元できます。
よくある質問
kubeconfig で使用されている証明書に関連付けられたID情報を取得するにはどうすればよいですか?
次のコマンドを実行して、ID情報を取得します。
grep client-certificate-data kubeconfig |awk '{print $2}' |base64 -d | openssl x509 -noout -text |grep Subject:
kubeconfig のパスを実際のパスに置き換えてください。 デフォルトでは、kubectl は$HOME/.kube/configを使用してクラスターに接続します。 KUBECONFIG 環境変数を設定するか、--kubeconfigパラメーターを使用して、別の kubeconfig ファイルを指定することもできます。
期待される出力は次のようになります。
Subject: O=system:users, OU=, CN=1***-1673419473
各項目の説明:
-
O:Kubernetes ユーザーグループ情報です。 この例では、グループ名はsystem:usersです。 -
CN:関連するユーザー情報です。 この例では、ユーザーは1***-1673419473であり、1***はアカウントの Alibaba Cloud ユーザー ID に関連付けられています。
kubeconfig で使用されている証明書の有効期限を取得するにはどうすればよいですか?
次のコマンドを実行して、kubeconfig ファイルで使用されている証明書に関連付けられた有効期限を取得します。
grep client-certificate-data kubeconfig |awk '{print $2}' |base64 -d | openssl x509 -noout -enddate
kubeconfig のパスを実際のパスに置き換えてください。 デフォルトでは、kubectl は$HOME/.kube/configを使用してクラスターに接続します。 KUBECONFIG 環境変数を設定するか、--kubeconfigパラメーターを使用して、別の kubeconfig ファイルを指定することもできます。
期待される出力は次のようになります。
notAfter=Jan 10 06:44:34 2026 GMT
この例では、Jan 10 06:44:34 2026 GMT が証明書の有効期限です。
証明書の有効期限が切れる 180 日前から、または有効期限が切れた後、コンソールまたは OpenAPI を介して、新しい有効期限を持つ証明書を使用する kubeconfig を取得できます。
クライアント証明書、クライアント秘密鍵、API サーバー情報を取得するにはどうすればよいですか?
次のコマンドを使用して、kubeconfig ファイルからクライアント証明書、クライアント秘密鍵、API サーバー情報を抽出します。
cat ./kubeconfig |grep client-certificate-data | awk -F ' ' '{print $2}' |base64 -d > ./client-cert.pem
cat ./kubeconfig |grep client-key-data | awk -F ' ' '{print $2}' |base64 -d > ./client-key.pem
APISERVER=`cat ./kubeconfig |grep server | awk -F ' ' '{print $2}'`
kubeconfig のパスを実際のパスに置き換えてください。 デフォルトでは、kubectl は$HOME/.kube/configを使用してクラスターに接続します。 KUBECONFIG 環境変数を設定するか、--kubeconfigパラメーターを使用して、別の kubeconfig ファイルを指定することもできます。
kubectl を使用してクラスターに接続する際に発生する certificate is valid for エラーを解決するにはどうすればよいですか?
クラスター API サーバーの Server Load Balancer (SLB) インスタンスに新しい IP アドレスをバインドした後、kubectl コマンドを実行して新しい IP アドレスにアクセスしようとすると、"Error while proxying request: x509: certificate is valid for xxx" または "Unable to connect to the server: x509: certificate is valid for xxx" というエラーで失敗することがあります。
-
ACK マネージドクラスター:新しい IP アドレスを API サーバーの証明書 SAN に追加します。 詳細については、「ACK API サーバー証明書 SAN のカスタマイズ」をご参照ください。
-
ACK 専用クラスター:
insecure-skip-tls-verify設定を使用して、kubectl がこのエラーを無視するように設定します。重要この方法はクライアントによる API サーバー証明書の検証を妨げるため、本番環境での使用は推奨されません。 代わりに、「ACK 専用クラスターから ACK Pro クラスターへのホットマイグレーション」を実行し、新しい IP アドレスを API サーバーの証明書 SAN に追加することでこの問題を解決してください。
-
方法1:kubectl コマンドの実行時に
--insecure-skip-tls-verifyパラメーターを指定します。kubectl -s https://<IP>:6443 --insecure-skip-tls-verify get ns -
方法2:kubeconfig ファイルを変更し、
insecure-skip-tls-verify: true設定を追加してから、certificate-authority-data設定を削除します。apiVersion: v1 clusters: - cluster: server: https://<IP>:6443 insecure-skip-tls-verify: true name: kubernetes contexts: ...
-
ACK マネージドクラスター:クラスターのルート証明書キーを取得して、自分で kubeconfig 証明書を生成できますか?
ACK マネージドクラスターは、クラスターのルート証明書キーを外部に提供しません。 代わりに、コンソールまたは OpenAPI 経由でクラスターの kubeconfig を取得してください。
関連ドキュメント
-
OpenAPI 操作を呼び出して、クラスターの kubeconfig を取得できます。 詳細については、「DescribeClusterUserKubeconfig」をご参照ください。
-
ノードにログインするには、「接続方法の選択」をご参照ください。