おうちK8sにカフェからMacで安全にリモート接続したい 


## はじめに
※QiitaEngineerFesta 2022 「remote.it を使って○○に接続してみた！」 に参加して記載しました。

タイトルにK8sとありますが、今回の内容にKubernetesはほとんど登場しません。
おうちのMacBookProに立てたローカルKubernetes環境に、カフェなどの外出先からリモート接続して使いたいというお話です。
今回はリモート接続にあたり、Remote.itというサービスを利用してみました。

## なぜ Mac から Mac にリモート接続したいのか？
自宅では、開発および諸々の技術検証のためにローカルのK8s環境「おうちK8s」を運用しています。
クラウドのマネージドK8sを利用することも可能ですが、プライベートな環境で色々と細かい部分に手を入られるローカル環境はやはり便利です。
母艦となるMacBook Proには、無償かつ簡単に本格的なKubernetes運用が可能な「Tanzu Community Edition」をkind方式（Kubernetes in Docker）で使用しています。
※Tanzu Community Editionのインストールは[こちら](https://tanzucommunityedition.io/)から

そして、カフェなど外で仕事をするときは、軽快な MacBook Air (M1)を持ち歩いています。
こちらにもローカルK8sを入れても良いのですが、コンテナ環境の二重管理は面倒ですし、できれば端末負荷をかけたくありません。そこで、カフェから自宅のMacにリモート接続したいニーズが出てきます。
そして何より、オサレなカフェでオサレMacbook Airでスマートにオサレ仕事するのは誰しもモチベーションが上がるものです。

## なぜ Remote.it を使うのか？
カフェからおうちにリモート接続するためには、フリーWi-Fiにつなげて、フリーのVPNサービスを使ったりするわけですが、ご存知の通りセキュリティ的には非常に不安があります。Remote.itを使えばVPN無しでセキュアに接続ができるというメリットがあるとのことで、早速試してみました。
ここまでの超簡単なイメージ図は以下の通りです。
![スクリーンショット 2022-07-09 1.45.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/5c811cf9-4207-0be1-b814-9235f4ac709c.png)


## Remote.it の始め方
以下の簡単なステップでリモート接続が可能になるようです。
1. Remote.it のアカウントを作成
2. 接続先のデバイスにエージェントをインストール
3. サービス（SSH, RDP等）の設定を追加
4. Remote.it を経由してリモート接続


#### 1. Remote.it のアカウントを作成
まずは、Remote.itのトップページの「はじめる」からアカウントを作成します。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/3cfa0c84-3d7f-c9ca-c1fc-a808939ba26f.png)

メールアドレスとパスワードを入力します。
<img width="60%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/14b9161b-6003-356f-fbc8-d9a57e505de3.png>

登録したメールアドレスに送付されるメールのリンクをクリックして認証します。
<img width="60%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/c8d8ea9c-4e43-508d-fd73-182c3f4c4248.png>

登録したメールアドレスとパスワードでサインインします。
Googleアカウントでのログオンも対応しているようです。
<img width="60%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/81c7b299-25ba-6afd-9489-77e52da5426e.png>

サインインするとこのようなページが表示されます。
![スクリーンショット 2022-07-08 17.03.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/acfec59f-ac7a-01eb-0f64-d4437fc30152.png)

ちなみに、初期サインイン時には、簡単なチュートリアルが実行されます。
AWS VPCに各種サービス（SSH, RDP, HTTP, SQL）でリモート接続する流れや雰囲気を簡単に掴むことができます。
![スクリーンショット 2022-07-08 17.09.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/06ba8ebb-1ea7-fcfa-9182-55609ab82dd4.png)


#### 2. 接続先のデバイスにエージェントをインストール
以下のページからエージェントをダウンロードします。

https://ja.remote.it/download?platform-list=mac

今回はMacのデスクトップアプリ版を試してみます。
![スクリーンショット 2022-07-08 17.44.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/18cb094b-c019-9980-6d05-5c322fac7ea4.png)


インストール手順は以下のドキュメントに従って進めます。

https://support.remote.it/hc/en-us/articles/360061697671

![スクリーンショット 2022-07-08 18.01.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/cbc49c3e-e3fa-9fea-026a-2bcbf596eaf7.png)
デスクトップアプリの起動後、「Settings」→「Set up this device」を選択することで、自身のマシンの登録作業が開始されます。
<img width="60%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/dfbe366f-7739-7eed-899d-31e038c307ec.png>

好きな名前（接続先を示す）を設定し、「REGISTER」を選択します。
![スクリーンショット 2022-07-08 18.07.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/a98adbf7-5ec4-2425-6e1f-6971b8304e6f.png)

無事に登録されました。
![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/5456ae58-7d1e-e1dc-cd69-8657af24ffa9.png)

#### 3. サービス（SSH, RDP等）の設定を追加
:::note info
Remote.itのサービス追加設定の前に、Mac自身の設定変更を実施します。
:::
「システム環境設定」→「共有」から、以下を有効にします。
- リモートログオン：SSHのため
- 画面共有：VNCのため
![スクリーンショット 2022-07-08 18.19.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/52428742-d37e-bf32-bdb7-24bc01c97b65.png)

