kubernetes - Kubernetes中通过服务名访问redis
问题描述
我在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
解决方案
我应用了您的文件,并且能够从同一命名空间和不同的命名空间对服务执行 ping 和 telnet。为了测试这一点,我在相同的命名空间和不同的命名空间中创建了 pod,并安装了 telnet 和 ping。然后我执行了他们并做了以下测试:
相同的命名空间
kubectl exec -it <same-namespace-pod> /bin/bash
# ping redis
PING redis.<redis-namespace>.svc.cluster.local (172.20.211.84) 56(84) bytes of data.
# telnet redis 6379
Trying 172.20.211.84...
Connected to redis.<redis-namespace>.svc.cluster.local.
Escape character is '^]'.
不同的命名空间
kubectl exec -it <different-namespace-pod> /bin/bash
# ping redis.<redis-namespace>.svc.cluster.local
PING redis.test.svc.cluster.local (172.20.211.84) 56(84) bytes of data.
# telnet redis.<redis-namespace>.svc.cluster.local 6379
Trying 172.20.211.84...
Connected to redis.<redis-namespace>.svc.cluster.local.
Escape character is '^]'.
如果由于 dns 解析问题而无法执行此操作,您可以查看您/etc/resolv.conf
的 pod 以确保它具有搜索前缀svc.cluster.local
和cluster.local
推荐阅读
- memory-management - 交换空间和 cpu 缓存有什么区别?
- python - 'float' 对象在 List Comprehension 中不可迭代
- javascript - 删除对象中的圆形?
- python - 无法关闭异常处理的循环
- python - 如何使用 Python 编程从文件中获取大于 2 的名称计数?
- php - PHP 用 json_encode() 和 get_object_vars() 编码 MYSQLI 对象都返回 NULL 甚至 set_charset()
- python - Python 3.X 装饰器返回无
- android - AlertDialog,相同的图像以不同的大小显示
- c# - 多维 C# 数组长度问题
- javascript - 在输出中使用 AJAX / 多个 sql 语句显示外键描述而不是值