Jul*_*sta 4 kubernetes kubernetes-service
默认情况下,根据k8s 文档,服务被分配一个 DNS A 记录作为表单名称my-svc.my-namespace.svc.cluster-domain.example
。
是否有检索服务全名的命令?
Sha*_*k V 16
您可以从任何 pod 执行 DNS 查询,您将获得 FQDN。
# nslookup api-server
Server: 10.96.0.10
Address: 10.96.0.10#53
Name: api-server.default.svc.cluster.local
Address: 10.104.225.18
root@api-server-6ff8c8b9c-6pgkb:/#
Run Code Online (Sandbox Code Playgroud)
cluster-domain.example
只是文档中的一个例子。cluster.local
是分配的默认集群域。因此,默认情况下任何服务的 FQDN 都是<service-name>.<namespace>.svc.cluster.local
.
您不需要使用 FQDN 来访问服务 - 对于相同命名空间中的服务,只需服务名称就足够了。对于其他命名空间中的服务,<service-name>.<namespace>
kubernetes 会自动设置 DNS 搜索域就足够了。
bwl*_*289 15
太长了;如果您只想以自动化方式执行此操作,请跳过以下内容;这是我编写的一个快速 bash 脚本,用于自动执行此操作。假设容器中安装了 bash:
k8s_shell_pod_svc_nslookup () {
kubectl exec -it $1 --container $2 -- /bin/bash -c "apt update;apt-get -y install dnsutils;nslookup $3"
}
Run Code Online (Sandbox Code Playgroud)
使用示例:
k8s_shell_pod_svc_nslookup example_pod example_container example_service
Run Code Online (Sandbox Code Playgroud)
更长的解释:
首先,通过在适当的命名空间中列出所有服务来获取您有兴趣获取其 FQDN(完全限定域名)的服务的名称:
k8s_shell_pod_svc_nslookup example_pod example_container example_service
Run Code Online (Sandbox Code Playgroud)
其次,通过列出所有 pod 来获取与您感兴趣的服务关联的 pod 名称:
kubectl get svc -n <namespace>
Run Code Online (Sandbox Code Playgroud)
第三,通过列出该 pod 中的所有容器来获取您感兴趣的 pod 中的容器:
kubectl get pods
Run Code Online (Sandbox Code Playgroud)
第四,您需要访问 pod(以及在 pod 中运行的容器)并启动 bash shell。注意:我使用 Istio,因此我的 pod 中始终会运行多个容器,因此我还指定了我的容器。这假设容器中安装了 bash。
kubectl get pods <pod_name> -o jsonpath='{.spec.containers[*].name}'
Run Code Online (Sandbox Code Playgroud)
第五,一旦 bash shell 启动,如果您正在运行debian
容器,则需要在执行 nslookup 之前使用apt
install 。dnsutils
如果您不使用debian
,请使用适当的替代方案:
kubectl exec -it <pod_name> --container <container_name> -- /bin/bash
Run Code Online (Sandbox Code Playgroud)
第六,您可以执行nslookup
:
apt update && apt-get -y install dnsutils
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7333 次 |
最近记录: |