Remote.it でデバイスを選択し、Serviceの「＋」マークからサービス設定を追加しています。
まずはSSHを追加します。
![スクリーンショット 2022-07-08 18.17.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/4b443735-a515-1d61-874e-a51de0042af6.png)
次にVNCを追加します。
![スクリーンショット 2022-07-08 18.28.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/187437e9-fbd3-764b-c79c-47370236a4b4.png)

ちなみに、このサービス追加ではデバイス側に有効になっているサービスを自動検出してくれるようです。
有効になっていないサービスを選ぶと「No service found running on port and host address.」と表示され追加することができません。


#### 4. Remote.it を経由してリモート接続
ここからは外に出てカフェ作業です。
持ち出したMacBook Airからリモート接続を行なっていきます。こちらのマシンにはRemote.itのエージェントも何も入れていません。
Wi-Fiに接続後、ブラウザ（Chrome）からRemote.itのサイトにログオンします。
※以降全てブラウザとMac標準アプリで事足りています。

デバイスに先ほど登録したサービスが表示されているので、「ADD TO NETWORK」を押してしばらくすると、このようにRemote.it接続用のアドレスが払い出されます。
「Connect」を選択して接続を実施します。
![スクリーンショット 2022-07-08 21.24.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/a311a940-d72e-3fec-42ca-bb2d616b8d97.png)

sshの接続許可を求めるダイアログが表示されるので、「許可」を選択します。
<img width="60%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/7a20201d-4f1c-50a8-2b7b-e31fd699d68a.png>

はい、簡単にリモートSSH接続ができました。
ここからはkubectlを使って、自宅と同じようにローカルKubernetesの操作が可能です。やったね！
![スクリーンショット 2022-07-08 21.32.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/f275e390-6cd8-65df-8043-20b28e5b4336.png)

VNCも同様に、「ADD TO NETWORK」を押してアドレスを払い出してから、そのアドレスをコピーします。
![スクリーンショット 2022-07-08 21.42.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/9a0003e5-81dd-8bc0-8310-8e538b8cb691.png)

MacのFinderから「移動」→「サーバへ接続」を選択し、vnc://〜の後ろにコピーしたアドレスをペーストして接続を実行します。
![スクリーンショット 2022-07-08 21.49.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/065046f7-8393-d8da-8afc-280ce299dd96.png)

VNCも問題なく接続できました。
特にネットワークの遅延なども感じることなく、スムーズに操作が可能です。
![スクリーンショット 2022-07-08 21.47.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/8825e58f-d020-9045-8cbc-a380eeb4ef41.png)


## デバイスステータスのSlack通知設定
リモート接続で考慮が必要な点といえば、接続先デバイスの死活監視です。
Slack連携の機能でデバイスのオンライン/オフラインステータスを通知することが可能なようなので、せっかくなので設定してみます。

Webhookに対応しているため、Slack APIから設定していきます。
「Create an App」を選択します。
![スクリーンショット 2022-07-08 22.58.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/dadfef1e-aaca-1af4-a419-66b578606b7c.png)

「From scratch」を選択します。
<img width="80%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/c90c3883-025e-decd-b534-eafe116d04a1.png>

適当なApp Nameを記入し、自身のSlack Workspaceと連携させてから「Create App」を選択します。
<img width="80%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/6a7a580a-5cee-b3fa-99ba-e2b369d87b05.png>

Slack Appの設定をしていきます。
「Incoming Webhooks」を選択します。
<img width="80%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/583ec8de-b3a5-daea-9476-ccf12a2ff34c.png>

「Activate Incoming Webhooks」をOnにして、Webhookを有効化します。
<img width="80%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/e1fc3bf6-ab7f-c959-62d9-bfdba7a21755.png>

少し下の方にスクロールして、「Add New Webhook to Workspace」というボタンを選択します。
<img width="80%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/2f5dade4-b047-5dce-025f-cbf7308bc2cd.png>

Slack Appが連携するチャンネルを設定し、「許可する」を選択します。
ここで設定したチャンネルにRemote.itからのデバイスステータスの通知が届きます。
<img width="60%" src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/dbe60448-d6bf-ee9e-52a4-63c15bc17f22.png>

そうすると元の画面にWebhook用のURLが作成されますので、これをコピーします。
![スクリーンショット 2022-07-08 23.13.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/c97d3c25-e55a-9b21-8045-c4963ddcba8a.png)

Remote.itの管理画面に戻ります。
「Settings」→「Notifications」から「Webhook」のトグルを有効化します。
URL ENDPOINTに先ほどコピーしたURLをペーストして「SAVE」を選択します。
これで設定は完了です。
![スクリーンショット 2022-07-08 23.13.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/166579bd-75b6-ccc3-773a-844b0705d6c6.png)

通知テストのため、接続先デバイスのネットワークを切断してしばらく待ってみました・・・。
5分くらいするとオフラインになった旨のメッセージが届きます。
ネットワークが復活すると、こちらもメッセージを無事に受信しました。
これでどこでも通知が受け取れるので安心です。
![04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733582/1263f80b-41d0-35cc-8f76-b45827c7c65f.png)


## まとめ
今回は、非常にシンプルなユースケースとして、Macへのリモートコンソール接続をご紹介しました。
自宅に母艦のMacやWindowsを置いて、カフェやコワーキングスペースからリモート接続するようなケースで、簡単かつ安全に接続することが可能なRemote.itは、個人利用であれば5台までフリーなこともあり、便利に使えるのではないでしょうか。