任务

任务
管理集群
Debug DNS 方案
Enabling Service Topology (EN)
IP Masquerade Agent 用户指南
Kubernetes 云管理控制器
Safely Drain a Node while Respecting the PodDisruptionBudget (EN)
为 Kubernetes 运行 etcd 集群
为系统守护进程预留计算资源
为节点发布扩展资源
使用 CoreDNS 进行服务发现
使用 KMS 提供商进行数据加密
使用 Kubernetes API 访问集群
关键插件 Pod 的调度保证
启用端点切片
命名空间演练
在 Kubernetes 集群中使用 NodeLocal DNSCache
在 Kubernetes 集群中使用 sysctl
在实时集群上重新配置节点的 Kubelet
声明网络策略
开发云控制器管理器
控制节点上的 CPU 管理策略
控制节点上的拓扑管理策略
搭建高可用的 Kubernetes Masters
改变默认 StorageClass
更改 PersistentVolume 的回收策略
自定义 DNS 服务
访问集群上运行的服务
通过命名空间共享集群
通过配置文件设置 Kubelet 参数
配置 API 对象配额
配置多个调度器
配置资源不足时的处理方式
限制存储消耗
集群 DNS 服务自动伸缩
集群安全
集群管理
静态加密 Secret 数据
用插件扩展 kubectl
管理巨页(HugePages)
调度 GPUs

Edit This Page

使用端口转发来访问集群中的应用

本文展示如何使用 kubectl port-forward 连接到在 Kubernetes 集群中运行的 Redis 服务。这种类型的连接对数据库调试很有用。

准备开始

  • 你必须拥有一个 Kubernetes 的集群,同时你的 Kubernetes 集群必须带有 kubectl 命令行工具。 如果你还没有集群,你可以通过 Minikube 构建一 个你自己的集群,或者你可以使用下面任意一个 Kubernetes 工具构建:

要获知版本信息,请输入 kubectl version.

创建 Redis deployment 和服务

  1. 创建一个 Redis deployment:

    kubectl apply -f https://k8s.io/examples/application/guestbook/redis-master-deployment.yaml
    
查看输出是否成功,以验证是否成功创建 deployment:

    deployment.apps/redis-master created
查看 pod 状态,检查其是否准备就绪:

    kubectl get pods
输出显示创建的 pod:

    NAME                            READY     STATUS    RESTARTS   AGE
    redis-master-765d459796-258hz   1/1       Running   0          50s
查看 deployment 状态:

    kubectl get deployment
输出显示创建的 deployment:

    NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
    redis-master 1         1         1            1           55s
查看 replicaset 状态:

    kubectl get rs
输出显示创建的 replicaset:

    NAME                      DESIRED   CURRENT   READY     AGE
    redis-master-765d459796   1         1         1         1m
  1. 创建一个 Redis 服务:

    kubectl apply -f https://k8s.io/examples/application/guestbook/redis-master-service.yaml

查看输出是否成功,以验证是否成功创建 service:

    service/redis-master created
检查 service 是否创建:

   kubectl get svc | grep redis

输出显示创建的 service: NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE redis-master ClusterIP 10.0.0.213 6379/TCP 27s

  1. 验证 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 名称)来选择匹配的 pod 来进行端口转发。

    kubectl port-forward redis-master-765d459796-258hz 7000:6379 
    
这相当于

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

    kubectl port-forward deployment/redis-master 7000:6379 
或者

    kubectl port-forward rs/redis-master 7000:6379
或者

    kubectl port-forward svc/redis-master 7000:6379
以上所有命令都应该有效。输出应该类似于:

    I0710 14:43:38.274550    3655 portforward.go:225] Forwarding from 127.0.0.1:7000 -> 6379
    I0710 14:43:38.274797    3655 portforward.go:225] Forwarding from [::1]:7000 -> 6379
  1. 启动 Redis 命令行接口:

    redis-cli -p 7000
    
  1. 在 Redis 命令行提示符下,输入 ping 命令:

    127.0.0.1:7000>ping
    
成功的 ping 请求应该返回 PONG。

讨论

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

警告:

警告: 由于已知的限制,目前的端口转发仅适用于 TCP 协议。 在 issue 47862 中正在跟踪对 UDP 协议的支持。

接下来

学习更多关于 kubectl port-forward

反馈