将部署于k8s中的redis公布出来
原则上中间件都应该在独立主机部署,但是因为没有钞能力,就将一些不重要的中间件也安装部署到了k8s中。但是在开发、测试环境中,也需要依赖redis服务,需要查看redis中存储的数据、数据格式定位问题。
虽然k8s有公布nodeport和hostport的方法,但是定位问题需要保留bug现场,如果直接重新发布服务为nodeport,服务重启后现场也随即消失;也因为管理需要,并不会把一系列的主机、端口都打开,仅会公布特定主机的特定端口(范围)。
docker-compose.yaml
version: "3"
services:
forward-redis-gzxfzd:
image: harbor.iovhm.com/hub/rancher/klipper-lb:v0.1.2
restart: always # 自动重启
container_name: forward-redis-gzxfzd
privileged: true # 特权提升
ports:
- 56300:6379
environment:
- SRC_PORT=6379
- DEST_PROTO=TCP
- DEST_PORT=6379
- DEST_IP=10.107.170.132
如上几个环境变量参数很好理解,主要是如何找到DEST_IP,既服务的IP。
方式一
随便找一台在k8s集群内的主机,在集群内的主机本身就可以和k8s的虚拟网络进行通讯,可以使用curl尝试调用某个服务或者pod的私有ip,此时应该可以得到正确返回,也可以尝试ping一下某个服务或者某个pod的私有ip,此时应该会有回应(前提是K8S设置的是ipvs模式,iptables模式不会有回应)
pod每次调度后,ip都会变,但是服务的ip不会变,除非你把服务删了重建的服务、集群重做了,服务ip基本上是不会变的。
- 1、通过命令行获取服务IP
kubectl get svc -n namespace_name
- 2、通过rancher界面获取服务IP
方式二
- 记住原服务的pod标签选择器
- 增加一个nodeport服务
- 填入对应的端口
- 在选择器中填入前面记下的pod标签选择器,确定后将生成一个新的服务发现,此时则可以在任意集群外的主机,访问集群内任意主机的此端口