跳转到主要内容

将部署于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标签选择器,确定后将生成一个新的服务发现,此时则可以在任意集群外的主机,访问集群内任意主机的此端口