kubernetes 小立方体 curl :(6)无法解析主机:服务名

vlurs2pr  于 2023-03-07  发布在  Kubernetes
关注(0)|答案(2)|浏览(133)

我有一个ruby on rails部署,我想在前端部署中使用它,所以我创建了一个名为“flicron-backend-service”的公开端口3000的服务
以下是该服务的说明

kubectl describe svc flicron-backend-service                      
Name:              flicron-backend-service
Namespace:         default
Labels:            io.kompose.service=flicron-backend-service
Annotations:       kompose.cmd: kompose convert -f docker-compose.yml
                   kompose.version: 1.28.0 (c4137012e)
Selector:          io.kompose.service=flicron-backend
Type:              ClusterIP
IP Family Policy:  SingleStack
IP Families:       IPv4
IP:                10.107.112.244
IPs:               10.107.112.244
Port:              3000  3000/TCP
TargetPort:        3000/TCP
Endpoints:         10.244.0.144:3000
Session Affinity:  None
Events:            <none>

我正在尝试使用服务名称,但未得到解决。我已尝试从minikube内部 curl 后端服务名称,但未成功

curl flicron-backend-service:3000
curl: (6) Could not resolve host: flicron-backend-service

curl flicron-backend-service.default.svc.cluster.local:3000
curl: (6) Could not resolve host: flicron-backend-service.default.svc.cluster.local

但是如果我用ip的话就能正常工作

curl 10.107.112.244:3000
# some HTML

下面是我的DNS配置

kubectl describe cm coredns -n kube-system
Name:         coredns
Namespace:    kube-system
Labels:       <none>
Annotations:  <none>

Data
====
Corefile:
----
.:53 {
    log
    errors
    health {
       lameduck 5s
    }
    ready
    kubernetes cluster.local in-addr.arpa ip6.arpa {
       pods insecure
       fallthrough in-addr.arpa ip6.arpa
       ttl 30
    }
    prometheus :9153
    hosts {
       192.168.49.1 host.minikube.internal
       fallthrough
    }
    forward . /etc/resolv.conf {
       max_concurrent 1000
    }
    cache 30
    loop
    reload
    loadbalance
}

BinaryData
====

Events:  <none>
kx7yvsdv

kx7yvsdv1#

我已经尝试从minikube内部 curl 后端服务名称,但没有成功
如果您明确表示您已经:

  • 连接到minikube示例(即minikube ssh
  • curl直接来自minikube示例的服务名称。

那它应该不工作
它将从针对内部Kubernetes DNS解析的Pod/容器工作。
让我解释一下:
Kubernetes环境中的DNS解析由位于kube-system命名空间中的coredns处理。它是托管在Kubernetes内部的容器化服务。有关如何连接到它的信息将通过Kubelet注入Pod。
您可以通过以下方式查看:

  • kubectl run -it basic-pod --image=nginx -- /bin/bash
  • cat /etc/resolv.conf
nameserver 10.96.0.10 # <-- SERVICE KUBE-DNS IN KUBE-SYSTEM (CLUSTER-IP)
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

minikube本身没有在/etc/hosts中配置核心dns。
尝试使用实际的Pod联系您的Service

  • kubectl run -it basic-pod --image=nginx -- /bin/bash
  • apt update && apt install dnsutils -y-nginx图像用于简化
  • nslookup nginx-在我的minikube中有一个名为nginxService
root@basic-pod:/# nslookup nginx
Server:     10.96.0.10
Address:    10.96.0.10#53

Name:   nginx.default.svc.cluster.local
Address: 10.109.51.22

我建议您看一下以下文档:

    • 一个月一次 *
ru9i0ody

ru9i0ody2#

我认为在使用dns时不需要指定端口。你试过- curl http://flicron-backend-service.default.svc.cluster.local吗?

相关问题