我的本地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>
此服务指向具有Web应用程序的部署。
我的问题是如何找到此服务的URL?我已经尝试了http://localhost:9111/,但没有成功。
我已验证此服务指向的Pod已启动并正在运行。
6条答案
按热度按时间yizd12fk1#
服务的URL格式如下:
在您的情况下,它是:
nnvyjq4y2#
获取 服务 名称 :x1月 1 日
Kubernetes 服务 的 URL 为 * * 服务 名称 . 名称 空间 . svc . 群集 . 本地 : 服务 端口 * * , 其中 * * 群集 . 本地 * * 是 Kubernetes 群集 名称 。
要 获取 群集 名称 , 请 执行 以下 操作 :
kubectl config get-contexts | awk {'print $2'}
你 试图 做 的 方式 不会 工作 , 因为 要 使 它 在 你 的 本地 主机 上 可用 , 你 需要 使 服务 在 节点 端口 可用 , 或 使用 端口 转发 或 使用 kubectl 代理 。
但是 , 如果 您 不 想 使用 节点 端口 , 并且 要 检查 容器 内部 是否 一切 正常 , 则 请 按照 以下 步骤 进入 容器 ( 如果 它 有 shell ) 。
kubectl exec -it container-name -n its-namespace-name sh
然后 执行
curl localhost:80
或curl helloworldsvc.test.svc.cluster.local:9111
或curl 10.1.0.28:80
但 这 两 个 curl 命令 都 只能 在 Kubernetes 单元 中 工作 , 而 不能 在 本地 主机 上 工作 。
要 在 主机
kubectl port-forward svc/helloworldsvc 80:9111 -n test
上 访问yv5phkfx3#
您 创建 的 服务 属于 ClusterIP 类型 , 只能 从 群集 内部 访问 。 您 有 两 种 方法 可以 从 桌面 访问 该 服务 :
1.创建 nodeport 类型 服务 , 然后 通过
nodeip:nodeport
访问 它1.使用 Kubectl port forward , 然后 通过
localhost:forwardedport
访问 它1tu0hz3e4#
如果您正在使用
minikube
,则可以运行以下代码用于特定服务
lx0bsm1f5#
当我在同一集群中使用同一命名空间(命名空间:
default
;尽管当服务位于不同的命名空间时,除第一个以外的所有服务都应该仍然有效)://
备注:
HttpClient
调用ASP.NET6应用程序80
端口即可工作。http
(不包括https
,除非您特别配置它)helloworldsvc.svc.cluster.local:80
失败,并出现异常"Name or service not known (helloworldsvc.svc.cluster.local:80)"
ql3eal8s6#
下面是获取服务URL的另一种方法
通过
kubectl exec
输入一个pod然后在pod中执行
nslookup IP of service
,例如172.20.2.213
或者在单元中执行
nslookup IP of serviceName
现在,在删除
nslookup
输出的IP后,服务URL为servicename.namespace.svc.cluster.local
,并与服务端口相连。