无法通过服务名称访问服务。在 Kubernetes

时间:2021-07-15 11:57:56

标签: kubernetes kubernetes-pod kubernetes-service

我是 Kubernetes 的新手,我正在尝试不同的东西。这是我的部署文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hellok8s
spec:
  replicas: 2
  selector:
    matchLabels:
      app: hellok8s
  template:
    metadata:
      labels:
        app: hellok8s
    spec:
      containers:
      - image: brianstorti/hellok8s:v3
        name: hellok8s-container

以下是我的服务文件。

apiVersion: v1
kind: Service
metadata:
  name: hellok8s-svc
spec:
  type: NodePort
  selector:
    app: hellok8s
  ports:
  - port: 4567
    nodePort: 30001

我正在使用 exec 命令并从容器内部尝试使用服务名称访问服务。当我使用集群 IP 访问它时,它工作正常,但是当我尝试使用服务名称访问它时,它不起作用。可能是什么问题?

2 个答案:

答案 0 :(得分:1)

作为社区维基发布,以提高知名度。 正如评论中提到的nimramubashir

<块引用>

我进行了更深入的调试,内部 pod-pod 通信似乎存在一些问题。我正在通过 kubeadm 创建一个集群,它似乎有一些问题导致了这个问题。我为此提出了一个新问题。我已尝试将其部署在云上,效果很好。

答案 1 :(得分:0)

服务 DNS:hellok8s-svc.default.svc 只能在集群内访问

服务 DNS:<service-name>.<namespace>.svc

由于您使用的是 NodePort 类型的服务,因此您可以在 NODE_IP:NODT_PORT 从集群内部和外部访问它。但是服务 DNS 地址在集群外部不起作用。这是预期的行为。

更新:

curl 与服务 DNS 一起使用时,请确保您使用的是 complete DNS 地址:

  • <service-name>.<namespace>.svc.cluster.local

从容器内部尝试:

$ curl http://hellok8s-svc.default.svc.cluster.local:4567

注意:

说,你不记得 DNS 命名格式,你仍然可以通过 nslookup CLI 获得完整的地址。

# nslookup service-name.namespace
$ nslookup es-all.demo
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      es-all.demo
Address 1: 10.96.97.198 es-all.demo.svc.cluster.local