在K3s或任何Kubernetes集群中,查看开放的NodePort可以通过一系列命令来实现。以下是一些常用的方法:
方法1:使用 kubectl get services
你可以使用 kubectl get services
命令来查看所有Service的概览,并查看哪些Service配置了NodePort。
kubectl get svc -o wide -A
这将列出所有命名空间中的所有Service,并显示详细信息,包括NodePort。
方法2:使用 kubectl describe service
如果你知道某个Service的名称,可以使用 kubectl describe service
命令来查看该Service的详细信息,包括NodePort。
kubectl describe svc <service-name> -n <namespace>
例如:
kubectl describe svc my-service -n default
在输出中,你可以找到类似如下的部分:
Name: my-service
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=my-app
Type: NodePort
IP: 10.96.0.1
Port: <port-name> 80/TCP
TargetPort: 8080/TCP
NodePort: <port-name> 30080/TCP
Endpoints: 10.244.1.2:8080
...
方法3:使用 kubectl get services
并结合 grep
过滤
如果你想快速找到所有配置了NodePort的Service,可以结合 kubectl get services
和 grep
进行过滤。
kubectl get svc -A | grep NodePort
这将列出所有配置了NodePort的Service。
方法4:使用 kubectl get services
并以JSON或YAML格式输出
你可以使用 kubectl get services
并以JSON或YAML格式输出,然后手动查找NodePort信息。
以YAML格式为例:
kubectl get svc -A -o yaml
以JSON格式为例:
kubectl get svc -A -o json
然后你可以在输出中查找 type: NodePort
或 nodePort
字段。
方法5:使用 kubectl get services
配合 jq
工具
如果你有 jq
工具(用于处理JSON数据),可以更精确地提取NodePort信息。
kubectl get svc -A -o json | jq '.items[] | select(.spec.type=="NodePort") | {name: .metadata.name, namespace: .metadata.namespace, nodePort: .spec.ports[].nodePort}'
这将输出所有NodePort Service的名称、命名空间和NodePort号码。
举例
$ kubectl get svc -o wide -n baetyl-edge
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
triton-server ClusterIP 10.43.249.95 <none> 8001/TCP,8002/TCP 15m baetyl-app-name=triton-server
triton-server-nodeport NodePort 10.43.14.35 <none> 8000:30001/TCP 15m baetyl-app-name=triton-server
$ kubectl describe svc triton-server-nodeport -n baetyl-edge
Name: triton-server-nodeport
Namespace: baetyl-edge
Labels: baetyl-app-name=triton-server
Annotations: <none>
Selector: baetyl-app-name=triton-server
Type: NodePort
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.43.14.35
IPs: 10.43.14.35
Port: triton-server-8000-tcp 8000/TCP
TargetPort: 8000/TCP
NodePort: triton-server-8000-tcp 30001/TCP
Endpoints: 10.42.0.21:8000
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
总结
通过以上方法,你可以轻松查看K3s集群中开放的NodePort:
- 使用
kubectl get svc -o wide -A
查看所有Service的概览。 - 使用
kubectl describe svc <service-name> -n <namespace>
查看特定Service的详细信息。 - 使用
kubectl get svc -A | grep NodePort
快速过滤出NodePort Service。 - 以JSON或YAML格式输出Service信息,然后手动查找。
- 使用
jq
工具精确提取NodePort信息。