Kubernetesクラスタの外部からPodにアクセスする5つの方法
5865 ワード
【原文住所】https://blog.csdn.net/u013061106/article/details/79748511
Tue Nov 21, 2017
2100 Words|Read in about 5 Min
Tags: kubernetes
前のセクションでは、kubneretesクラスタへのアクセス方法について説明します.ここでは、主にkubenretesのPodとS erivceへのアクセス方法について説明します.以下のいくつかの方法が含まれています. hostNetwork hostPort NodePort LoadBalancer Ingress
Podを暴露するということは、実はサービスを暴露することと同じです.Podはサービスのbackendだからです.
hostNetwork: true
これはPodネットワークを直接定義する方法です.
Podで
ホストのすべてのネットワークインタフェースでアプリケーションにアクセスできます.ホストネットワークを使用するpodの定義の例を次に示します.
podが存在するホストの8086ポートにアクセスします.
204 No Contentの204リターンコードが表示され、正常にアクセスできることが示される.
注意このPodを起動するたびに異なるノードにスケジューリングされる可能性があり、すべての外部アクセスPodのIPも変化し、Podをスケジューリングする際にホスト上のポートと衝突するかどうかを考慮する必要があります.
したがって、hostNetwork:trueは、特定のホスト上の特定のポートを使用する特定のアプリケーションが必要であることを知っていない限り、一般的に使用されます.
このようなPodのネットワークモードには、ネットワークプラグインをPodにパッケージして各ホストに配置することができ、このようにしてホスト上のすべてのネットワークを制御することができる.
hostPort
これはPodネットワークを直接定義する方法です.
hostPortはコンテナのポートとスケジューリングされたノードのポートを直接ルーティングし,ユーザがホストホストのIPに加えてPodにアクセスできるようにした.
このようにすると、Podが再スケジューリングされたときにそのPodがスケジューリングされたホストが変動する可能性があるため、ユーザは自分でそのホストとの対応関係を維持しなければならない.
このネットワーク方式は、Nginx Ingress controllerとして使用することができる.外部トラフィックは、Kubenretes nodeノードの80および443ポートを通過する必要があります.
NodePort
NodePortはKubenretesで広く応用されているサービス暴露方式である.
Kubernetesのサービスはデフォルトで使用されているClusterIPというタイプで、このようなサービスはClusterIPを生成します.
このIPはクラスタ内でしかアクセスできないので,外部から直接サービスにアクセスできるようにするには,サービスtypeをNodePortに変更する必要がある.
また、サービスには、APIサーバのプロファイルで
クラスタ外ではKubernetesのいずれかのノードのIPに30000ポートを加えてサービスにアクセスできます.Kube-proxyは、トラフィックをround-robinでサービスの各Podに自動的に転送します.
このサービス・露出方式では、自分が望むアプリケーションの共通ポートを指定することはできませんが、クラスタにトラフィック・インタフェースとして逆エージェントを再配置することができます.
LoadBalancer
LoadBalancerはサービスでしか定義できません.AWS、Azure、CloudStack、GCEなど、パブリッククラウドが提供する負荷イコライザです.
サービスの表示:
内部では、19.97.121.42:8086などのサービスにアクセスするために、ClusterIPプラスポートを使用することができます.
外部では、次の2つの方法でサービスにアクセスできます.は、いずれかのノードのIPプラス30051ポートを使用して、このサービス にアクセスする.は
Ingress
Ingressはkubernetes 1.1リリース後に導入されたリソースタイプ.Ingressリソースを作成するには、Ingress controllerを導入する必要があります.Ingress controllerはプラグインとして提供されます.
Ingress controllerはKubernetesの上に配置されたDockerコンテナです.そのDockerミラーには、NginxやHAProxyのような負荷イコライザとコントローラデーモンプロセスが含まれています.
コントローラデーモンはKubernetesから必要なIngres構成を受信します.NginxまたはHAProxyプロファイルが生成され、変更が有効になるようにロード・バランサ・プロセスが再起動されます.
言い換えれば、Ingress controllerはKubernetesによって管理される負荷イコライザである.
Kubernetes Ingressは負荷バランサの典型的な特性を提供した:HTTPルーティング、粘性セッション、SSL終端、SSL直通、TCPとUDP負荷バランシングなど.
現在、すべてのIngress controllerがこれらの機能を実装しているわけではありません.具体的なIngress controllerドキュメントを表示する必要があります.
外部アクセスURLhttp://influxdb.kube.example.com/pingこのサービスにアクセスすると、エントリは80ポートで、Ingress controllerはバックエンドPodに直接トラフィックを転送し、kube-proxyの転送を必要とせず、LoadBalancer方式よりも効率的です.
まとめ
全体的にIngressは、Nginx、HAProxy、Traefikなど、非常に柔軟でますますメーカーのサポートを受けているサービス暴露方式であり、サービスデバッグ、特殊なアプリケーションの導入に適しているサービス暴露方式もあります.
リファレンス
Accessing Kubernetes Pods from Outside of the Cluster - alesnosek.com
Tue Nov 21, 2017
2100 Words|Read in about 5 Min
Tags: kubernetes
前のセクションでは、kubneretesクラスタへのアクセス方法について説明します.ここでは、主にkubenretesのPodとS erivceへのアクセス方法について説明します.以下のいくつかの方法が含まれています.
Podを暴露するということは、実はサービスを暴露することと同じです.Podはサービスのbackendだからです.
hostNetwork: true
これはPodネットワークを直接定義する方法です.
Podで
hostNetwork:true
構成を使用すると、このようなPodで実行されるアプリケーションはpodが起動したホストのネットワークインタフェースを直接見ることができます.ホストのすべてのネットワークインタフェースでアプリケーションにアクセスできます.ホストネットワークを使用するpodの定義の例を次に示します.
apiVersion: v1
kind: Pod
metadata:
name: influxdb
spec:
hostNetwork: true
containers:
- name: influxdb
image: influxdb
podが存在するホストの8086ポートにアクセスします.
curl -v http://$POD_IP:8086/ping
204 No Contentの204リターンコードが表示され、正常にアクセスできることが示される.
注意このPodを起動するたびに異なるノードにスケジューリングされる可能性があり、すべての外部アクセスPodのIPも変化し、Podをスケジューリングする際にホスト上のポートと衝突するかどうかを考慮する必要があります.
したがって、hostNetwork:trueは、特定のホスト上の特定のポートを使用する特定のアプリケーションが必要であることを知っていない限り、一般的に使用されます.
このようなPodのネットワークモードには、ネットワークプラグインをPodにパッケージして各ホストに配置することができ、このようにしてホスト上のすべてのネットワークを制御することができる.
hostPort
これはPodネットワークを直接定義する方法です.
hostPortはコンテナのポートとスケジューリングされたノードのポートを直接ルーティングし,ユーザがホストホストのIPに加えてPodにアクセスできるようにした.
apiVersion: v1
kind: Pod
metadata:
name: influxdb
spec:
containers:
- name: influxdb
image: influxdb
ports:
- containerPort: 8086
hostPort: 8086
このようにすると、Podが再スケジューリングされたときにそのPodがスケジューリングされたホストが変動する可能性があるため、ユーザは自分でそのホストとの対応関係を維持しなければならない.
このネットワーク方式は、Nginx Ingress controllerとして使用することができる.外部トラフィックは、Kubenretes nodeノードの80および443ポートを通過する必要があります.
NodePort
NodePortはKubenretesで広く応用されているサービス暴露方式である.
Kubernetesのサービスはデフォルトで使用されているClusterIPというタイプで、このようなサービスはClusterIPを生成します.
このIPはクラスタ内でしかアクセスできないので,外部から直接サービスにアクセスできるようにするには,サービスtypeをNodePortに変更する必要がある.
apiVersion: v1
kind: Pod
metadata:
name: influxdb
labels:
name: influxdb
spec:
containers:
- name: influxdb
image: influxdb
ports:
- containerPort: 8086
また、サービスには、APIサーバのプロファイルで
--service-node-port-range
で定義された30000-32767のNodePort値を指定することもできます.kind: Service
apiVersion: v1
metadata:
name: influxdb
spec:
type: NodePort
ports:
- port: 8086
nodePort: 30000
selector:
name: influxdb
クラスタ外ではKubernetesのいずれかのノードのIPに30000ポートを加えてサービスにアクセスできます.Kube-proxyは、トラフィックをround-robinでサービスの各Podに自動的に転送します.
このサービス・露出方式では、自分が望むアプリケーションの共通ポートを指定することはできませんが、クラスタにトラフィック・インタフェースとして逆エージェントを再配置することができます.
LoadBalancer
LoadBalancerはサービスでしか定義できません.AWS、Azure、CloudStack、GCEなど、パブリッククラウドが提供する負荷イコライザです.
kind: Service
apiVersion: v1
metadata:
name: influxdb
spec:
type: LoadBalancer
ports:
- port: 8086
selector:
name: influxdb
サービスの表示:
$ kubectl get svc influxdb
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
influxdb 10.97.121.42 10.13.242.236 8086:30051/TCP 39s
内部では、19.97.121.42:8086などのサービスにアクセスするために、ClusterIPプラスポートを使用することができます.
外部では、次の2つの方法でサービスにアクセスできます.
EXTERNAL-IP
を使用してアクセスします.これはVIPで、10.13.242.236:8086のようなクラウドベンダーが提供する負荷イコライザIPです.Ingress
Ingressはkubernetes 1.1リリース後に導入されたリソースタイプ.Ingressリソースを作成するには、Ingress controllerを導入する必要があります.Ingress controllerはプラグインとして提供されます.
Ingress controllerはKubernetesの上に配置されたDockerコンテナです.そのDockerミラーには、NginxやHAProxyのような負荷イコライザとコントローラデーモンプロセスが含まれています.
コントローラデーモンはKubernetesから必要なIngres構成を受信します.NginxまたはHAProxyプロファイルが生成され、変更が有効になるようにロード・バランサ・プロセスが再起動されます.
言い換えれば、Ingress controllerはKubernetesによって管理される負荷イコライザである.
Kubernetes Ingressは負荷バランサの典型的な特性を提供した:HTTPルーティング、粘性セッション、SSL終端、SSL直通、TCPとUDP負荷バランシングなど.
現在、すべてのIngress controllerがこれらの機能を実装しているわけではありません.具体的なIngress controllerドキュメントを表示する必要があります.
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: influxdb
spec:
rules:
- host: influxdb.kube.example.com
http:
paths:
- backend:
serviceName: influxdb
servicePort: 8086
外部アクセスURLhttp://influxdb.kube.example.com/pingこのサービスにアクセスすると、エントリは80ポートで、Ingress controllerはバックエンドPodに直接トラフィックを転送し、kube-proxyの転送を必要とせず、LoadBalancer方式よりも効率的です.
まとめ
全体的にIngressは、Nginx、HAProxy、Traefikなど、非常に柔軟でますますメーカーのサポートを受けているサービス暴露方式であり、サービスデバッグ、特殊なアプリケーションの導入に適しているサービス暴露方式もあります.
リファレンス
Accessing Kubernetes Pods from Outside of the Cluster - alesnosek.com