2017-04-05 14 views
1

私は自分のサービスとその外部エンドポイント+ポートの名前をリストするためにテンプレートを書きます。しかし、配列から要素を選択する方法の例や文書は見つかりません。この場合はports配列のportです。Kubernetes costum-columnsは配列から要素を選択します

私はこれまでということだ:より具体的な例を与えるために

kubectl get service -o=custom-columns=NAME:.metadata.name,IP:.spec.clusterIP,PORT:.spec.ports 

、これは私の実行中のサービスです:

NAME     CLUSTER-IP  EXTERNAL-IP  PORT(S)        AGE 
kafka-manager   10.3.242.200 146.148.20.235 9000:32619/TCP      11h 
spark-master   10.3.242.209 104.199.21.235 7077:30588/TCP      11h 

私が取得したい:

NAME     EXTERNAL-ENDPOINT  
kafka-manager   146.148.20.225:9000 
spark-master   104.199.21.225:7077 

答えて

4

TLDR

リスト使用の要素の場合は、*を角括弧で囲みます。

だからあなたのクエリは次のようになります。

$ kubectl get service -n kube-system -o=custom-columns=NAME:.metadata.name,IP:.spec.clusterIP,PORT:.spec.ports[*].targetPort 
NAME     IP   PORT 
kube-dns    10.0.0.10 53,53 
kubernetes-dashboard 10.0.0.250 9090 

お知らせPORT:.spec.ports[*].targetPort*

詳細:

のでkubernetesはjson-path-exprheader後を期待しています。表現で遊んでたときに私が得たエラーは、次ました:

expected <header>:<json-path-expr> 

はそうちょうど *を使用し、インデックスを置くのではなく、リスト内のすべての要素を反復処理します。

他のさまざまなjson-path式は、hereで見つけることができます。

+0

これはbashとzshで動作します。 'zsh:no matches found:-o = custom-columns = NAME:.metadata.name、IP:.spec.clusterIP、PORT:.spec.ports [*]。targetPort' 。何か案は? – nik

+1

これは、カスタム列の式を引用する必要があるので、これはうまくいきます: 'kubectl get service -n kube-system -o = custom-columns =" NAME:.metadata.name、IP:.spec.clusterIP、PORT :.spec.ports [*]。targetPort "' – nik

0

だろうあなたのために働く?

サービス-o =カスタム列= NAME取得kubectl:.metadata.name、IP:.spec.clusterIP、PORT:.spec.portsを[0] .targetPort

+0

これも試しましたが、ポート[0]は機能しません。 – nik

+1

それは私にこのように戻ってきたのです: kubectl getサービス-o =カスタム列= NAME:.metadata.name、IP:.spec.clusterIP、PORT:.. spec..targetPort 名前IPポート kubernetes 10.96.0.1 443 nginx 10.100.136.114 80 node 10.100.162.143 2368 これはあなたが望むものですか? –

+0

よかったです。追加ドットを使用してください。リストされたx番目のポートを使用する方法はまだ分かりません。そして私は列を連結することが大好きです。 – nik

関連する問題