2017-08-21 24 views
1

私は、セットアップ、次の設定を使用してNodePortサービスました:ので、どのように私は今、サービスにアクセスできるかどうkubernetes NodePortを使って外部からどのように外部アクセスできますか?

ワードプレス-service.yaml

apiVersion: v1 
kind: Service 
metadata: 
    labels: 
    app: wordpress 
    name: wordpress 
spec: 
    type: NodePort 
    ports: 
    - port: 80 
     targetPort: 80 
     protocol: TCP 
    selector: 
    app: wordpress 

は、外部サービスにアクセスするのに十分な本です?どのような詳細が必要ですか - どのようにノードIPを決定するのですか?

+0

これはうまくいくはずです。 'kubectl get svc' wordpressを実行すると、nodePort番号が表示されます。次に、NodeIPでサービスにアクセスできます。NodePort – sfgroups

答えて

1

をロードバランサのタイプのサービスに精通取得し、入/ IngressController示唆しています。ノードがKubernetesクラスタの外部から到達可能な場合は、nodeIP:nodePortでサービスにアクセスできるはずです。

特定のノードのnodeIPを確認するには、kubectl get no <node> -o yamlまたはkubectl describe no <node>のいずれかを使用できます。 status.Addressesフィールドに興味があります。通常、HostName,ExternalIPInternalIPなどのフィールドが表示されます。

サービスのnodePortを確認するには、kubectl get svc wordpress -o yamlまたはkubectl describe svc wordpressのいずれかを使用できます。 spec.ports.nodePortが必要なポートです。 GCEのKubernetesについては

2

このように定義されたサービスは、高いポート番号を取得し、そのポート上のすべてのクラスタノード(おそらく3xxxxなど)に公開されます。クラスタがどのようにプロビジョニングされているかについて適切な知識がなければ、残りの部分を伝えるのは難しいですkubectl get nodesはあなたのノードに関する知識を提供するはずです。

サービスを外界に公開したいと思っていますが、長い目で見れば、私はポートあなたのサービスにすることをあなたはクラスタの意志プロキシタイプNodeIPとしてすべてのノードをサービスを定義する場合

+0

はい外部からアクセスしたいです。残念ながら、これはLoadBalancerサービスでは動作しません。 –

+0

LBサービスではなぜ機能しないのですか?私の "エンドゲーム"のアプローチは、LBサービスタイプで世界に公開されているIngress Controllerを導入することです(通常は自分のFQDNをCNAMEターゲットとして使用して、自分の持つCNAMEターゲットとして使用できます)。あなたのクラスタ上で、IngressControllerのLBサービスで到達することができます –

+0

私は、LoadBalancerの代わりにNodePortが必要なユースケースを意味しました。 –

1

我々は型NodePortのサービスに関する同じ質問があった:どのように我々は我々自身のホストからのノード・ポート・サービスにアクセスできますか?

@ ivan.simの回答(nodeIp:nodePort)はマークされていますが、VPCネットワーク上のファイアウォールの入力(Googleクラウドへの着信)トラフィックルールを追加しない限り、サービスにアクセスすることはできません上記のルールは危険であり、唯一の開発

中に使用する必要がありますあなたはどちらかGoogleクラウドコンソールを使用してノード・ポートを見つけることができるか、実行して、ホストが

enter image description here あなたの計算ノードにアクセスできるようにすることを可能にするためのコンソールその後kubectlコマンドを実行して、コンテナを持つポッドを実行しているノードを見つけます。すなわちkubectl get pods , kubectl describe pod your-pod-name, kubectl describe node node-that-runs-you-pod .status。アドレスは、あなたのExternalIP

は我々だけlabel/selectorを使用してポッドに私たちのコンテナを実行しているノードのIPおよびコマンドのいくつかの行を抽出することができればそれは素晴らしいことだ持っているので、ここで私たちがやったことで、この場合には、当社のセレクタはapp: your-labelです:

$ nodename=$(kubectl get pods -o jsonpath='{.items[?(@.metadata.labels.app=="your-label")].spec.nodeName}') 

$ nodeIp=$(kubectl get nodes -o jsonpath='{.items[?(@.metadata.name=="'$(echo $nodename)'")].status.addresses[?(@.type=="ExternalIP")].address}') 

$ echo nodeIp 

予告json path

あなたは確かとしてラベル/セレクターを取るスクリプトにこれを回すことができる:私たちはJSONパスの詳細は、参照のために、我々は必要な情報を抽出するために、JSONのパスを使用入力dはコンテナを実行しているノードの外部IPを出力します。

$ kubectl get services 

PORT(S)列の下にあなたがtagetPortのようなものが表示されます:nodePortをちょうど入力しnodeportを取得するには

。このノードポートはあなたが望むものです。

nodeIp:nodePort 
関連する問題