首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >深入理解 Kubernetes 中的 Service、Ingress 和 NginxIngress:如何配置多个域名访问 Java 服务

深入理解 Kubernetes 中的 Service、Ingress 和 NginxIngress:如何配置多个域名访问 Java 服务

作者头像
用户8589624
发布2025-11-14 11:59:56
发布2025-11-14 11:59:56
1410
举报
文章被收录于专栏:nginxnginx

深入理解 Kubernetes 中的 Service、Ingress 和 NginxIngress:如何配置多个域名访问 Java 服务

在 Kubernetes (K8s) 中,ServiceIngressNginxIngress 都是与网络相关的资源,帮助我们暴露和管理访问服务的方式。理解它们的功能和相互关系,有助于我们更好地部署和管理基于 Kubernetes 的应用。

1. Service

Service 是 Kubernetes 中的一个资源,它定义了如何访问一个或多个运行中的 Pods。Service 主要用于提供网络服务,充当 Kubernetes 集群内的负载均衡器,确保请求可以被转发到正确的 Pod 上。

Service 的类型:

  • ClusterIP(默认类型): 仅能在 Kubernetes 集群内访问。适用于集群内部服务之间的通信。
  • NodePort: 将 Service 暴露到每个 Node 上,允许外部通过集群节点的端口访问应用。
  • LoadBalancer: 通常需要与云服务提供商结合使用,自动为服务创建一个外部负载均衡器,提供外部访问。
  • ExternalName: 通过 DNS 名称暴露服务,允许外部系统访问。
2. Ingress

Ingress 是 Kubernetes 中的一种 API 资源,提供 HTTP 和 HTTPS 的路由功能,允许外部访问集群中的服务。它定义了基于 URL 路径或主机名的路由规则,将请求转发到对应的 Service

Ingress 与 Service 配合使用,通过配置不同的路由规则,可以实现将外部请求根据不同的 URL 路径或主机名转发到不同的服务。

Ingress 特性:

  • 基于 URL 路径或者主机名进行路由
  • 支持 SSL/TLS 终端 (即 HTTPS)
  • 可以实现负载均衡、反向代理等功能
  • 通常需要配合 Ingress Controller 使用
3. NginxIngress

NginxIngress 是 Nginx 官方提供的一个 Kubernetes Ingress Controller,它允许你使用 Nginx 来处理 Ingress 资源中的流量。Ingress Controller 是一个 Pod,它监听 Kubernetes 集群中的 Ingress 资源,基于定义的路由规则将流量转发到相应的 Service

在 Kubernetes 集群中使用 Ingress Controller 作为流量的反向代理,NginxIngress Controller 是常用的一种方式。

NginxIngress 的作用:

  • 它根据定义的 Ingress 资源来处理请求,并将流量路由到对应的服务。
  • 支持负载均衡、SSL/TLS 终端、基于路径和主机名的路由规则。
  • 在实际应用中,NginxIngress Controller 是一种非常常见且强大的解决方案,用于处理复杂的路由和反向代理需求。
4. ServiceIngressNginxIngress 的关系
  • Service 是 Kubernetes 内部的服务暴露机制,允许其他 Pods 或外部客户端访问服务。
  • Ingress 是一个资源,帮助将外部的 HTTP(S) 请求路由到 Kubernetes 内部的 Service
  • NginxIngress 是一个 Ingress Controller,负责处理 Ingress 资源并将流量转发到相应的 Service

简单来说,Ingress 是定义 HTTP/HTTPS 路由规则的资源,而 Ingress Controller(如 NginxIngress)则是实际处理这些路由请求的组件,Service 则是具体的服务,它最终处理请求。

5. 使用 www.test1.comwww.test2.com 访问部署在 Kubernetes 中的 Java 服务

假设你有两个域名 www.test1.comwww.test2.com,并且这些域名需要访问部署在 Kubernetes 集群中的不同 Java 服务,可以通过 IngressNginxIngress 来实现。具体步骤如下:

步骤 1: 部署 Nginx Ingress Controller

首先,确保 Kubernetes 集群中已经部署了 Nginx Ingress Controller。可以通过以下命令部署 Nginx Ingress:

代码语言:javascript
复制
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml

这会安装一个默认的 Nginx Ingress Controller,负责处理所有 Ingress 资源的流量。

步骤 2: 配置 Service

假设你有两个 Java 服务,每个服务暴露在不同的端口和 Service 上。首先,为这些服务创建相应的 Service 资源。例如:

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: service1
spec:
  selector:
    app: java-app-1
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: service2
spec:
  selector:
    app: java-app-2
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
步骤 3: 创建 Ingress 资源

然后,创建一个 Ingress 资源,定义如何根据域名路由到不同的服务。以下是一个例子:

代码语言:javascript
复制
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: java-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: www.test1.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service1
            port:
              number: 80
  - host: www.test2.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: service2
            port:
              number: 80

这个 Ingress 资源定义了两个路由规则:

  1. 请求 www.test1.com 时,将流量转发到 service1
  2. 请求 www.test2.com 时,将流量转发到 service2
步骤 4: 配置 DNS

确保你将 www.test1.comwww.test2.com 的 DNS 记录指向 Kubernetes 集群的外部负载均衡器(如果你使用的是云服务提供商的负载均衡器)或 Ingress Controller 的 IP 地址。

你可以通过以下命令查看 Ingress Controller 的外部 IP 地址:

代码语言:javascript
复制
kubectl get svc -n ingress-nginx

找到 Nginx Ingress Controller 的外部 IP,并为两个域名配置 DNS 记录,指向这个 IP。

步骤 5: 测试访问

配置完 DNS 后,你可以通过浏览器访问 www.test1.comwww.test2.com,它们应该能够根据域名路由到不同的 Java 服务。

总结
  • Service 用于在 Kubernetes 集群内暴露服务,可以通过不同类型(如 ClusterIPNodePortLoadBalancer)来控制访问范围。
  • Ingress 是用来管理 HTTP 和 HTTPS 请求的路由资源,允许根据路径或主机名将请求路由到不同的服务。
  • NginxIngress 是一个常用的 Ingress Controller,它根据配置的规则处理外部请求,并将流量路由到相应的 Service

通过合理配置 ServiceIngressIngress Controller,你可以实现基于域名的请求路由,从而将不同的域名访问请求引导到 Kubernetes 中的不同服务。在本例中,www.test1.comwww.test2.com 被路由到部署在 Kubernetes 中的两个不同 Java 服务。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 深入理解 Kubernetes 中的 Service、Ingress 和 NginxIngress:如何配置多个域名访问 Java 服务
    • 1. Service
    • 2. Ingress
    • 3. NginxIngress
    • 4. Service、Ingress 和 NginxIngress 的关系
    • 5. 使用 www.test1.com 和 www.test2.com 访问部署在 Kubernetes 中的 Java 服务
      • 步骤 1: 部署 Nginx Ingress Controller
      • 步骤 2: 配置 Service
      • 步骤 3: 创建 Ingress 资源
      • 步骤 4: 配置 DNS
      • 步骤 5: 测试访问
    • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档