[k8s] kubectl port-forward 和kubectl expose的区别

kubectl port-forward 和 kubectl expose 是 Kubernetes 命令行工具 kubectl 提供的两种不同方式来公开服务。

kubectl port-forward

kubectl port-forward 命令用于在本地主机集群内部的 Pod 之间建立一个临时的端口转发 通道。

该命令将本地机器上的一个端口绑定到集群内部的 Pod 上的指定端口,从而允许您直接访问该 Pod。

适用于临时调试测试 ,或者当您只需要与特定 Pod 进行交互时使用。

示例:

复制代码
kubectl port-forward <pod-name> <local-port>:<pod-port>

kubectl expose

kubectl expose 命令用于创建一个新的 Service 资源对象,以公开指定的 Deployment、Pod 或其他资源。

通过创建 Service 对象,您可以为集群内外提供稳定的服务访问点,并自动启用负载均衡服务发现

适用于常驻性的服务公开和长期运行。

示例:

复制代码
kubectl expose <resource-type> <resource-name> 
		--port=<port> --target-port=<target-port> 
		--type=<service-type>

kubectl expose 命令是通过指定一些选项来创建 Service 对象。以下是创建 Service 时可能用到的一些选项:

复制代码
<resource-type>:指定要公开的资源类型,如 Deployment、Pod、ReplicaSet 等。
<resource-name>:指定要公开的资源名称。
--port=<port>:指定 Service 对象要监听的端口。
--target-port=<target-port>:指定 Service 对象要转发到的目标端口。
--type=<service-type>:指定 Service 对象的类型,如 ClusterIP、NodePort、LoadBalancer 或 ExternalName。

以下是 service-type 详解:

  • ClusterIP(默认):

ClusterIP 类型将服务公开为仅在集群内部可访问的 IP 地址。

通过该类型的 Service,其他 Pod 或服务可以通过 Cluster IP 地址访问服务。

这是默认的 Service 类型。

  • NodePort

NodePort 类型为每个节点分配一个随机端口,并将请求转发到 Service 上的目标端口。

通过该类型的 Service,可以使用节点的 IP 地址和分配的端口从集群外部访问服务。

注意,虽然会打开一个高于 30000 的端口范围,但是该类型不适合直接在生产环境中使用,通常用于开发和测试。

  • LoadBalancer

LoadBalancer 类型通过云服务提供商为 Service 创建一个外部的负载均衡器,并为 Service 分配一个公共 IP 地址。

通过该类型的 Service,可以从公共 IP 地址访问服务,负载均衡器会自动将请求转发到后端 Pod。

注意,使用该类型的 Service 需要确保 Kubernetes 集群运行在支持提供商的云平台上,并且需要正确配置提供商的负载均衡器。

  • ExternalName

ExternalName 类型允许将 Service 映射到集群外部的任意 DNS 记录。

通过该类型的 Service,可以使用 Service 的名称访问外部服务或域名,而不需要通过 Cluster IP 或者负载均衡器来转发请求。


区别总结如下

  1. kubectl port-forward 主要用于临时 的本地端口转发,允许直接与 Pod 进行交互,适用于调试和测试。

    kubectl expose 创建一个新的 Service 对象来公开资源(如 Deployment 或 Pod),提供稳定的服务访问点,适用于长期运行。

  2. kubectl port-forward 可以单独 与一个指定的 Pod 进行通信,

    而 kubectl expose 会在集群中创建一个新的 Service 对象,为多个 Pod 提供统一的访问点。

  3. 使用 kubectl port-forward 后,您需要手动将本地服务地址告知其他人或服务,而 kubectl expose 可以自动处理负载均衡和服务发现。

相关推荐
平行云1 小时前
虚拟直播混合式2D/3D应用程序实时云渲染推流解决方案
linux·unity·云原生·ue5·图形渲染·实时云渲染·像素流送
longerxin20202 小时前
kubeasz 快速指南:一键部署 Kubernetes-k8s 测试环境
云原生·容器·kubernetes
cyber_两只龙宝2 小时前
【Oracle】 Oracle之SQL的子查询
linux·运维·数据库·sql·云原生·oracle
米高梅狮子3 小时前
03.Kubernetes自动化部署和namespace、pod
容器·kubernetes·自动化
特长腿特长3 小时前
LVS_DR 模式的原理
linux·运维·网络·云原生·centos·lvs
Sirius Wu4 小时前
Docker 镜像的构建、打包、变更、再次打包全流程
运维·docker·容器
Zhu7584 小时前
【软件部署】docker环境部署domino
运维·docker·容器
努力的搬砖人.8 小时前
配置 Docker 镜像加速器
运维·docker·容器
江湖有缘8 小时前
实时监控所有端口,Docker 部署 WatchYourPorts 保姆级教程
运维·docker·容器
pupudawang8 小时前
docker desktop安装redis
redis·docker·容器