如何在kubernetes中找到服务的url?

How to find the url of a service in kubernetes?

我的本地 docker 桌面上有一个本地 kubernetes 集群。

这就是我执行 kubectl describe service

时我的 kubernetes 服务的样子
Name:              helloworldsvc
Namespace:         test
Labels:            app=helloworldsvc
Annotations:       kubectl.kubernetes.io/last-applied-configuration:
                     {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"helloworldsvc"},"name":"helloworldsvc","namespace":"test...
Selector:          app=helloworldapp
Type:              ClusterIP
IP:                10.108.182.240
Port:              http  9111/TCP
TargetPort:        80/TCP
Endpoints:         10.1.0.28:80
Session Affinity:  None
Events:            <none>

此服务指向带有 Web 应用程序的部署。

我的问题是如何找到此服务的 url? 我已经尝试过 http://localhost:9111/ 但没有用。

我验证了此服务指向的 pod 已启动并且 运行。

您创建的服务属于 ClusterIP 类型,只能从集群内部访问。您可以通过两种方式从桌面访问它:

  1. 创建一个nodeport类型的服务然后通过nodeip:nodeport

  2. 访问它
  3. 使用Kubectl port forward然后通过localhost:forwardedport

  4. 访问

URL 服务格式如下:

<service-name>.<namespace>.svc.cluster.local:<service-port>

你的情况是:

helloworldsvc.test.svc.cluster.local:9111

获取服务名称:kubectl get service -n test

URL 到 kubernetes 服务是 service-name.namespace.svc.cluster.local:service-port where cluster.local 是 kubernetes 集群名称。

获取集群名称:kubectl config get-contexts | awk {'print '}

URL 在您的情况下服务将是 helloworldsvc.test.svc.cluster.local:9111

您尝试使用的方法无法在您的本地主机上使用您需要在 nodeport or using port-forward or using kubectl proxy.

上提供该服务

但是,如果您不想使用节点端口并检查容器内部是否一切正常,请按照以下步骤进入容器(如果它有 shell。

kubectl exec -it container-name -n its-namespace-name sh

然后做一个

curl localhost:80curl helloworldsvc.test.svc.cluster.local:9111curl 10.1.0.28:80

但是这两个 curl 命令只能在 Kubernetes pod 中使用,而不能在您的本地主机上使用。

在您的主机上访问kubectl port-forward svc/helloworldsvc 80:9111 -n test