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".
小智 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)
要获取有关服务端口的扩展信息:
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模板是理想的选择,可用于提取更多细节。
...您可以使用JsonPath替代执行相同的解决方案...
获取myservice
内部端口对应的外部端口(“nodePort”)1234
kubectl get svc myservice -o=jsonpath='{.spec.ports[?(@.port==1234)].nodePort}'
Run Code Online (Sandbox Code Playgroud)
在一行中获取集群底层节点的所有 IP 列表
kubectl get node -o=jsonpath='{.items[*].status.addresses[?(@.type=="InternalIP")].address}'
Run Code Online (Sandbox Code Playgroud)
显然,这些信息可以很容易地组合成一个方便的 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)
归档时间: |
|
查看次数: |
23404 次 |
最近记录: |