我正在关注this kubernetes tutorial以设置DNS service
并将两个单独的kubernetes pods
连接在一起。应该作为网关的一个正在侦听端口80,另一个在端口90上。
当我使用他们的节点IP时,curl 10.32.0.24
和curl 10.32.0.25:90
我可以联系到他们。然而,我无法弄清楚,如何通过我的DNS服务访问它们。 URL
会是什么?
Namespace
为default
,这是kubectl cluster-info:
的结果
Kubernetes master is running at IP_OF_MY_SERVER:6443
KubeDNS is running at IP_OF_MY_SERVER:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
我的deployment.yaml
几乎与教程中的相同:
apiVersion: v1
kind: Service
metadata:
name: default-subdomain
spec:
selector:
name: busybox
clusterIP: None
ports:
- name: foo # Actually, no port is needed.
port: 80
targetPort: 80
---
apiVersion: v1
kind: Pod
metadata:
name: busybox1
labels:
name: busybox
spec:
hostname: busybox-1
subdomain: default-subdomain
containers:
- image: time-provider
name: busybox
---
apiVersion: v1
kind: Pod
metadata:
name: busybox2
labels:
name: busybox
spec:
hostname: busybox-2
subdomain: default-subdomain
containers:
- image: gateway
name: busybox
答案 0 :(得分:2)
Kubernetes DNS服务在群集内部工作,并为pod提供DNS名称,而不是外部服务。
以下是您使用的instruction摘录:
群集中定义的每个服务(包括DNS服务器本身)都会分配一个DNS名称。默认情况下,客户端Pod的DNS搜索列表将包含Pod自己的命名空间和群集的默认域。最好通过示例说明:
假设Kubernetes名称空间
foo
中名为bar
的服务。在命名空间bar
中运行的Pod只需对foo
执行DNS查询即可查找此服务。在命名空间quux
中运行的Pod可以通过对foo.bar
执行DNS查询来查找此服务。
因此,群集内资源的DNS名称仅存在于其中。
您通过NodeIP从外部网络呼叫该服务:curl 10.32.0.24
和curl 10.32.0.25:90
。这是一种正确的方法。如果要使用DNS名称从外部连接到群集,则应使用任何其他DNS服务将名称指向群集节点或LoadBalancer。
我建议您使用Service
对象来公开您的应用程序。以下是一些相关文章:ways to connect,use a Service to access applications.