简介
Kubernetes 是一个强大的容器编排平台,可简化 Web 应用程序的部署和管理。在本教程中,我们将探讨如何公开 Kubernetes Web 应用程序,使其可供用户访问。我们将介绍 Kubernetes 服务的关键概念以及配置服务访问的各种方法。
理解 Kubernetes 服务
什么是 Kubernetes 服务?
Kubernetes 服务是一种抽象概念,它定义了一组逻辑 Pod 以及访问这些 Pod 的策略。即使底层 Pod 不断变化,服务也能为应用程序提供一个稳定的端点,以便它们相互通信。
Kubernetes 服务的类型
Kubernetes 支持多种类型的服务:
ClusterIP:这是默认的服务类型。它在集群内部 IP 地址上公开服务,这意味着该服务只能从集群内部访问。
NodePort:这种类型的服务在每个节点的 IP 地址上的静态端口公开服务。这样,使用
<节点 IP>:<节点端口>就可以从集群外部访问该服务。LoadBalancer:这种类型的服务通常在云环境中为服务配置一个负载均衡器。这样,使用负载均衡器的 IP 或主机名就可以从集群外部访问该服务。
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 应用程序公开给外部世界,可以使用不同的服务类型:
NodePort 服务:
apiVersion: v1 kind: Service metadata: name: web-app-service spec: type: NodePort selector: app: web-app ports: - port: 80 targetPort: 80这将在每个节点的 IP 地址上的随机端口公开 Web 应用程序。
LoadBalancer 服务:
apiVersion: v1 kind: Service metadata: name: web-app-service spec: type: LoadBalancer selector: app: web-app ports: - port: 80 targetPort: 80这将在云环境中配置一个负载均衡器,并使用负载均衡器的 IP 地址公开 Web 应用程序。
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: 80Ingress 提供了一种更高级的方式,可使用单个外部 IP 地址公开多个 Web 应用程序。
配置服务访问
在集群内访问服务
同一 Kubernetes 集群内的 Pod 可以使用服务名称和相应端口来访问服务。例如,如果有一个名为 web-app-service 的服务监听端口 80,Pods 可以使用 http://web-app-service:80 来访问它。
从集群外部访问服务
要从 Kubernetes 集群外部访问服务,可以使用以下方法之一:
NodePort 服务:
- 使用
<节点 IP>:<节点端口>访问服务,其中<节点 IP>是集群中任何节点的 IP 地址。 - 此方法适用于开发和测试环境。
- 使用
LoadBalancer 服务:
- 云提供商会配置一个负载均衡器并为其分配一个公共 IP 地址。
- 使用负载均衡器的 IP 地址访问服务。
- 此方法适用于生产环境。
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 应用程序。


