我在kubernetes中创建了一个redis部署和服务,我可以通过服务ip从另一个pod访问redis,但是不能通过服务名称访问它
redis yaml酒店
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-deployment
namespace: myapp-ns
spec:
replicas: 1
selector:
matchLabels:
component: redis
template:
metadata:
labels:
component: redis
spec:
containers:
- name: redis
image: redis
ports:
- containerPort: 6379
---
apiVersion: v1
kind: Service
metadata:
name: redis
namespace: myapp-ns
spec:
type: ClusterIP
selector:
component: redis
ports:
- port: 6379
targetPort: 6379
2条答案
按热度按时间5vf7fwbs1#
我应用了您的文件,并且我能够从同一个名称空间和不同的名称空间对服务执行ping和telnet操作。为了测试这一点,我在相同的命名空间和不同的命名空间中创建了pod,并安装了telnet和ping。然后我执行了以下测试:
相同的命名空间
不同的命名空间
如果你不能做到这一点,由于dns解析问题,你可以看看你的
/etc/resolv.conf
确保它有搜索前缀svc.cluster.local
以及cluster.local
fcg9iug32#
我在kubernetes中创建了一个redis部署和服务,我可以通过服务ip从另一个pod访问redis,但是不能通过服务名称访问它
请记住,您可以使用
Service
访问后端的名称Pods
它只在同一命名空间中公开。看着你的Deployment
以及Service
yaml清单,我们可以看到它们被部署在myapp-ns
命名空间。这意味着只有从Pod
部署在此命名空间中,您可以访问Service
用它的名字。所以如果你部署以下
Pod
:您将能够访问
Service
因此,以下命令(前提是已安装所有必需的工具)将起作用:但是如果你的redis客户端
Pod
如果部署到完全不同的命名空间,则需要使用完全限定域名(fqdn),该域名是根据此处描述的规则生成的: