プライベートKubernetesクラスタへの公共ルーティング
14218 ワード
Kubernetesの個人的なプロジェクトとハッキングのために、私は安価なマネージクラスタのファンであるDigital Ocean ). 月に約10ドルほどで、小さなシングルノードクラスタを回転させ、地面を走らせることができます.残念ながら、これらの小さなクラスタを使用すると、使用可能なRAMのギグと最高の単一のCPUを得るだけです.より多くの場合、価格はすぐに登る.
家では、私は12 VCPURyzen !) そして、私が愛情を込めて命名したラムの48 g
一握りのオープンソースツールのおかげで、私はこの夢を現実にすることができます.With Inlets , Contour , KinD , and external-dns , 私は簡単に新しいクラスタをスピンし、それらを数秒以内に外部にルーティングできます.
上の図は、これらのコンポーネントのすべてがどのように機能するかを要約した図です.それは正直に実際よりも複雑に見えます.
このアーキテクチャでは、自宅で実行しているハードウェア上で動作するKubernetesクラスタを持っています.ホームルータの背後にあるNAT そして、どんなネットワーキングナンセンスホームISPがしているか.代表的に、このクラスタはルータの特別な構成なしで全く手に入らないでしょう.さらに、あなたはあなたのISPからダイナミックなIPアドレスを発行します.さらに、あなたがこれをすべて設定したとしても、あなたはおそらくあなたのホームネットワークに直接接続しているインターネットから乱暴を望みません.
代わりに、パブリックIPを使用して安価なクラウドVMを使用してエントリポイントとして機能することができます.前に述べたすべてのコンポーネントのおかげで、我々はこのVMから私たちのプライベートクラスタにトラフィックをトンネルできます.今、私はこれらの各コンポーネントが何をやっているかを掘るつもりです.また、どのように彼らは外の世界に簡単なアプリを公開するために使用することができますを示します.私がしようとしていないのは、それらをインストールしたり設定したりする方法について詳しく説明します.彼らはすべてのよく維持され、継続的に更新されるので、それの側面は最高の公式ドキュメントに残っている.
まず始めにInlets それは間違いなくこれのすべての最も重要な部分です.私たちは、私たちの内部のクラスタに、公的に到達可能な雲のインスタンス(私は$ 5ヶ月のデジタルオーシャンVMを使用します)からトンネル交通にそれを使用します.インレットopen-core ソフトウェアは、レイヤ4ルーティングまたはTLSの終了が必要な場合は、“Pro”バージョンを支払う必要があります.私のような趣味のユースケースの場合は、無料版が提供するもので行うことができます.具体的には、inlets-operator .
インレット演算子は、クラスタにインストールするKubernetes演算子です.それは継続的に新しい時計
フォローthis tutorial インレット演算子から始めましょう.
この1つは確かに少し“より良い”ということですインレットは、あなたのアプリに到達するために動作するパブリックIPアドレスを与える.しかしながら、生のIPアドレスはかなり扱いにくいです.その代わりに、あなたがドメインを便利にしたならば、あなたのドメインにそのIPを写像するためにDNSを構成することができます.私のクラスタのために、私は使用する傾向があります
プロジェクトを使用できますexternal-dns DNSを設定するには
外部DNSのインストールは、DNSプロバイダの使用にかなり依存します.フォローするsteps in the README あなたが使っている雲のために.デジタルオーシャンI followed these .
を使うIngress Controller インレットは絶対に必要ない.あなたは
イングルのコントローラを使用すると、単一のプロキシを公開することができますし、内部のすべてのアプリケーションには、プロキシのルートがあります.どんなイングル・コントローラもこの目的のために働くでしょうContour いくつかの理由から それはKubernetesのような雲ネイティブコンピューティング基盤(CNCF)プロジェクトです 用途Envoy proxy , スケールでテストされて、資源消費にかなり明るい 特使プロキシは、再設定を変更することができますので、バックエンドのアプリを追加し、削除するようにダウンタイムはありません これは、ボックスのTLSの終了のための優れたサポートをしています(これはインレットの無料版とのモットーポイントです-インレットProのTCPルーティングサポートを必要とするでしょう-しかし、一般的にこれは良いです)
フォローするGetting Started docs 迅速に輪郭を取得し、実行してください.輪郭は
私は親切、またはKubernetes in Docker , 私のクラスタを実行するには、それは超便利見つけるので.それが必要なのは
そのような、多くの他の有効なオプションがここにありますmicrok8s , minikube , または直接OS上でkubeadm .
インストールするにはquick start guide .
それで、どのように、これは一緒に働きますか?つのアプリを展開する観点から見てみましょう.
我々は展開することができます
さあ、殺してください
を作成することでこれを行うことができます
それで、すべてはちょうど起こりました?さて、前から図を見てみましょう.
輪郭は インレットオペレーターは、我々にAを持っているのを見ました インレットオペレーターは、雲VMと輪郭の使節に乗っている使節の間でトンネルを掘りました 輪郭から 輪郭鋸 The このRube Goldberg Machineは、我々のポッドに公的に届くことをもたらしました 何が素晴らしいですか
我々は今Kubernetesの私の好きな側面のいずれかを見る機会があった-どのように拡張可能です!いくつかのビルディングブロックを組み合わせることで、我々はすぐに
少なくとも、それはかなりクールだと思う.
乾杯!🐢
家では、私は12 VCPURyzen !) そして、私が愛情を込めて命名したラムの48 g
tomorrowlan
. デジタル海の同様の構成は、月におよそ240ドルを走らせます!私は個人的なプロジェクトをめちゃくちゃにしているとき、私は本当に弾力性や生産価値を気にしない.私が既存のハードウェアを使用するのは素晴らしいです、私がより広いインターネット上で他のものと一緒に構築したものを共有する能力を保持している間.一握りのオープンソースツールのおかげで、私はこの夢を現実にすることができます.With Inlets , Contour , KinD , and external-dns , 私は簡単に新しいクラスタをスピンし、それらを数秒以内に外部にルーティングできます.
コンポーネント
上の図は、これらのコンポーネントのすべてがどのように機能するかを要約した図です.それは正直に実際よりも複雑に見えます.
このアーキテクチャでは、自宅で実行しているハードウェア上で動作するKubernetesクラスタを持っています.ホームルータの背後にあるNAT そして、どんなネットワーキングナンセンスホームISPがしているか.代表的に、このクラスタはルータの特別な構成なしで全く手に入らないでしょう.さらに、あなたはあなたのISPからダイナミックなIPアドレスを発行します.さらに、あなたがこれをすべて設定したとしても、あなたはおそらくあなたのホームネットワークに直接接続しているインターネットから乱暴を望みません.
代わりに、パブリックIPを使用して安価なクラウドVMを使用してエントリポイントとして機能することができます.前に述べたすべてのコンポーネントのおかげで、我々はこのVMから私たちのプライベートクラスタにトラフィックをトンネルできます.今、私はこれらの各コンポーネントが何をやっているかを掘るつもりです.また、どのように彼らは外の世界に簡単なアプリを公開するために使用することができますを示します.私がしようとしていないのは、それらをインストールしたり設定したりする方法について詳しく説明します.彼らはすべてのよく維持され、継続的に更新されるので、それの側面は最高の公式ドキュメントに残っている.
インレット
まず始めにInlets それは間違いなくこれのすべての最も重要な部分です.私たちは、私たちの内部のクラスタに、公的に到達可能な雲のインスタンス(私は$ 5ヶ月のデジタルオーシャンVMを使用します)からトンネル交通にそれを使用します.インレットopen-core ソフトウェアは、レイヤ4ルーティングまたはTLSの終了が必要な場合は、“Pro”バージョンを支払う必要があります.私のような趣味のユースケースの場合は、無料版が提供するもので行うことができます.具体的には、inlets-operator .
インレット演算子は、クラスタにインストールするKubernetes演算子です.それは継続的に新しい時計
LoadBalancer
サービスと用途inlets あなたの選択の雲と公開IPを公開するためにそれが「出口ノード」VMと呼ぶものを提供することLoadBalancer
サービスこの場合、それはLoadBalancer
イントラレス制御装置のサービスインストール
フォローthis tutorial インレット演算子から始めましょう.
外部DNS
この1つは確かに少し“より良い”ということですインレットは、あなたのアプリに到達するために動作するパブリックIPアドレスを与える.しかしながら、生のIPアドレスはかなり扱いにくいです.その代わりに、あなたがドメインを便利にしたならば、あなたのドメインにそのIPを写像するためにDNSを構成することができます.私のクラスタのために、私は使用する傾向があります
*.k8s.downey.cloud
. これは一般的に手動のプロセスですが、それをする必要はありません!プロジェクトを使用できますexternal-dns DNSを設定するには
LoadBalancer
自動的にサービス!それはかなり滑らかです.あなたがしなければならないすべてはexternal-dns.alpha.kubernetes.io/hostname
とご希望のホスト名.それから、外部DNSコントローラは残りをして、あなたのためにあなたのDNSを構成します!私のinitノードとしてデジタルオーシャンVMを使用しているので、Digital OceanのクラウドDNSを設定するために外部DNSを設定します.インストール
外部DNSのインストールは、DNSプロバイダの使用にかなり依存します.フォローするsteps in the README あなたが使っている雲のために.デジタルオーシャンI followed these .
輪郭進入制御装置
を使うIngress Controller インレットは絶対に必要ない.あなたは
LoadBalancer
あなたが公開したいすべての単一のアプリケーションのためのサービス、およびインレットは幸いにそれらのサービスへのルートにVMSを作成します.しかし、そのアプローチでは、コストが迅速に追加されます.イングルのコントローラを使用すると、単一のプロキシを公開することができますし、内部のすべてのアプリケーションには、プロキシのルートがあります.どんなイングル・コントローラもこの目的のために働くでしょうContour いくつかの理由から
インストール
フォローするGetting Started docs 迅速に輪郭を取得し、実行してください.輪郭は
LoadBalancer
インレットが公開するサービスYAML.外部DNSでうまく動作するように、次のように使用します ytt
over 1このドメインに注釈を付ける#@ load("@ytt:overlay", "overlay")
#@overlay/match by=overlay.subset({"kind": "Service", "metadata":{"name": "envoy", "namespace": "projectcontour"}, "spec":{"type":"LoadBalancer"}}),expects=1
--------
metadata:
#@overlay/match missing_ok=True
annotations:
#@overlay/match missing_ok=True
#@overlay/merge
external-dns.alpha.kubernetes.io/hostname: "*.k8s.downey.cloud"
例として、インストールコマンドを微調整してytt
インラインインラインkubectl apply -f <(ytt -f https://projectcontour.io/quickstart/contour.yaml -f /tmp/external-dns-overlay.yaml --ignore-unknown-comments=true)
1 -あなたが聞いたことがないならば ytt
前に、チェックアウトをお勧めします.それはCarvel Kubernetesユーティリティのスイートで、私がコントロールしないYAMLを変えるための私の試みです.この輪郭のインストールのように.種類
私は親切、またはKubernetes in Docker , 私のクラスタを実行するには、それは超便利見つけるので.それが必要なのは
kind
CLIとDockerデーモンを実行している.彼らがちょうどDockerコンテナとして走っているとき、それは非常に速く回転して、クラスタを破壊します.そのような、多くの他の有効なオプションがここにありますmicrok8s , minikube , または直接OS上でkubeadm .
インストール
インストールするにはquick start guide .
デモ
それで、どのように、これは一緒に働きますか?つのアプリを展開する観点から見てみましょう.
httpbin
.我々は展開することができます
httpbin
以下のクラスタにDeployment
:apiVersion: apps/v1
kind: Deployment
metadata:
name: httpbin
spec:
replicas: 2
selector:
matchLabels:
app: httpbin
template:
metadata:
labels:
app: httpbin
spec:
containers:
- image: docker.io/kennethreitz/httpbin
imagePullPolicy: IfNotPresent
name: httpbin
ports:
- containerPort: 80
次に、それを簡単にクラスタ内のClusterIP
サービスapiVersion: v1
kind: Service
metadata:
name: httpbin
labels:
app: httpbin
spec:
ports:
- name: http
port: 80
targetPort: 80
selector:
app: httpbin
それはクールです.我々は今ではそれに達することができますhttpbin.default.svc.cluster.local
ポート80のクラスタの中から.この次のステップは必要ありませんが、楽しみのために我々はまた、ローカルからそれを使用してkubectl port-forward
コマンド.tim@tomorrowlan:~/workspace/k8s-yaml$ kubectl port-forward service/httpbin 8000:80
Forwarding from 127.0.0.1:8000 -> 80
Forwarding from [::1]:8000 -> 80
それを実行するだけでcurl localhost:8000
そして、httpbin
ポッド.これまではとても良い!さあ、殺してください
kubectl port-forward
. それは他の皆のために到達可能にする時間です.を作成することでこれを行うことができます
Ingress
輪郭を知るリソースhttpbin
サービスとどのようなトラフィックをルーティングする必要があります.apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: httpbin
spec:
rules:
- host: httpbin.k8s.downey.cloud
http:
paths:
- backend:
serviceName: httpbin
servicePort: 80
それだ!我々は現在アクセスすることができますhttpbin
インターネット上のアプリhttp://httpbin.k8s.downey.cloud ! 😌回収する
それで、すべてはちょうど起こりました?さて、前から図を見てみましょう.
LoadBalancer
使節代理人を指すサービスexternal-dns.alpha.kubernetes.io/hostname: "*.k8s.downey.cloud"
LoadBalancer
IPを持たないサービスで、パブリックIPでクラウドVMを提供しましたLoadBalancer
サービスがexternal-dns.alpha.kubernetes.io/hostname
注釈、外部のDNS設定のDNSは、サービスのパブリックIPIngress
我々が作成したリソースhttpbin
そして、直接の要請への使節を構成しましたhttpbin.k8s.downey.cloud
にhttpbin
ClusterIP
サービスhttpbin
ClusterIP
サービスは、トラフィックをhttpbin
ポッドhttpbin
アプリケーション自体は実際には使用していない別のDeployment
, Service
, and Ingress
管理されたKubernetesクラスタで!舞台裏で起こったことはたくさんありました、しかし、一旦それがセットアップされるならば、それは基本的にちょうど働きます.我々は今Kubernetesの私の好きな側面のいずれかを見る機会があった-どのように拡張可能です!いくつかのビルディングブロックを組み合わせることで、我々はすぐに
LoadBalancer
個人用devマシン上の管理Kubernetesクラスタのサービス経験私は私の処分で12 VCPUと48ギガバイトのRAMを持っているので、私は些細な作業負荷を開発するのに十分なリソースを持っていると私はまだ最終的な結果をオンラインでデモすることができます.すべての月の5ドルのためには、出口出口ノードを実行するコストです.少なくとも、それはかなりクールだと思う.
乾杯!🐢
Reference
この問題について(プライベートKubernetesクラスタへの公共ルーティング), 我々は、より多くの情報をここで見つけました https://dev.to/downey/public-routing-to-a-private-kubernetes-cluster-ebnテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol