使用Port Forwarding连接k8s集群的pod(redis、mysql等)

一. 创建Redis的deployment和service

1. 创建Redis deployment

  redis-master-deployment.yaml 

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: redis-master
  labels:
    app: redis
spec:
  selector:
    matchLabels:
      app: redis
      role: master
      tier: backend
  replicas: 1
  template:
    metadata:
      labels:
        app: redis
        role: master
        tier: backend
    spec:
      containers:
      - name: master
        image: k8s.gcr.io/redis:e2e  # or just image: redis
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 6379

执行:

kubectl create -f redis-master-deployment.yaml

查看执行结果:

deployment "redis-master" created

 

当 pod 是 ready 时,将得到:

   kubectl get pods

    NAME                            READY     STATUS    RESTARTS   AGE
    redis-master-765d459796-258hz   1/1       Running   0          50s

   kubectl get deployment

    NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    redis-master 1         1         1            1           55s

   kubectl get rs

    NAME                      DESIRED   CURRENT   READY     AGE
    redis-master-765d459796   1         1         1         1m

 

2. 创建redis service

   redis-master-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: redis-master
  labels:
    app: redis
    role: master
    tier: backend
spec:
  ports:
  - port: 6379
    targetPort: 6379
  selector:
    app: redis
    role: master
    tier: backend

执行:

kubectl create -f redis-master-service.yaml

查看结果:

service "redis-master" created

 

3. 验证 Redis 服务是否运行在 pod 中并且监听 6379 端口:

kubectl get pods redis-master-765d459796-258hz –template=‘{{(index (index .spec.containers 0).ports 0).containerPort}}{{”\n”}}’

输出:

6379

 

二、转发一个本地端口到Pod端口

1. 从 Kubernetes v1.10 开始,kubectl port-forward 允许使用资源名称(例如服务名称)来选择匹配的 pod 来进行端口转发。

kubectl port-forward redis-master-765d459796-258hz 6379:6379

相当于:

kubectl port-forward pods/redis-master-765d459796-258hz 6379:6379

kubectl port-forward deployment/redis-master 6379:6379

kubectl port-forward rs/redis-master 6379:6379

kubectl port-forward svc/redis-master 6379:6379

以上的命令都有效,输出类似于:

I0710 14:43:38.274550    3655 portforward.go:225] Forwarding from 127.0.0.1:6379 -> 6379
I0710 14:43:38.274797    3655 portforward.go:225] Forwarding from [::1]:6379 -> 6379

 

2. 启动 Redis 命令行接口:

redis-cli

在 Redis 命令行提示符下,输入 ping 命令:

127.0.0.1:6379>ping

提示ping成功

 

与本地 6379 端口建立的连接将转发到运行 Redis 服务器的 pod 的 6379 端口。通过此连接,可以使用本地工作站来调试在 pod 中运行的数据库。

posted @ 2019-11-20 15:04  UniqueColor  阅读(1217)  评论(0编辑  收藏  举报