我在kubernetes中的所有节点上的外部端口上公开了一项服务 集群来自:
kubectl create -f nginx-service.yaml
您已在您的所有节点上的外部端口上公开您的服务 簇。如果您想将此服务公开给外部互联网,您可以 需要为服务端口(tcp:30002)设置防火墙规则以提供流量。
有关详细信息,请参阅http://releases.k8s.io/release-1.2/docs/user-guide/services-firewalls.md。 服务“nginx-service”创建。
有没有获得kubernetes集群的外部端口?
答案 0 :(得分:23)
kubectl get svc --all-namespaces -o go-template='{{range .items}}{{range.spec.ports}}{{if .nodePort}}{{.nodePort}}{{"\n"}}{{end}}{{end}}{{end}}'
这将获取所有命名空间中的所有服务,并且基本上完成:“对于每个服务,对于每个端口,如果定义了nodePort,则打印nodePort”。
答案 1 :(得分:7)
如果您view your service使用kubectl describe service NAME
,则应显示已分配的端口(在NodePort字段中)。
答案 2 :(得分:2)
...,您也可以使用JsonPath ...
执行相同的解决方案获取与内部端口 myservice
1234
的外部端口(“ nodePort”)
kubectl get svc myservice -o=jsonpath='{.spec.ports[?(@.port==1234)].nodePort}
获取群集基础节点的所有IP的列表
kubectl get node -o=jsonpath='{.items[*].status.addresses[?(@.type=="InternalIP")].address}'
显然,这些信息可以轻松地组合成方便的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
答案 3 :(得分:2)
要获取有关服务端口的扩展信息,请执行以下操作:
kubectl describe service -A
仅获取服务端点:
kubectl get endpoints -A
要按节点IP限制输出,可以通过网络掩码进行grep或使用更复杂的脚本。
答案 4 :(得分:1)
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}}'
这不仅会获取使用的节点端口,还会获取节点端口的名称、服务名称和服务名称空间,格式如下:
<namespace>/<service name> - <nodeport name>: <nodeport>
答案 5 :(得分:0)
我希望这个答案简短明了:
kubectl describe service --all-namespaces | grep -i nodeport
但是,使用go模板是理想的选择,可用于提取更多细节。
答案 6 :(得分:0)
对我来说缺少的部分是 minikube 的实际 IP 地址
---->$:kubectl describe service --all-namespaces | grep -i nodeport
Name: my-nodeport-service
Type: NodePort
NodePort: <unset> 30007/TCP
---->$:curl $(minikube ip):30007