对于新安装的 Kubernetes,经常出现的一个问题是 Service 没有正常工作。如果您已经运行了 Deployment 并创建了一个 Service,但是当您尝试访问它时没有得到响应,希望这份文档能帮助您找出问题所在。
先来熟悉下Service工作逻辑:

为了完成本次演练的目的,我们先运行几个 Pod。
$ kubectl run hostnames --image=k8s.gcr.io/serve_hostname \\ --labels=app=hostnames \\ --port=9376 \\ --replicas=3 deployment.apps/hostnames created
复制
确认您的 Pods 是运行状态:
$ kubectl get pods -l app=hostnames NAME READY STATUS RESTARTS AGE hostnames-632524106-bbpiw 1/1 Running 0 2m hostnames-632524106-ly40y 1/1 Running 0 2m hostnames-632524106-tlaok 1/1 Running 0 2m
复制
细心的读者会注意到我们还没有真正创建一个 Service - 其实这是我们有意的。这是一个有时会被遗忘的步骤,也是第一件要检查的事情。
那么,如果我试图访问一个不存在的 Service,会发生什么呢?假设您有另一个 Pod,想通过名称使用这个 Service,您将得到如下内容:
u@pod$ wget -O- hostnames Resolving hostnames (hostnames)... failed: Name or service not known. wget: unable to resolve host address 'hostnames'
复制
因此,首先要检查的是 Service 是否确实存在:
$ kubectl get svc hostnames No resources found. Error from server (NotFound): services "hostnames" not found
复制
我们已经有一个罪魁祸首了,让我们来创建 Service。就像前面一样,这里的内容仅仅是为了步骤的执行 - 在这里您可以使用自己的 Service 细节。
$ kubectl expose deployment hostnames --port=80 --target-port=9376 service/hostnames exposed
复制
再查询一遍,确定一下:
$ kubectl get svc hostnames NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hostnames ClusterIP 10.0.1.175 <none> 80/TCP 5s
复制
与前面相同,这与您使用 YAML 启动的 Service 一样:
`apiVersion: v1 kind: Service metadata: name: hostnames spec: selector: app: hostnames ports:
现在您可以确认 Service 存在。