如何公开 Kubernetes Web 应用程序

KubernetesKubernetesBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

Kubernetes 是一个强大的容器编排平台,可简化 Web 应用程序的部署和管理。在本教程中,我们将探讨如何公开 Kubernetes Web 应用程序,使其可供用户访问。我们将介绍 Kubernetes 服务的关键概念以及配置服务访问的各种方法。

理解 Kubernetes 服务

什么是 Kubernetes 服务?

Kubernetes 服务是一种抽象概念,它定义了一组逻辑 Pod 以及访问这些 Pod 的策略。即使底层 Pod 不断变化,服务也能为应用程序提供一个稳定的端点,以便它们相互通信。

Kubernetes 服务的类型

Kubernetes 支持多种类型的服务:

  1. ClusterIP:这是默认的服务类型。它在集群内部 IP 地址上公开服务,这意味着该服务只能从集群内部访问。

  2. NodePort:这种类型的服务在每个节点的 IP 地址上的静态端口公开服务。这样,使用 <节点 IP>:<节点端口> 就可以从集群外部访问该服务。

  3. LoadBalancer:这种类型的服务通常在云环境中为服务配置一个负载均衡器。这样,使用负载均衡器的 IP 或主机名就可以从集群外部访问该服务。

  4. ExternalName:这种类型的服务将服务映射到一个 DNS 名称,无需代理。

服务发现

Kubernetes 服务提供了内置的服务发现机制,允许 Pod 相互查找和通信。Pod 可以通过环境变量或 DNS 发现服务。

graph LR Client --> Service Service --> Pods

访问服务

客户端可以通过不同方式访问服务:

  • ClusterIP:集群内的客户端可以使用 ClusterIP 和服务端口访问服务。
  • NodePort:集群外的客户端可以使用 <节点 IP>:<节点端口> 访问服务。
  • LoadBalancer:集群外的客户端可以使用负载均衡器的 IP 或主机名访问服务。

公开 Kubernetes Web 应用程序

将 Web 应用程序部署到 Kubernetes

要公开在 Kubernetes 中运行的 Web 应用程序,首先需要部署该应用程序。以下是一个使用 Deployment 和 Service 部署简单 Web 应用程序的示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web-app
  template:
    metadata:
      labels:
        app: web-app
    spec:
      containers:
        - name: web-app
          image: labex/web-app:v1
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: web-app-service
spec:
  selector:
    app: web-app
  ports:
    - port: 80
      targetPort: 80
  type: ClusterIP

公开 Web 应用程序

要将 Web 应用程序公开给外部世界,可以使用不同的服务类型:

  1. NodePort 服务

    apiVersion: v1
    kind: Service
    metadata:
      name: web-app-service
    spec:
      type: NodePort
      selector:
        app: web-app
      ports:
        - port: 80
          targetPort: 80

    这将在每个节点的 IP 地址上的随机端口公开 Web 应用程序。

  2. LoadBalancer 服务

    apiVersion: v1
    kind: Service
    metadata:
      name: web-app-service
    spec:
      type: LoadBalancer
      selector:
        app: web-app
      ports:
        - port: 80
          targetPort: 80

    这将在云环境中配置一个负载均衡器,并使用负载均衡器的 IP 地址公开 Web 应用程序。

  3. Ingress

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: web-app-ingress
    spec:
      rules:
        - http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: web-app-service
                    port:
                      number: 80

    Ingress 提供了一种更高级的方式,可使用单个外部 IP 地址公开多个 Web 应用程序。

配置服务访问

在集群内访问服务

同一 Kubernetes 集群内的 Pod 可以使用服务名称和相应端口来访问服务。例如,如果有一个名为 web-app-service 的服务监听端口 80,Pods 可以使用 http://web-app-service:80 来访问它。

从集群外部访问服务

要从 Kubernetes 集群外部访问服务,可以使用以下方法之一:

  1. NodePort 服务

    • 使用 <节点 IP>:<节点端口> 访问服务,其中 <节点 IP> 是集群中任何节点的 IP 地址。
    • 此方法适用于开发和测试环境。
  2. LoadBalancer 服务

    • 云提供商会配置一个负载均衡器并为其分配一个公共 IP 地址。
    • 使用负载均衡器的 IP 地址访问服务。
    • 此方法适用于生产环境。
  3. Ingress

    • Ingress 提供了一种更高级的方式,可使用单个外部 IP 地址公开多个 Web 应用程序。
    • 使用 Ingress 主机名或 IP 地址访问 Web 应用程序。
    • 此方法适用于具有多个 Web 应用程序的生产环境。

配置服务访问

你可以通过修改服务规范来配置服务访问。例如,要将服务类型从 ClusterIP 更改为 NodePort,请更新服务清单中的 type 字段:

apiVersion: v1
kind: Service
metadata:
  name: web-app-service
spec:
  type: NodePort
  selector:
    app: web-app
  ports:
    - port: 80
      targetPort: 80

应用更新后的清单后,可使用 <节点 IP>:<节点端口> 从集群外部访问 Web 应用程序。

总结

在本教程结束时,你将全面了解如何公开 Kubernetes Web 应用程序。你将学习 Kubernetes 服务的不同类型、如何配置服务访问以及让你的 Web 应用程序可供用户访问的最佳实践。这些知识将使你能够有效地部署和管理基于 Kubernetes 的 Web 应用程序。