我是 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 访问它时,它工作正常,但是当我尝试使用服务名称访问它时,它不起作用。可能是什么问题?
答案 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