如何通过port-forward命令在本地访问 k8s 集群服务

公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享

概述

在我们访问k8s中的pod服务时,一般通过node port映射pod端口进行访问,还有一种是通过ingress或者istio通过域名方式来访问,虽然两种方式能满足我们需求,但是如果针对临时访问,配置起来还是有点复杂和耗时,那么我们就可以使用 kubectl port-forward来满足我们需求

port-forward 介绍

kubectl port-forward 是 Kubernetes 命令行工具 kubectl 提供的一个功能,用于在本地主机和 Kubernetes 集群中的 Pod 之间建立端口转发。

当你运行 kubectl port-forward 命令时,它会将本地主机上的一个端口与 Kubernetes 集群中的一个 Pod 的端口进行绑定。这样,在本地主机上监听的端口上收到的流量将被转发到 Pod 的端口上,反之亦然。

这个功能在开发和调试应用程序时非常有用。以下是一些 kubectl port-forward 的常见用途和好处:

  • 访问远程 Pod 的本地服务: 你可以将 Pod 的端口转发到本地主机,从而能够直接访问 Pod 上运行的服务。例如,你可以将一个运行在 Kubernetes 集群中的数据库 Pod 的端口转发到本地,以便在本地开发环境中连接和测试数据库。

  • 调试和日志记录: 通过将 Pod 的端口转发到本地,你可以使用本地工具来调试和监视在 Kubernetes 中运行的应用程序。你可以使用本地的调试器、日志记录工具或其他开发工具来检查应用程序的状态、调试问题或查看日志。

  • 绕过 Kubernetes 服务和负载均衡器: 有时候,你可能想直接访问运行在 Kubernetes 中的应用程序,而不经过 Kubernetes 的服务发现和负载均衡机制。通过将 Pod 的端口转发到本地,你可以绕过这些机制,直接连接到应用程序。

kubectl port-forward 命令的基本语法如下:

shell 复制代码
  kubectl port-forward <pod-name> [local-port:]pod-port [-n namespace]
  
  kubectl port-forward deployment/<deployment-name> [local-port:]pod-port [-n namespace]

基于以上介绍下面对port-forward命名进行一个简单验证

Kubectl 安装

  1. 下载
shell 复制代码
   curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl"
  1. 将 kubectl 置为可执行文件:
bash 复制代码
chmod +x ./kubectl
  1. 将可执行文件 kubectl 移动到系统可寻址路径 PATH 内的一个位置:
bash 复制代码
sudo mv ./kubectl /usr/local/bin/kubectl
sudo chown root: /usr/local/bin/kubectl

说明:

确保 /usr/local/bin 在你的 PATH 环境变量中。

  1. 测试一下,确保你安装的是最新的版本:
bash 复制代码
kubectl version --client

或者使用下面命令来查看版本的详细信息:

cmd 复制代码
kubectl version --client --output=yaml
  1. 安装插件后,清理安装文件:
bash 复制代码
rm kubectl kubectl.sha256

配置kubectl

访问rancher控制台,下载kubeCofig文件

执行cd 到当前用户跟目录,创建.kube文件夹

Shell 复制代码
cd & mkdir .kube & cd .kube

copy下载集群配置文件到.kube目录下,假设文件路径为:/Users/g2/Downloads/ ,文件名为:pdc-demo.yaml,那么命令如下

Shell 复制代码
mv /Users/g2/Downloads/pdc-demo.yaml ./config

执行kubectl get pods 查看配置是否生效,返回如下信息即生效

端口转发配置验证

下面使用port-forward命令对集群中的elastic-job和eureka进行本地访问

elatic-job访问验证

如下图,假如要访问elatic-job

那么执行以下命令,这里的命令表示访问本地8080端口转发的pod上,pod的端口为80

Shell 复制代码
kubectl port-forward elastic-job-86fc7b856-jxflx 8080:80

本地请求8080端口 地址,效果如下图

eureka访问验证

eureka的pod端口也为80映射到本地端口为8762

复制代码
 kubectl port-forward eureka-5d4cf57b88-l8bgd  8762:80

可以看到访问成功

相关推荐
学习菌子3 小时前
第9章:【系统架构设计师】软件工程(5.系统运行与评价)
系统架构·软件工程·软考高级·系统架构师·系统维护·系统转换·系统评价
moppol3 小时前
Serverless 架构入门与实战:AWS Lambda、Azure Functions、Cloudflare Workers 对比
云原生·serverless·aws
退役小学生呀10 天前
三、kubectl使用详解
云原生·容器·kubernetes·k8s
被困者10 天前
Linux部署Sonic前后端(详细版)(腾讯云)
spring cloud·云原生·eureka
程序员小潘10 天前
Kubernetes多容器Pod实战
云原生·容器·kubernetes
ALe要立志成为web糕手10 天前
Kubernetes安全
安全·web安全·网络安全·k8s·云安全
一只码代码的章鱼10 天前
操作系统 第九章 部分
系统架构
阿里云云原生10 天前
语音生成+情感复刻,Cosyvoice2.0 极简云端部署
云原生·serverless
阿里云云原生10 天前
编程简单了,部署依旧很难|Karpathy 演讲的 5 点解读
云原生
flyair_China10 天前
【云原生】基础篇
云原生