1.8. Route 和 ingress


路由和入口都用于将应用程序公开给外部流量。但是,它们提供的目的略有不同,具有不同的功能。

1.8.1. Routes

路由特定于 OpenShift Container Platform 资源,它们通过主机名公开服务,以便外部客户端可根据名称访问服务。

路由将主机名映射到服务。路由名称映射允许使用主机名访问服务。路由为定向到该服务的流量提供负载均衡。路由中使用的主机名解析为路由器的 IP 地址。路由然后将流量转发到适当的服务。路由也可以使用 SSL/TLS 保护,以加密客户端和服务之间的流量。

1.8.2. 入口

Ingress 是一个提供高级路由功能的资源,包括负载均衡、SSL/TLS 终止和基于名称的虚拟主机。以下是有关 Ingress 的一些关键点:

  • HTTP/HTTPS 路由 :您可以使用 Ingress 定义将 HTTP 和 HTTPS 流量路由到集群中的服务的规则。
  • Load balancing(负载均衡) :Ingress Controller (如 NGINX 或 HAProxy)根据用户定义的规则管理流量路由和负载均衡。
  • SSL/TLS termination(SSL/TLS 终止):SSL/TLS 终止是在将传入的 SSL/TLS 流量传递给后端服务前解密传入的 SSL/TLS 流量的过程。
  • 多个域和路径: Ingress 支持多个域和路径的路由流量。

1.8.3. 路由和入口的比较

与入口相比,路由提供了更大的灵活性和高级功能。这使得路由适合复杂路由场景。路由更易于设置和使用,特别是对于基本的外部访问需求。Ingress 通常用于简单直接的外部访问。路由用于更复杂的场景,需要高级路由和 SSL/TLS 终止。

Web 应用程序在 OpenShift Container Platform 集群上运行。您希望外部用户访问应用程序。该应用应该可通过特定的域名访问,流量应该使用 TLS 安全加密。以下示例演示了如何配置路由和入口,以安全地将 Web 应用程序公开给外部流量。

1.8.4.1. 配置路由

  1. 创建一个新项目。

    $ oc new-project webapp-project
    Copy to Clipboard Toggle word wrap
  2. 部署 Web 应用。

    $ oc new-app nodejs:12~https://github.com/sclorg/nodejs-ex.git --name=webapp
    Copy to Clipboard Toggle word wrap
  3. 使用路由公开服务。

    $ oc expose svc/webapp --hostname=webapp.example.com
    Copy to Clipboard Toggle word wrap
  4. 使用 TLS 保护路由。

    1. 使用您的证书和密钥创建 TLS secret。

      $ oc create secret tls webapp-tls --cert=path/to/tls.crt --key=path/to/tls.key
      Copy to Clipboard Toggle word wrap
    2. 更新路由以使用 TLS secret。

      $ oc patch route/webapp -p '{"spec":{"tls":{"termination":"edge","certificate":"path/to/tls.crt","key":"path/to/tls.key"}}}'
      Copy to Clipboard Toggle word wrap

1.8.4.2. 配置入口

  1. 创建入口资源。

    确保在集群中安装并运行 ingress Controller。

  2. 为 Web 应用创建服务。如果尚未创建,以服务的方式公开应用。

    apiVersion: v1
    kind: Service
    metadata:
      name: webapp-service
      namespace: webapp-project
    spec:
      selector:
        app: webapp
      ports:
        - protocol: TCP
          port: 80
          targetPort: 8080
    Copy to Clipboard Toggle word wrap
  3. 创建入口资源。

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: webapp-ingress
      namespace: webapp-project
      annotations:
        kubernetes.io/ingress.class: "nginx"
    spec:
      rules:
        - host: webapp.example.com
          http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: webapp-service
                    port:
                      number: 80
    Copy to Clipboard Toggle word wrap
  4. 使用 TLS 保护入口。

    1. 使用您的证书和密钥创建 TLS secret。

      $ oc create secret tls webapp-tls --cert=path/to/tls.crt --key=path/to/tls.key -n webapp-project
      Copy to Clipboard Toggle word wrap
    2. 更新入口资源以使用 TLS secret。

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: webapp-ingress
        namespace: webapp-project
      spec:
        tls: 
      1
      
          - hosts:
              - webapp.example.com
            secretName: webapp-tls 
      2
      
        rules:
          - host: webapp.example.com
            http:
              paths:
                - path: /
                  pathType: Prefix
                  backend:
                    service:
                      name: webapp-service
                      port:
                        number: 80
      Copy to Clipboard Toggle word wrap
      1
      TLS 部分指定 TLS 设置。
      2
      secretName 字段是包含 TLS 证书和密钥的 Kubernetes secret 的名称。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat