Kubernetes 中的 Service 和 Ingress 的使用

Kubernetes 是一个用于容器编排的开源平台,它可以帮助我们管理和部署容器化应用程序。在 Kubernetes 中,Service 和 Ingress 是两个非常重要的概念,它们可以帮助我们实现容器之间的通信和负载均衡。

Service

Service 是 Kubernetes 中的一种抽象,它定义了一组逻辑上相同的 Pod,它们提供相同的服务。Service 可以帮助我们实现容器之间的通信,而不必关心它们的 IP 地址和端口号。Service 可以通过 ClusterIP、NodePort 和 LoadBalancer 三种方式来暴露应用程序。

ClusterIP

ClusterIP 是 Service 的默认方式,它会为 Service 分配一个 ClusterIP 地址,这个地址只能在 Kubernetes 集群内部使用。当我们在 Kubernetes 集群内部访问 Service 时,就可以使用这个 ClusterIP 地址来访问。例如:

这个 Service 会为标签为 app=my-app 的 Pod 分配一个 ClusterIP 地址,并将它们暴露在 80 端口上。当我们在 Kubernetes 集群内部访问这个 Service 时,可以使用 http://my-service:80 来访问。

NodePort

NodePort 可以将 Service 暴露在 Kubernetes 集群节点的某个端口上,这个端口可以从集群外部访问。例如:

这个 Service 会为标签为 app=my-app 的 Pod 分配一个 ClusterIP 地址,并将它们暴露在 80 端口上。此外,它还会为这个 Service 分配一个 NodePort 端口,我们可以使用这个端口来从集群外部访问这个 Service。例如,如果我们的集群节点的 IP 地址为 192.168.0.100,那么可以使用 http://192.168.0.100:NodePort 来访问。

LoadBalancer

LoadBalancer 可以将 Service 暴露在外部负载均衡器上,以便外部客户端可以访问它。例如:

这个 Service 会为标签为 app=my-app 的 Pod 分配一个 ClusterIP 地址,并将它们暴露在 80 端口上。此外,它还会在外部负载均衡器上创建一个负载均衡器,我们可以使用这个负载均衡器来从外部访问这个 Service。

Ingress

Ingress 是 Kubernetes 中的一种资源对象,它可以帮助我们实现 HTTP 和 HTTPS 流量的路由和负载均衡。Ingress 需要配合 Ingress Controller 来使用,Ingress Controller 会根据 Ingress 规则来配置负载均衡器,将流量路由到不同的 Service 上。

使用 Ingress

要使用 Ingress,需要先安装 Ingress Controller。Kubernetes 社区提供了多种 Ingress Controller 的实现,例如 Nginx Ingress Controller、Traefik Ingress Controller、HAProxy Ingress Controller 等等。这里以 Nginx Ingress Controller 为例,介绍如何使用 Ingress。

首先,我们需要安装 Nginx Ingress Controller:

然后,我们需要创建一个 Ingress 资源对象,来定义流量的路由规则:

这个 Ingress 会将 my-domain.com/app1 的流量路由到 app1-service Service 上,将 my-domain.com/app2 的流量路由到 app2-service Service 上。

Ingress 的路由规则

Ingress 的路由规则非常灵活,可以根据不同的 URL 路径、主机名、协议等来进行路由。下面是一些常见的路由规则:

  • host:指定要路由的主机名。
  • path:指定要路由的 URL 路径。
  • pathType:指定 URL 路径的类型,可以是 PrefixExactImplementationSpecific
  • backend:指定要路由的 Service。

例如,下面的路由规则将 my-domain.com/app1 的流量路由到 app1-service Service 上,将 my-domain.com/app2 的流量路由到 app2-service Service 上:

Ingress 的 TLS 支持

Ingress 还支持 HTTPS 流量的路由和负载均衡。要启用 HTTPS 支持,需要先创建一个 Secret 对象,用于存储 SSL 证书和私钥:

然后,在 Ingress 中指定 TLS 配置:

这个 Ingress 会将 my-domain.com/app1 的 HTTP 流量路由到 app1-service Service 上,将 my-domain.com/app2 的 HTTP 流量路由到 app2-service Service 上,将 my-domain.com 的 HTTPS 流量路由到 my-tls-secret Secret 中存储的 SSL 证书和私钥上。

总结

Service 和 Ingress 是 Kubernetes 中非常重要的概念,它们可以帮助我们实现容器之间的通信和负载均衡。Service 可以通过 ClusterIP、NodePort 和 LoadBalancer 三种方式来暴露应用程序,而 Ingress 可以帮助我们实现 HTTP 和 HTTPS 流量的路由和负载均衡。在实际使用中,需要根据实际情况选择不同的方式来暴露应用程序和路由流量。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/656d3eefd2f5e1655d58d28f


纠错
反馈