はじめに
今回は、ラズパイに対してインターネットを介してアクセスできるようにします。
また、IP制限をして、自分のPCからだけアクセスできるようにして、公開できるところまで仕上げてから、IP制限を外してインターネット公開してみる事にします。
PC⇒ラズパイのアクセスの間にCloudflareを置きます。
実装
今回の実装は以下のサイトを参考にしています。
ラズパイでWebサーバーを構築し独自ドメインで外部公開する方法
ドメイン名を作成し、Cloudflareの登録まではこのサイトで対応可能でした。(Cloudflareの登録までの流れは割愛します)
ただし、おうちk8sの環境ではk8s上にサービスが動いている形になります。
ですので、k8s環境に合わせた設定をしていく必要があります。
k8s環境側の設定
まずはsecretを作成しておきます。
以下の<token>のところはトンネルIDでこのjsonファイルは/home/ubuntu/.cloudflaredに作成されたjsonファイルを指しています。jsonファイル名を確認したら、このトンネルIDが分かります。
$ kubectl create secret generic config-json-file-secret -n kong --from-file=<token>.json
$ kubectl create secret generic cert-pem-file-secret -n kong --from-file=cert.pem
$ kubectl create secret generic credentials-json-file-secret -n kong --from-file=credentials.jsonk8s環境に合わせた設定をしていく際に、Cloudflareのhelmチャートが必要になります。
今回はKongと一緒に使用するという前提のもと、helmfile.yamlは以下のようになります。
repositories:
- name: kong
url: https://charts.konghq.com
- name: community-charts
url: https://community-charts.github.io/helm-charts
releases:
- name: kong
namespace: kong
version: 0.21.0
chart: kong/ingress
- name: community-charts
namespace: kong
chart: community-charts/cloudflared
version: 2.2.4
values:
- cloudflared-values.yamlcloudflared-values.yamlは以下のようになります。
tunnelConfig:
name: raspi
tunnelSecrets:
existingConfigJsonFileSecret:
name: credentials-json-file-secret
existingPemFileSecret:
name: cert-pem-file-secret
ingress:
- hostname: ref-voice.cospa-tank.com
service: http://kong-gateway-proxy.kong.svc.cluster.local:80
- service: http_status:404ingressの一つ目のservieにはkongのserviceを指定します。
アクセスip制限
アクセスのIP制限はCloudflareで設定します。
「Security」→「Security rules」で「Create rule」を押してルールを作成します。

「custom rule」画面で、
- Fieldを「IP Source Address」
- Operatorを「is not in list」
- Valueを「my_list」
と選択します。
これで、指定したリストにあるIPアドレス以外のアクセスははじくことになります。
リストはManage listsから設定できます。
こちらに自分のPCのGIPを設定します。
自分のGIPを調べるには、https://ifconfig.me/ にアクセスするとわかります。
アクセス確認
対象となっていないIPのPCからドメインにGIPをアクセスすると以下のようにはじかれるようになります。

登録しているIPだとアクセスができます。
最後に
実際に接続できることが確認できると感動しますね。
