首頁>技術>

本文是來演示如何在 Kubernetes 下面通過 Traefik 暴露一個 TCP 服務的,這裡我們以 Redis 為例。首先需要保證 Traefik 2.0 已經安裝到了 Kubernetes 叢集之中,可以參考之前我們提供的安裝資源清單 https://github.com/cnych/kubeapp。

部署 Redis

為了演示方便,我們這裡只部署單節點的 Redis,對於 Redis 叢集模式並不是我們這裡的重點,下面是我們部署使用的資源清單檔案:(redis.yaml)

apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: redisspec: template: metadata: labels: app: redis spec: containers: - name: redis image: redis:3.2.11 ports: - containerPort: 6379 protocol: TCP---apiVersion: v1kind: Servicemetadata: name: redisspec: ports: - port: 6379 targetPort: 6379 selector: app: redis

直接建立即可:

$ kubectl apply -f redis.yaml

暴露 TCP 服務

由於 Traefik 中使用 TCP 路由配置需要 SNI,而 SNI 有是依賴 TLS 的,所以我們需要配置證書才行,但是如果沒有證書的話,我們可以使用萬用字元 * 進行配置,我們這裡建立一個 IngressRouteTCP 型別的 CRD 物件(前面我們就已經安裝了對應的 CRD 資源):(ingressroute-redis.yaml)

apiVersion: traefik.containo.us/v1alpha1kind: IngressRouteTCPmetadata: name: redisspec: entryPoints: - redis routes: - match: HostSNI(`*`) services: - name: redis port: 6379

要注意的是這裡的entryPoints部分,是根據我們啟動的 Traefik 的靜態配置中的 entryPoints 來決定的,比如我們可以自己新增一個用於 Redis 的專門的入口點:

containers:- image: traefik:v2.0 name: traefik-ingress-lb ports: - name: web containerPort: 80 hostPort: 80 - name: websecure containerPort: 443 hostPort: 443 - name: redis containerPort: 6379 hostPort: 6379 - name: admin containerPort: 8080 args: - --entrypoints.web.Address=:80 - --entrypoints.websecure.Address=:443 - --entrypoints.redis.Address=:6379 - --api.insecure=true - --providers.kubernetescrd - --api - --api.dashboard=true - --accesslog

這裡給入口點新增 hostPort 是為了能夠通過節點的埠訪問到服務,關於 entryPoints 入口點的更多資訊,可以檢視文件 entrypoints 了解更多資訊。

然後直接建立上面的 IngressRouteTCP 物件:

$ kubectl apply -f ingressroute-redis.yaml

建立完成後,同樣我們可以去 Traefik 的 Dashboard 頁面上檢視是否生效:

然後我們配置一個域名解析到 Traefik 所在的節點,然後通過 6379 埠來連線 Redis 服務:

$ redis-cli -h redis.youdianzhishi.com -p 6379redis.youdianzhishi.com:6379> pingPONGredis.youdianzhishi.com:6379> set hello worldOKredis.youdianzhishi.com:6379> get hello"world"redis.youdianzhishi.com:6379>

到這裡我們就完成了將 Redis(TCP)服務暴露給外部使用者了。

最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 終於知道為什麼黑客學習過程首選的系統是Linux系統而不是windows