# 将部署于k8s中的redis公布出来

原则上中间件都应该在独立主机部署，但是因为没有钞能力，就将一些不重要的中间件也安装部署到了k8s中。但是在开发、测试环境中，也需要依赖redis服务，需要查看redis中存储的数据、数据格式定位问题。

虽然k8s有公布nodeport和hostport的方法，但是定位问题需要保留bug现场，如果直接重新发布服务为nodeport，服务重启后现场也随即消失；也因为管理需要，并不会把一系列的主机、端口都打开，仅会公布特定主机的特定端口（范围）。

#### docker-compose.yaml

```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**

```shell

kubectl get svc -n namespace_name

```
[![](https://iovhm.com/book/uploads/images/gallery/2024-12/scaled-1680-/wA27WEQzzdztIIa6-image-1734543084786.png)](https://iovhm.com/book/uploads/images/gallery/2024-12/wA27WEQzzdztIIa6-image-1734543084786.png)


- **2、通过rancher界面获取服务IP**

[![](https://iovhm.com/book/uploads/images/gallery/2024-12/scaled-1680-/ulaabRgHRtj2JN8Z-image-1734543207968.png)](https://iovhm.com/book/uploads/images/gallery/2024-12/ulaabRgHRtj2JN8Z-image-1734543207968.png)

#### 方式二

-  **记住原服务的pod标签选择器**

[![](https://iovhm.com/book/uploads/images/gallery/2024-12/scaled-1680-/2JJkgcXXeyL5mFT7-image-1734544150442.png)](https://iovhm.com/book/uploads/images/gallery/2024-12/2JJkgcXXeyL5mFT7-image-1734544150442.png)

- **增加一个nodeport服务**

[![](https://iovhm.com/book/uploads/images/gallery/2024-12/scaled-1680-/MW7fMGkGUz4oIE06-image-1734544224832.png)](https://iovhm.com/book/uploads/images/gallery/2024-12/MW7fMGkGUz4oIE06-image-1734544224832.png)

- **填入对应的端口**

[![](https://iovhm.com/book/uploads/images/gallery/2024-12/scaled-1680-/iu8n5T5r2ICzffIK-image-1734544308633.png)](https://iovhm.com/book/uploads/images/gallery/2024-12/iu8n5T5r2ICzffIK-image-1734544308633.png)

- **在选择器中填入前面记下的pod标签选择器，确定后将生成一个新的服务发现，此时则可以在任意集群外的主机，访问集群内任意主机的此端口**

[![](https://iovhm.com/book/uploads/images/gallery/2024-12/scaled-1680-/lQR49KtnotAv4myq-image-1734544432317.png)](https://iovhm.com/book/uploads/images/gallery/2024-12/lQR49KtnotAv4myq-image-1734544432317.png)