[解決済み] イングレスとロードバランサーの比較
質問
KubernetesのIngressとLoad Balancerの役割について、かなり混乱しています。
私の理解では、Ingressはインターネットから入ってくるトラフィックをクラスタ内で動作しているサービスにマッピングするために使用されます。
ロードバランサーの役割は、トラフィックをホストに転送することです。その点で、イングレスはロードバランサーとどう違うのでしょうか?また、Amazon ELBやALBと比較して、kubernetes内のロードバランサーのコンセプトは何でしょうか?
解決方法は?
ロードバランサーです。 kubernetes LoadBalancerサービスは、あなたのkubernetesクラスタ内ではなく、他の場所に存在する外部のロードバランサーを指すサービスです。これらは、あなたのPodが外部ルーティング可能であることを前提に、あなたのPodと連携することができます。GoogleとAWSはこの機能をネイティブで提供しています。Amazonに関しては、これはELBに直接対応し、AWSで実行されているkubernetesは、デプロイされた各ロードバランササービスに対してELBインスタンスを自動的にプロビジョニングし、設定することができます。
イングレス イングレスとは、実際にはルールのセットを、それをリッスンしているコントローラに渡すだけのものです。たくさんのイングレスルールをデプロイすることはできますが、それを処理できるコントローラがなければ何も起こりません。LoadBalancer サービスは、そうするように設定されていれば、イングレスルールをリッスンすることができます。
を作成することもできます。 ノードポート このサービスは、クラスタの外部にルーティング可能な IP を持ちますが、クラスタ内に存在するポッドを指します。これは、Ingress Controllerになる可能性があります。
Ingress Controllerは、単にIngressルールを解釈するように設定されたポッドです。kubernetesがサポートする最も一般的なIngress Controllerの1つがnginxです。Amazonで言えば、ALB が使用できます。 をイングレスコントローラーとして使用します。
一例として これ nginx コントローラは、定義した ingress ルールを取り込んで nginx.conf ファイルに変換し、それをロードしてそのポッドで起動することが可能です。
例えば、次のようにingressを定義したとします。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
ingress.kubernetes.io/rewrite-target: /
name: web-ingress
spec:
rules:
- host: kubernetes.foo.bar
http:
paths:
- backend:
serviceName: appsvc
servicePort: 80
path: /app
次に、nginx コントローラ ポッドを検査すると、以下のルールが
/etc/nginx.conf
:
server {
server_name kubernetes.foo.bar;
listen 80;
listen [::]:80;
set $proxy_upstream_name "-";
location ~* ^/web2\/?(?<baseuri>.*) {
set $proxy_upstream_name "apps-web2svc-8080";
port_in_redirect off;
client_max_body_size "1m";
proxy_set_header Host $best_http_host;
# Pass the extracted client certificate to the backend
# Allow websocket connections
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Real-IP $the_real_ip;
proxy_set_header X-Forwarded-For $the_x_forwarded_for;
proxy_set_header X-Forwarded-Host $best_http_host;
proxy_set_header X-Forwarded-Port $pass_port;
proxy_set_header X-Forwarded-Proto $pass_access_scheme;
proxy_set_header X-Original-URI $request_uri;
proxy_set_header X-Scheme $pass_access_scheme;
# mitigate HTTPoxy Vulnerability
# https://www.nginx.com/blog/mitigating-the-httpoxy-vulnerability-with-nginx/
proxy_set_header Proxy "";
# Custom headers
proxy_connect_timeout 5s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
proxy_redirect off;
proxy_buffering off;
proxy_buffer_size "4k";
proxy_buffers 4 "4k";
proxy_http_version 1.1;
proxy_cookie_domain off;
proxy_cookie_path off;
rewrite /app/(.*) /$1 break;
rewrite /app / break;
proxy_pass http://apps-appsvc-8080;
}
Nginxは以下のようなルートを作成しました。
http://kubernetes.foo.bar/app
を指し示すために、サービス
appsvc
をクラスタ内で実行します。
以下は 例 nginx ingress controller を使って kubernetes cluster を実装する方法です。参考になれば幸いです。
関連
-
[解決済み] Kubernetes ReplicaFailure FailedCreate でもイベントなし
-
kubenetes: ポッドにバインドされていないPersistentVolumeClaimsがあります。
-
Minikubeを使ったwindows10へのkubernetesのインストール
-
[解決済み] PodがTerminatingステータスで立ち往生している
-
[解決済み] Helmを以前のリリースにロールバックする
-
[解決済み] kubernetesのデプロイメントで失敗したPodを再起動する方法
-
[解決済み] KubernetesのClusterIP、NodePort、LoadBalancerのサービスタイプの違いとは?
-
[解決済み】すべてのkubernetesネームスペースのすべてのPodを削除するコマンド
-
[解決済み】gcloudとminikubeの間でkubectlのクラスタを切り替える方法
-
[解決済み] 別のネームスペースにあるサービス
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Kubernetesです。kubectl configからクラスタとコンテキストを削除するにはどうすればいいですか?
-
kubenetes: ポッドにバインドされていないPersistentVolumeClaimsがあります。
-
Kubernetesジョブコントローラーのソースコード解析
-
[解決済み] PodがTerminatingステータスで立ち往生している
-
[解決済み] kubeadm init は kubelet が実行中または健全でないことを表示します。
-
[解決済み] kubernetesのdeployment yamlを変更せずにPodをローリング再起動する方法は?
-
[解決済み] Kubectl アップデート configMap
-
[解決済み] kubernetesのPodが "CrashLoopBackOff "でクラッシュし続けるのですが、ログが見つかりません。
-
[解決済み】KubernetesのPodを削除すると再作成される。
-
[解決済み] 別のネームスペースにあるサービス