はじめに
IBM Cloud Kubernetes Serviceではパブリック・サービス・エンドポイントとプライベート・サービス・エンドポイントがありますが、後者は特定ユーザー専用のプライベートVLAN経由でアクセスするためセキュリティを考慮した環境にて利用されます。が、このプライベート側のIPにVPNで繋ぎに行く場合、名前解決を手動で行う必要があるのでその流れを記載しました。
環境情報
$ ibmcloud --version ... version 0.22.0...
$ bash --version GNU bash, バージョン 4.4.12(3)-release (x86_64-unknown-cygwin)
事前準備
ibmcloud ks
を利用するために以下で必要なモジュールをインストールします。
$ ibmcloud plugin install kubernetes-service リポジトリー 'IBM Cloud' から 'kubernetes-service' を検索しています... プラグイン 'container-service/kubernetes-service 1.0.171' がリポジトリー 'IBM Cloud' 内で見つかりました ... C:\Program Files\IBM\Cloud\bin\ibmcloud.exe plugin show container-service' を使用して詳細を表示してください。
また、該当のapi-serverにアクセスを行うために認証が期限切れとなっている場合は認証情報を取りに行きます。
$ ibmcloud login --sso ... One Time Code > 認証中です... OK
接続情報を取得する
以下構文を利用して作成済のCluster情報を取りに行きます。
ks,cs,oc cluster get
クラスターの詳細を表示します。
まずは取得できるクラスター情報を以下コマンドで確認し、クラスターの名前を控えたら
$ ibmcloud ks clusters ... 名前 ID 状態 作成 ワーカー ロケーション バージョン リソース グループ名 プロバイダー hoge-cluster ...
同クラスター名を引数に以下のようにクラスターの詳細情報が取得可能です。
$ ibmcloud ks cluster get --cluster hoge-cluster ... クラスター hoge-cluster を取得中... OK ... 名前: hoge-cluster ID: xxxxxxxxxx ... パブリック・サービス・エンドポイント URL: - プライベート・サービス・エンドポイント URL: <HOSTNAME:PORT> ...
引数にIDを入力して接続に必要な情報をconfigに追記します。
$ ibmcloud ks cluster config --cluster xxxxxxxxxx OK xxxxxxxxxx の構成は正常にダウンロードされました。 xxxxxxxxxx のコンテキストを現在の kubeconfig ファイルに追加しました。
自動的にコンテキストが切り替わります。
$ kubectl config get-contexts CURRENT NAME CLUSTER AUTHINFO NAMESPACE * hoge-cluster/xxxxxxxxxxxxx ... default docker-desktop docker-desktop docker-desktop
ただし、冒頭で述べたようにこの状態では以下のようなエラーとなります。
$ kubectl cluster-info To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. Unable to connect to the server: dial tcp <IP>: i/o timeout
というのも.kube/config
の実体を見るとサーバの宛先にドメインが格納されているも
apiVersion: v1 clusters: - cluster: certificate-authority: C:\Users\xx\.bluemix\plugins\container-service\clusters\..xx.pem server: <HOSTNAME:PORT> name: xx ...
同ドメインはパブリック側の宛先となっているからです。
$ nslookup <HOSTNAME> ... 名前: <HOSTNAME> Addresses: PUBLIC_IP
プライベートサービスエンドポイントの実IPを確認する
同クラスターに展開されている”kube-api-via-nlb”というロードバランサのIPを確認します。
default kube-api-via-nlb LoadBalancer xx xx ..:../TCP
ちなみにこのIPはWoerkerNodeが属するVLANのPortableIPから割り当てられます
後は同IPとホスト名を紐付けるようにhostsに登録すれば、指定したExternal EndpointsのIPアドレス向けにpingが飛ぶようになり
$ ping <HOSTNAME> <HOSTNAME> [PRIVATE_IP]に ping を送信しています
ここまでくれば該当のクラスターに正常に接続ができています。
$ kubectl cluster-info Kubernetes master is running at xxxxxx CoreDNS is running at ... kubernetes-dashboard is running at ... Metrics-server is running at ... NodeLocalDNS is running at ... To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
終わりに
巷のサイトでは以下のステップで接続できるように書かれていますが、プライベートIPに向けて接続する場合はhostsに追記が必要です。
ibmcloud login -a cloud.ibm.com -r jp-tok -g xxx ibmcloud ks cluster config --cluster xxxxxxxx
以上、ご参考になれば幸いです。