无论如何要获得kubernetes集群的外部端口

kev*_*vin 21 kubernetes kubectl

我在kubernetes集群中的所有节点上的外部端口上公开了一项服务:root @ ubuntu:/ home #kubectl create -f nginx-service.yaml您已在集群中所有节点上的外部端口上公开了您的服务.如果要将此服务公开给外部Internet,则可能需要为服务端口(tcp:30002)设置防火墙规则以提供流量.

有关详细信息,请参阅http://releases.k8s.io/release-1.2/docs/user-guide/services-firewalls.md.服务"nginx-service"创建root @ ubuntu:/ home#

那么,无论如何都要获得kubernetes集群的外部端口?

Tim*_*kin 31

kubectl get svc --all-namespaces -o go-template='{{range .items}}{{range.spec.ports}}{{if .nodePort}}{{.nodePort}}{{"\n"}}{{end}}{{end}}{{end}}'

这将获得所有命名空间中的所有服务,并且基本上完成:"对于每个服务,对于每个端口,如果定义了nodePort,则打印nodePort".

  • `kubectl get svc --all-namespaces -o go-template ='{{range .items}} {{range.spec.ports}} {{if .nodePort}} {{.nodePort}} {{.}} {{"\n"}} {{end}} {{end}} {{end}}'`这将提供有关列出的每个NodePort的更多信息. (3认同)

小智 17

kubectl get svc --all-namespaces -o go-template='{{range .items}}{{ $save := . }}{{range.spec.ports}}{{if .nodePort}}{{$save.metadata.namespace}}{{"/"}}{{$save.metadata.name}}{{" - "}}{{.name}}{{": "}}{{.nodePort}}{{"\n"}}{{end}}{{end}}{{end}}'
Run Code Online (Sandbox Code Playgroud)

这不仅获取使用的节点端口,还获取节点端口的名称、服务名称和服务的命名空间,格式如下:

<namespace>/<service name> - <nodeport name>: <nodeport>
Run Code Online (Sandbox Code Playgroud)


Rob*_*ley 8

如果您使用它查看服务kubectl describe service NAME,则应显示已分配的端口(在NodePort字段中)。


Van*_*uan 7

要获取有关服务端口的扩展信息:

kubectl describe service -A
Run Code Online (Sandbox Code Playgroud)

仅获取服务端点:

kubectl get endpoints -A
Run Code Online (Sandbox Code Playgroud)

要通过节点 IP 限制输出,您可以通过网络掩码 grep 或使用更复杂的脚本。


小智 6

我希望这个答案简短明了:

kubectl describe service --all-namespaces | grep -i nodeport
Run Code Online (Sandbox Code Playgroud)

但是,使用go模板是理想的选择,可用于提取更多细节。


Ich*_*hyo 5

...您可以使用JsonPath替代执行相同的解决方案...

显然,这些信息可以很容易地组合成一个方便的 bash 脚本,以满足任何特定的需求......

#!/bin/bash
#
# discoverService - extract the externally visible Node-IP and port for a specific Service in Kubernetes
#
KUBECTL=kubectl
#
if [[ $# < 2 || "$1" == "-h" ]]
    then
    echo discoverService SERVICENAME INTERNALPORT
    exit -1
fi
SERVICENAME=$1
INTERNALPORT=$2

EXTPORT=`${KUBECTL} get svc $SERVICENAME -o=jsonpath="{.spec.ports[?(@.port==${INTERNALPORT})].nodePort}"`

EXTIP=`${KUBECTL} get node -o=jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}'`


if [[ -z $EXTPORT ]]
    then
    echo -e "ERROR: service=$SERVICENAME internal-port=$INTERNALPORT not found.\n"
    exit -2
elif [[ -z $EXTIP ]]
    then
    echo -e "ERROR: could not retrieve underlying node IPs.\n"
    exit -2
fi
# Success...
echo $EXTIP:$EXTPORT
Run Code Online (Sandbox Code Playgroud)