0Pricing
DevOps Bootcamp · 课时

用于网络访问的 Service

使用 Kubernetes 的各种 Service 类型,将应用暴露在 Cluster 内部和外部。

用于网络访问的 Service 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。

什么是 Kubernetes Service?

在 Kubernetes 中,Pods 是最小的可部署单元。它们被设计为临时性的,这意味着它们可以随时创建、删除或替换,并且通常会获得新的 IP 地址。

这种动态特性使其他应用难以可靠地找到它们并与之通信。这正是 Services 发挥作用的地方!

用于网络访问的 Service — 插图 1

提供稳定的网络访问

Kubernetes Service 会为一组 Pods 提供稳定的网络端点。您可以把它看作一个不会变化的固定地址,即使后端的 Pods 发生变化,这个地址也不会改变。

  • Services 提供一致的 IP 地址和 DNS 名称。
  • 它们可以在多个 Pods 之间对流量进行负载均衡。
  • 无论 Pods 扩缩容还是重启,它们都能确保服务持续可用。

将 Pods 连接到 Services

Service 如何知道应该将流量路由到哪些 Pods?它使用标签和选择器。

创建 Pods 时,您会为它们分配标签(例如 app: my-app 这样的键值对)。然后,Service 会指定一个与这些标签匹配的选择器,从而建立动态连接。

使用 ClusterIP 进行内部访问

ClusterIP 是默认且最常用的 Service 类型。它会在 Kubernetes 集群内部分配一个稳定的 IP 地址。此 IP 只能由集群内部的其他 Pods 或 Nodes 访问。

它非常适合后端服务(例如数据库或 API),这些服务只需与应用内的其他服务通信。

定义 ClusterIP Service

下面是一个简单的 ClusterIP Service YAML 定义。请注意,selector 与标签 app: my-backend 匹配,并且 port 映射到 targetPort。

apiVersion: v1
kind: Service
metadata:
  name: my-backend-service
spec:
  selector:
    app: my-backend
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080 # Port your application listens on
  type: ClusterIP

使用 NodePort 进行外部访问

NodePort Service 会在每个 Node 的 IP 地址上通过一个静态端口公开您的应用。这样,您就可以使用任意 Node 的 IP 和指定端口从集群外部访问该服务。

nodePort 值通常位于 30000-32767 范围内。它适用于简单的外部访问或开发环境。

定义 NodePort Service

要通过 NodePort 从外部公开您的服务,请设置 type: NodePort。您可以选择指定 nodePort,否则 Kubernetes 会为您选择一个端口。

apiVersion: v1
kind: Service
metadata:
  name: my-frontend-service
spec:
  selector:
    app: my-frontend
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80 # Port your application listens on
      nodePort: 30080 # Optional: specific port on the Node
  type: NodePort

云负载均衡器

LoadBalancer Service 类型专为云环境设计。创建此类型的 Service 时,您的云服务提供商(例如 AWS、GCP、Azure)会自动配置一个外部负载均衡器。

此负载均衡器会获得一个公共 IP 地址,并将外部流量直接路由到您的 Pods,通常还提供 SSL 终止等高级功能。

定义 LoadBalancer Service

对于云 Kubernetes 集群中面向公众的应用,LoadBalancer 是首选方案。它可以大幅简化外部访问管理。

apiVersion: v1
kind: Service
metadata:
  name: my-web-app-lb
spec:
  selector:
    app: my-web-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer

选择合适的 Service

您的团队正在将新应用部署到 Kubernetes。请考虑以下场景:

  • 一个后端 API,只需由集群内的其他服务访问。
  • 一个前端 Web 服务器,需要能够从互联网访问,并且您将其部署在云服务提供商(AWS、GCP、Azure)上。

哪种 Service 类型最适合前端 Web 服务器?

回顾:用于网络访问的 Services

我们了解到,Kubernetes Services 为动态 Pods 提供稳定的网络访问。它们对于确保应用可靠通信至关重要。

  • ClusterIP:仅用于集群内部通信。
  • NodePort:在每个 Node 的 IP 上通过静态端口公开服务,可在特定场景下从外部访问。
  • LoadBalancer:与云服务提供商集成,为公开访问配置外部负载均衡器。

选择合适的 Service 类型对于控制应用的公开方式至关重要。

常见问题解答

「用于网络访问的 Service」课时是免费的吗?

是的 — 「用于网络访问的 Service」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。

「用于网络访问的 Service」这节课中我会学到什么?

使用 Kubernetes 的各种 Service 类型,将应用暴露在 Cluster 内部和外部。 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 DevOps Bootcamp 需要有经验吗?

无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「用于网络访问的 Service」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 DevOps Bootcamp 课中编写并运行代码吗?

能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 无状态应用的 Deployment
  2. 用于网络访问的 Service
  3. ConfigMaps 与密钥
  4. Ingress 与外部路由
← 返回 DevOps Bootcamp