2017-04-05 56 views
1

我嘗試編寫一個模板,列出我的服務的名稱以及它們的外部端點+端口。但是,我沒有找到任何示例或文檔說明如何從數組中選擇元素,在這種情況下,ports數組中的元素爲portKubernetes 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:找不到匹配項:-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

會說爲你工作?

kubectl得到服務-o =定製列= NAME:.metadata.name,IP:.spec.clusterIP,PORT:.spec.ports [0] .targetPort

+0

嘗試過,但端口[0]不起作用。 – nik

+1

這就是它如何回到我這樣: kubectl獲取服務-o =自定義列=名稱:.metadata.name,IP:.spec.clusterIP,端口:.. spec..targetPort 名稱IP端口 kubernetes 10.96.0.1 443 nginx 10.100.136.114 80 節點10.100.162.143 2368 這就是你想要的嗎? –

+0

好的,很好,所以使用一個額外的點。如何仍然不知道如何使用列出的第x個端口。我很想連接列。 – nik