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

Foo*_*Foo 23 kubernetes kubernetes-service

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

这是我的 kubernetes 服务在我执行以下操作时的样子 kubectl describe service

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>
Run Code Online (Sandbox Code Playgroud)

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

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

我确认此服务指向的 pod 已启动并正在运行。

P E*_*ram 51

服务的 URL 格式如下:

<service-name>.<namespace>.svc.cluster.local:<service-port>
Run Code Online (Sandbox Code Playgroud)

在你的情况下是:

helloworldsvc.test.svc.cluster.local:9111
Run Code Online (Sandbox Code Playgroud)

  • 如果两个服务位于同一名称空间中,则只需使用服务名称。休息可以忽略 (4认同)

Arg*_*dhu 13

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

  1. 创建一个nodeport类型的服务,然后通过以下方式访问它nodeip:nodeport

  2. 使用 Kubectl端口转发,然后通过以下方式访问它localhost:forwardedport


Nic*_*sen 11

url当在同一个集群和同一个命名空间中时,以下变体对我有用(命名空间: default;尽管当服务位于不同的命名空间时,除了第一个之外的所有变体都应该仍然有效):

http://helloworldsvc
http://helloworldsvc.default
http://helloworldsvc.default.svc
http://helloworldsvc.default.svc.cluster.local
http://helloworldsvc.default.svc.cluster.local:80
Run Code Online (Sandbox Code Playgroud)

//

using HttpClient client = new();
string result = await client.GetStringAsync(url);
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 我碰巧正在使用 ASP.NET 6 应用程序进行调用HttpClient
  • 我认为该客户端默认将端口设置为 80,因此不需要80显式设置端口即可工作。但我确实验证了所有这些都可以从网址中添加或删除
  • http仅(不是https,除非您专门配置)
  • 命名空间只能在第一种情况下省略(即当域/“权限”只是服务名称时)。所以helloworldsvc.svc.cluster.local:80失败但有异常"Name or service not known (helloworldsvc.svc.cluster.local:80)"


red*_*ack 7

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

kubernetes 服务的 URL 是service-name.namespace.svc.cluster.local:service-port,其中cluster.local是 kubernetes 集群名称。

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

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

您尝试使用的方式无法在您的本地主机上使用它,您需要在nodeport或使用port-forward或使用 kubectl proxy使服务可用。

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

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 内工作,而不能在您的 localhost 机器上工作。

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


dıl*_*ücü 5

如果您正在使用minikube,您可以运行下面的代码

minikube service --all
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

针对特定服务


minikube service service-name --url

Run Code Online (Sandbox Code Playgroud)

在此输入图像描述