【发布时间】:2021-08-25 21:24:49
【问题描述】:
我正在将我们的 swarm 集群迁移到 k8s 集群,这意味着我需要将所有 compose 文件重写为 k8s 文件。一切都很顺利,直到我到达 redis compose...
redis 中的 compose 文件: 是的,它很简单,因为只是在开发过程中测试缓存的东西......
version: "3"
services:
db:
image: redis:alpine
ports:
- "6380:6379"
deploy:
labels:
- traefik.frontend.rule=Host:our-redis-url.com
placement:
constraints:
- node.labels.so==linux
networks:
- traefik
networks:
traefik:
external: true
所以,我们在该集群中有 4 个节点...我的 DNS (our-redis-url.com) 指向其中一个节点,它就像一个魅力。我使用该 url + 端口 6380 简单地连接到 redis。
现在....我已经创建了同样的东西,但是对于k8s,如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis-ms
namespace: prod
spec:
replicas: 1
selector:
matchLabels:
app: redis-ms
template:
metadata:
labels:
app: redis-ms
spec:
containers:
- name: redis-ms
image: redis:alpine
ports:
- containerPort: 6379
resources:
requests:
cpu: 250m
memory: 256Mi
limits:
cpu: 500m
memory: 512Mi
---
apiVersion: v1
kind: Service
metadata:
name: redis-ms
namespace: prod
spec:
selector:
app: redis-ms
ports:
- protocol: TCP
port: 6380
targetPort: 6379
type: ClusterIP
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: redis-ms
namespace: prod
annotations:
kubernetes.io/ingress.class: traefik
spec:
rules:
- host: our-redis-url.com
http:
paths:
- backend:
service:
name: redis-ms
port:
number: 6380
path: /
pathType: Prefix
那没有用。 吊舱运行,通过日志我可以看到它正在等待连接,但我不知道如何像在 docker-compose 中那样做这个技巧(traefik.frontend.rule=Host:redis-ms.mstech.com.br绑定url和端口部分)。
我已经尝试使用工具 kompose 来转换这个 compose 文件...它没有工作到大声笑
如果有人能给我一些建议,或者帮助我解决问题,我将不胜感激。
我正在使用带有 traefik 的 k8s 作为入口控制器。
【问题讨论】:
-
Redis 服务不是 HTTP,所以 Kubernetes Ingress 系统默认不知道如何处理。 Exposing Redis with Ingress Nginx Controller 有一个非常详细的演练,但对于 Nginx 入口控制器,而不是 Træfik。不过,您真的希望从集群外部可以访问您的私有数据存储吗?
标签: kubernetes docker-compose redis kubernetes-ingress traefik-ingress