Kubernetes 基础教程:使用 Service 公开应用

Kubernetes 基础教程:使用 Service 公开应用

【免费下载链接】website Kubernetes website and documentation repo: 【免费下载链接】website 项目地址: https://gitcode.com/GitHub_Trending/webs/website

前言

在 Kubernetes 集群中,Pod 是最小的部署单元,但它们具有短暂的生命周期。当 Pod 被重新创建或节点故障时,Pod 的 IP 地址会发生变化。这给应用间的通信带来了挑战。Kubernetes Service 正是为了解决这一问题而设计的抽象层。

什么是 Kubernetes Service?

Service 是 Kubernetes 中的核心概念之一,它定义了一组 Pod 的逻辑集合和访问策略。Service 的主要功能包括:

  1. 服务发现:为动态变化的 Pod 集合提供稳定的访问端点
  2. 负载均衡:将流量均匀分配到后端 Pod
  3. 抽象实现细节:客户端不需要知道具体的 Pod 信息

Service 类型详解

Kubernetes 支持多种 Service 类型,适用于不同场景:

1. ClusterIP(默认类型)

  • 特点:在集群内部 IP 上公开 Service
  • 访问范围:仅限集群内部访问
  • 适用场景:内部微服务间的通信

2. NodePort

  • 特点:在每个节点的固定端口上公开 Service
  • 访问方式<NodeIP>:<NodePort>
  • 实现原理:在 ClusterIP 基础上增加节点端口映射
  • 适用场景:开发测试环境或需要直接访问节点端口的场景

3. LoadBalancer

  • 特点:在云平台上创建外部负载均衡器
  • 优势:自动分配外部 IP 地址
  • 适用场景:生产环境对外服务暴露

4. ExternalName

  • 特点:将 Service 映射到外部域名
  • 实现方式:返回 CNAME 记录
  • 适用场景:集成集群外部的服务

实践:创建和操作 Service

1. 创建 Service

通过 Deployment 创建应用后,可以使用以下命令创建 NodePort 类型的 Service:

kubectl expose deployment/my-app --type=NodePort --port=8080

2. 查询 Service 信息

kubectl get services
kubectl describe service/my-app

3. 访问 Service

获取 NodePort 并测试访问:

export NODE_PORT=$(kubectl get svc/my-app -o jsonpath='{.spec.ports[0].nodePort}')
curl http://<节点IP>:$NODE_PORT

标签与选择器

Service 通过标签选择器(Label Selector)与 Pod 关联:

  1. 标签:键值对元数据,附加到任何 Kubernetes 对象上
  2. 选择器:Service 通过选择器匹配具有特定标签的 Pod

标签操作示例

查看 Pod 标签:

kubectl get pods --show-labels

添加新标签:

kubectl label pods <pod-name> environment=production

按标签查询:

kubectl get pods -l environment=production

删除 Service

删除 Service 不会影响背后的 Pod:

kubectl delete service/my-app

最佳实践

  1. 命名规范:为 Service 使用有意义的名称
  2. 端口规划:明确区分 targetPort 和 port
  3. 标签管理:保持标签简洁且有意义
  4. 类型选择
    • 内部通信使用 ClusterIP
    • 临时测试使用 NodePort
    • 生产环境使用 LoadBalancer

总结

Kubernetes Service 是集群网络的核心抽象,它解决了 Pod 动态变化带来的连接问题。通过不同类型的 Service,可以灵活地控制应用的暴露方式。理解并合理使用 Service 是 Kubernetes 应用部署的关键。

后续学习建议

  1. 深入学习 Ingress 控制器,了解更高级的流量管理
  2. 探索 Service 与 DNS 的集成
  3. 研究 NetworkPolicy 实现细粒度的网络控制

【免费下载链接】website Kubernetes website and documentation repo: 【免费下载链接】website 项目地址: https://gitcode.com/GitHub_Trending/webs/website

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值