通过nginx-controller将redis服务暴露到集群外

在微服务迁移过程中,在进行流量切换的过程中,旧的服务和微服务会共存一段时间。当用户从前端访问时,流量分别会被转发到旧服务和新服务上。
为了使用户可以同时访问旧服务和新服务,需要共用一个redis。因为以前使用的都是各自集群内部的redis(新旧服务在不同的k8s集群上),因此为了让集群外的服务也能访问另一集群的redis服务,所以需要将redis暴露到集群外。

我们ingress使用的是nginx controller.

1.找到nginx controller对应的serviceingress-nginx,一般在kube-system命名空间下,并编辑。

1
2
3
4
5
6
7
8
9
kubectl get svc -n kube-system

# 编辑ingress-nginx并新增6379端口
kubectl edit svc ingress-nginx -n kube-system

- name: tcp-redis
port: 6379
protocol: TCP
targetPort: 6379

2.修改ingress-nginx对应TCP协议的configmap。

1
2
3
4
5
6
kubectl edit cm tcp-services -n kube-system

# 在data字段下添加如下内容
data:
<namespace/service name>:<service port>:[PROXY]:[PROXY]
6379: <namespace>/redis:6379

3.然后就可以通过redis-cli在集群外访问redis服务了。


参考:
1.https://kubernetes.github.io/ingress-nginx/user-guide/exposing-tcp-udp-services/