クラスターへのアクセス
IBM Cloud® Kubernetes Service クラスターを作成したら、そのクラスターにアクセスしてクラスターの操作を開始できます。
前提条件
- 必要な CLI ツールをインストールします (IBM Cloud CLI、Kubernetes Service プラグイン (
ibmcloud ks
)、および Kubernetes CLI (kubectl
) を含む)。クラスター内のテスト機能に素早くアクセスするために、IBM Cloud Shell を使用することもできます。 - IBM Cloud Kubernetes Service クラスターを作成します。
- 企業ファイアウォールでネットワークが保護されている場合は、IBM Cloud と IBM Cloud Kubernetes Service の API エンドポイントとポートへのアクセスを許可します。 プライベート・クラウド・サービス・エンドポイントのみのクラスターの場合は、クラウド・サービス・エンドポイント・サブネットへのアクセスを構成するまで、クラスターへの接続をテストすることはできません。
ibmcloud ks cluster get -c <cluster_name_or_ID>
を実行して、クラスターが正常な状態であることを確認します。 クラスターが正常な状態でない場合は、クラスターのデバッグのガイドを参照してください。 例えば、ファイアウォール・ゲートウェイ・アプライアンスによって保護されているアカウントにクラスターがプロビジョンされている場合は、 該当するポートと IP アドレスへの発信トラフィックを許可するようにファイアウォール設定を構成します。- 前の手順のクラスター詳細の出力で、クラスターのパブリックまたはプライベートのサービス・エンドポイント URL を確認します。
- パブリックのサービス・エンドポイント URL のみ: パブリック・クラウド・サービス・エンドポイントを介したクラスターへのアクセスに進みます。
- プライベートのサービス・エンドポイント URL のみ: プライベート・クラウド・サービス・エンドポイントを介したクラスターへのアクセスに進みます。
- 両方のサービス・エンドポイント URL: パブリックまたはプライベートのサービス・エンドポイントを介してクラスターにアクセスできます。
- 仮想プライベート・エンドポイント を介して VPC クラスターにアクセスすることもできます。
パブリック・クラウド・サービス・エンドポイントを介したクラスターへのアクセス
クラスターを処理するには、作成したクラスターを CLI セッションのコンテキストとして設定して、kubectl
コマンドを実行します。
IBM Cloud コンソールを代わりに使用する場合は、IBM Cloud Shell の Web ブラウザーから直接 CLI コマンドを実行できます。
- 作成したクラスターを、このセッションのコンテキストとして設定します。 次の構成手順は、クラスターの操作時に毎回行ってください。
- クラスターの
kubeconfig
構成ファイルをダウンロードし、kubeconfig
の既存の~/.kube/config
に追加するか、KUBECONFIG
環境変数の最後のファイルに追加します。ibmcloud ks cluster config -c <cluster_name_or_ID>
kubectl
コマンドが正しく実行され、Kubernetesコンテキストがクラスターに設定されていることを確認します。
出力例kubectl config current-context
<cluster_name>/<cluster_ID>
- クラスターの
- デフォルトのポート
8001
で Kubernetes ダッシュボードを起動します。- デフォルトのポート番号でプロキシーを設定します。
kubectl proxy
Starting to serve on 127.0.0.1:8001
- Web ブラウザーで以下の URL を開いて、Kubernetes ダッシュボードを表示します。
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
- デフォルトのポート番号でプロキシーを設定します。
プライベート・クラウド・サービス・エンドポイントを介したクラスターへのアクセス
許可されたクラスター・ユーザーが、プライベート・クラウド・サービス・エンドポイントを介して VPC クラスターまたはクラシック・クラスターにアクセスできるようにします。
プライベート・クラウド・サービス・エンドポイントを介した VPC クラスターへのアクセス
許可されたクラスター・ユーザーが IBM Cloud プライベート・ネットワークの中で作業している場合、または VPC VPN 接続などを介してプライベート・ネットワークに接続している場合は、プライベート・クラウド・サービス・エンドポイントを介して Kubernetes マスターにアクセスできます。 ただし、プライベート・クラウド・サービス・エンドポイントを介した Kubernetes
マスターとの通信には、IP アドレス範囲 166.X.X.X
を使用する必要があるので、この範囲を VPN ゲートウェイおよび接続のセットアップで構成する必要があります。
-
IBM Cloud VPC の VPN をセットアップし、VPN を介してプライベート・ネットワークに接続します。
- ローカル・マシンに VPN ゲートウェイを構成します。 例えば、マシンで StrongSwan をセットアップすることを選択できます。
- VPC に VPN ゲートウェイを作成し、VPC の VPN ゲートウェイとローカルの VPN ゲートウェイの間の接続を作成します。 **「VPC 用の新規 VPN 接続」**セクションで、
166.8.0.0/14
「ローカル・サブネット (Local subnets)」**フィールドに ** サブネットを追加します。 マルチゾーン・クラスターの場合は、この手順を繰り返して、ワーカー・ノードが存在するゾーンごとにサブネットに VPC ゲートウェイを構成します。 - IBM Cloud VPC VPN 接続を介してプライベート・ネットワークに接続していることを確認します。
-
クラスターの
kubeconfig
構成ファイルをダウンロードし、kubeconfig
の既存の~/.kube/config
に追加するか、KUBECONFIG
環境変数の最後のファイルに追加します。ibmcloud ks cluster config -c <cluster_name_or_ID> --endpoint private
-
kubectl
コマンドが正しく実行され、Kubernetesコンテキストがクラスターに設定されていることを確認します。kubectl config current-context
出力例
<cluster_name>/<cluster_ID>
プライベート・クラウド・サービス・エンドポイントを介したクラシック・クラスターへのアクセス
許可されたクラスター・ユーザーが、IBM Cloud プライベート・ネットワークの中で作業している場合、またはクラシック VPN 接続や IBM Cloud Direct Link などを介してプライベート・ネットワークに接続している場合は、プライベート・クラウド・サービス・エンドポイントを介して
Kubernetes マスターにアクセスできます。 ただし、プライベート・クラウド・サービス・エンドポイントを介した Kubernetes マスターとの通信には、IP アドレス範囲 166.X.X.X
を使用する必要があります。この範囲はクラシック VPN 接続でも IBM Cloud Direct Link でもルーティングすることはできません。 プライベート・ネットワーク・ロード・バランサー (NLB) を使用して、クラスター・ユーザーのマスターのプライベート・クラウド・サービス・エンドポイントを公開できます。
プライベート NLB は、ユーザーが VPN または IBM Cloud Direct Link 接続を使用してアクセスできる内部 10.X.X.X
IP アドレス範囲として、マスターのプライベート・クラウド・サービス・エンドポイントを公開します。 プライベート・クラウド・サービス・エンドポイントのみを有効にする場合は、Kubernetes ダッシュボードを使用するか、パブリック・クラウド・サービス・エンドポイントを一時的に有効にして、プライベート
NLB を作成できます。
-
クラスターのプライベート・クラウド・サービス・エンドポイント URL およびポートを取得します。
ibmcloud ks cluster get -c <cluster_name_or_ID>
この出力例では、プライベート・サービス・エンドポイント URL は
https://c1.private.us-east.containers.cloud.ibm.com:25073
です。NAME: setest ID: b8dcc56743394fd19c9f3db7b990e5e3 State: normal Status: healthy cluster Created: 2019-04-25T16:03:34+0000 Location: wdc04 Master URL: https://c1.private.us-east.containers.cloud.ibm.com:25073 Public Service Endpoint URL: - Private Service Endpoint URL: https://c1.private.us-east.containers.cloud.ibm.com:25073 Master Location: Washington D.C. ...
-
kube-api-via-nlb.yaml
という名前の YAML ファイルを作成します。 この YAML はプライベートLoadBalancer
サービスを作成し、NLB を介してプライベート・クラウド・サービス・エンドポイントを公開します。<private_service_endpoint_port>
を、先述の手順で確認したポートに置き換えます。apiVersion: v1 kind: Service metadata: name: kube-api-via-nlb annotations: service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type: private namespace: default spec: type: LoadBalancer ports: - protocol: TCP port: 8080 # Or, the <private_service_endpoint_port> that you found earlier. targetPort: 8080 # Optional. By default, the `targetPort` is set to match the `port` value unless specified otherwise. --- kind: Endpoints apiVersion: v1 metadata: name: kube-api-via-nlb subsets: - addresses: - ip: 172.20.0.1 ports: - port: 2040
-
プライベート NLB を作成するには、クラスター・マスターに接続する必要があります。 VPN または IBM Cloud Direct Link からプライベート・クラウド・サービス・エンドポイントを介してまだ接続できないため、クラスター・マスターに接続し、パブリック・クラウド・サービス・エンドポイントまたは Kubernetes ダッシュボードを使用して NLB を作成する必要があります。
-
プライベート・クラウド・サービス・エンドポイントのみを有効にした場合は、Kubernetes ダッシュボードを使用して NLB を作成できます。 ダッシュボードは、すべての要求をマスターのプライベート・クラウド・サービス・エンドポイントに自動的に経路指定します。
- クラスタ] ページで、アクセスするクラスタをクリックします。
- クラスターの詳細ページで、**「Kubernetes ダッシュボード (Kubernetes Dashboard)」**をクリックします。
- **「+ 作成 (+ Create)」**をクリックします。
- **「ファイルから作成 (Create from file)」を選択し、
kube-api-via-nlb.yaml
ファイルをアップロードして、「アップロード」**をクリックします。 - **「概要」**ページで、
kube-api-via-nlb
サービスが作成されていることを確認します。 **「外部エンドポイント (External endpoints)」**列で、10.x.x.x
アドレスをメモします。 この IP アドレスは、YAML ファイルで指定したポートで Kubernetes マスターのプライベート・クラウド・サービス・エンドポイントを公開します。
-
パブリック・クラウド・サービス・エンドポイントも有効にした場合は、既にマスターにアクセスできます。
- クラスターの
kubeconfig
構成ファイルをダウンロードし、kubeconfig
の既存の~/.kube/config
に追加するか、KUBECONFIG
環境変数の最後のファイルに追加します。ibmcloud ks cluster config -c <cluster_name_or_ID>
- NLB およびエンドポイントを作成します。
kubectl apply -f kube-api-via-nlb.yaml
kube-api-via-nlb
NLB が作成されていることを確認します。 出力の10.x.x.x
EXTERNAL-IP** アドレス ** をメモします。 この IP アドレスは、YAML ファイルで指定したポートで Kubernetes マスターのプライベート・クラウド・サービス・エンドポイントを公開します。
この出力例では、Kubernetes マスターのプライベート・クラウド・サービス・エンドポイントの IP アドレスはkubectl get svc -o wide
10.186.92.42
です。NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR kube-api-via-nlb LoadBalancer 172.21.150.118 10.186.92.42 443:32235/TCP 10m <none> ...
- クラスターの
-
-
自分自身またはユーザーが
kubectl
コマンドを実行するクライアント・マシンで、NLB IP アドレスとプライベート・クラウド・サービス・エンドポイント URL を/etc/hosts
ファイルに追加します。 IP アドレスと URL にポートを含めたり、URL にhttps://
を含めたりしないでください。-
macOS と Linux のユーザーの場合:
sudo nano /etc/hosts
-
Windows ユーザーの場合:
notepad C:\Windows\System32\drivers\etc\hosts
ローカル・マシンの権限によっては、ホスト・ファイルを編集するためにノートパッドを管理者として実行しなければならない場合があります。
10.186.92.42 c1.private.us-east.containers.cloud.ibm.com
-
-
VPN または IBM Cloud Direct Link 接続を介してプライベート・ネットワークに接続していることを確認します。
-
クラスターの
kubeconfig
構成ファイルをダウンロードし、kubeconfig
の既存の~/.kube/config
に追加するか、KUBECONFIG
環境変数の最後のファイルに追加します。ibmcloud ks cluster config -c <cluster_name_or_ID> --endpoint private
-
kubectl
コマンドが正しく実行され、Kubernetesコンテキストがクラスターに設定されていることを確認します。kubectl config current-context
出力例
<cluster_name>/<cluster_ID>
仮想プライベート・エンドポイント・ゲートウェイを介した VPC クラスターへのアクセス
仮想プライベート・エンドポイント・ゲートウェイ は、VPC クラスター用に自動的に作成されます。 許可されたクラスター・ユーザーが IBM Cloud VPC VPN などを介してクラスターのデプロイ先と同じ VPC に接続されている場合、この仮想プライベート・エンドポイント・ゲートウェイを介して
Kubernetes マスターにアクセスできます。 この場合、 kubeconfig
はプライベートDNS名URL で構成されており、 IBM Cloud VPCでのみ解決できます。 IBM Cloud VPC プライベートDNSサーバーのアドレスは、 161.26.0.7
と 161.26.0.8
です。
-
IBM Cloud VPC VPN をセットアップし、VPN を介して VPC に接続します。
- VPC への クライアントからサイト または サイトからサイト への VPN を構成します。 例えば、VPN クライアントとのクライアントからサイトへの接続をセットアップすることを選択できます。
- クライアントからサイトへの VPN for IBM Cloud VPC サービスの場合は、 考慮事項 に記載されているように VPN サーバーをプロビジョンするときに IBM Cloud VPC プライベート DNS のサービス・アドレスを指定する必要があります。また、VPN
サーバーがプロビジョンされた後に、宛先
161.26.0.0/16
とアクションtranslate
を指定して VPN 経路を作成する必要があります。 - IBM Cloud VPC サービスのサイト間 VPN の場合は、 VPN ガイドを介したサービス・エンドポイントへのアクセス に従い、 IBM Cloud VPC プライベート DNS サービス・アドレスを構成します。
- IBM Cloud VPC VPN接続を通じてVPCに接続されていることを確認してください。
-
クラスターの
kubeconfig
構成ファイルをダウンロードし、kubeconfig
の既存の~/.kube/config
に追加するか、KUBECONFIG
環境変数の最後のファイルに追加します。ibmcloud ks cluster config -c <cluster_name_or_ID> --endpoint vpe
-
1.30 以降 VPN の
kube-vpegw-<clusterID>
にセキュリティー・グループ・ルールを追加します。 この例のリモート・リソースは、VPN のクライアント IP CIDR からのものです。ibmcloud ks cluster get -c CLUSTER
を実行すると、VPE ポートを確認できます。ibmcloud is sg-rulec kube-vpegw-<clusterID> inbound tcp --port-min 30829 --port-max 30829 --remote 192.168.192.0/22
-
Kubernetes コンテキストがクラスターに設定されていることを確認します。
kubectl config current-context
出力例
<cluster_name>/<cluster_ID>
kubectl version
出力例
Client Version: v1.25.3 Kustomize Version: v4.5.7 Server Version: v1.25.4+IKS
コンテキストベースの制限を使用したクラスタの保護
プライベート・サービスのエンドポイント許可リストはサポートされなくなりました。 プライベート・サービス・エンドポイントの許可リストを、できるだけ早くコンテキスト・ベースの制限に移行する。 具体的な移行手順については、 プライベート・サービス・エンドポイントの許可リストからコンテキスト・ベースの制限(CBR)への移行を 参照してください。
コンテキストベースの制限(CBR)ルールを使用して、パブリックおよびプライベートサービスのエンドポイントへのアクセスを制御します。
IBM Cloud IAMを通じてユーザーにクラスタへのアクセスを許可した 後、クラスタのパブリックおよびプライベート・サービス・エンドポイントにCBRルールを作成することで、二次的なセキュリティ・レイヤーを追加できます。 CBRルール内のサブネットから発信されたクラスタ・マスタへの許可された要求のみが許可されます。
クラスタが属するVPCとは異なるVPCからのリクエストを許可する場合は、そのVPCのクラウド・サービス・エンドポイントIPアドレスをCBRルールに含める必要があります。
例えば、クラスターのプライベート・クラウド・サービス・エンドポイントにアクセスするには、VPN または IBM Cloud を介して IBM Cloud Direct Link クラシック・ネットワークまたは VPC ネットワークに接続する必要があります。 VPNまたは Direct Link トンネルのサブネットだけをCBRルールに指定して、組織内の許可されたユーザーだけがそのサブネットからプライベート・クラウド・サービスのエンドポイントにアクセスできるようにすることができます。
パブリックCBRルール(クラスタにパブリック・サービス・エンドポイントがある場合)は、承認が取り消された後にユーザがクラスタにアクセスするのを防ぐのにも役立ちます。 ユーザーが組織を退職したら、そのユーザーにクラスターへのアクセス権限を付与する IBM Cloud IAM 権限を削除します。 しかし、ユーザーがクラスタの管理用kubeconfigファイルをコピーし、そのクラスタへのアクセス権を与えている可能性があります。 組織が所有する既知のパブリック・サブネットからのクラスタ・マスタへのアクセスのみを許可するパブリックCBRルールがある場合、別のパブリックIPアドレスからのユーザのアクセス試行はブロックされます。
ワーカー・ノードのサブネットは、バックエンドのCBR実装(CBRルール/ゾーンではなく)に自動的に追加および削除されるため、ワーカー・ノードは常にクラスタ・マスタにアクセスでき、ユーザーは自分のCBRルールにこれらを特別に追加する必要はありません。
CBRルールによるクラスタの保護の詳細については、 コンテキスト・ベースの制限によるクラスタ・リソースの保護 および コンテキスト・ベースの制限のシナリオ 例を参照してください