第 1 章 Routes


1.1. 创建基本路由

如果您有未加密的 HTTP,您可以使用一个路由对象来创建一个基本路由。

1.1.1. 创建基于 HTTP 的路由

您可以使用以下流程,使用 hello-openshift 应用程序创建基于 HTTP 的简单路由,作为一个示例。

您可以创建一个路由,通过公共 URL 托管您的应用程序。根据应用程序的网络安全配置,路由可以是安全的或不受保护的。基于 HTTP 的路由是一个不受保护的路由,它使用基本的 HTTP 路由协议,并在未安全的应用程序端口上公开服务。

先决条件

  • 已安装 OpenShift CLI(oc)。
  • 以管理员身份登录。
  • 您有一个 web 应用,用于公开端口和侦听端口上流量的 TCP 端点。

流程

  1. 运行以下命令,创建一个名为 hello-openshift 的项目:

    $ oc new-project hello-openshift
  2. 运行以下命令,在项目中创建 pod:

    $ oc create -f https://raw.githubusercontent.com/openshift/origin/master/examples/hello-openshift/hello-pod.json
  3. 运行以下命令,创建名为 hello-openshift 的服务:

    $ oc expose pod/hello-openshift
  4. 运行以下命令,创建一个没有安全安全的路由到 hello-openshift 应用程序:

    $ oc expose svc hello-openshift

验证

  • 要验证您创建的路由资源,请运行以下命令:

    $ oc get routes -o yaml hello-openshift

    创建的未安全路由的 YAML 定义示例

    apiVersion: route.openshift.io/v1
    kind: Route
    metadata:
      name: hello-openshift
    spec:
      host: www.example.com
      port:
        targetPort: 8080
      to:
        kind: Service
        name: hello-openshift

    其中:

    主机
    指定指向该服务的别名 DNS 记录。此字段可以是任何有效的 DNS 名称,如 www.example.com。DNS 名称必须遵循 DNS952 子域惯例。如果没有指定,则会自动生成路由名称。
    targetPort

    指定由此路由指向的服务选择的 pod 上的目标端口。

    注意

    要显示您的默认入口域,请运行以下命令:

    $ oc get ingresses.config/cluster -o jsonpath={.spec.domain}

1.1.2. 基于路径的路由

要使用单个主机名为多个应用程序提供服务,请配置基于路径的路由。此基于 HTTP 的配置通过比较 URL 路径组件将流量定向到特定的服务,确保请求与定义的最具体的路由匹配。

下表显示了路由及其可访问性示例:

Expand
表 1.1. 路由可用性
Route相较于可访问

www.example.com/test

www.example.com/test

www.example.com

www.example.com/testwww.example.com

www.example.com/test

www.example.com

www.example.com

www.example.com/text

yes(由主机匹配,而不是路由)

www.example.com

带有路径的未安全路由示例

apiVersion: route.openshift.io/v1
kind: Route
metadata:
  name: route-unsecured
spec:
  host: www.example.com
  path: "/test"
  to:
    kind: Service
    name: service-name

  • spec.host :指定基于路径的路由的 path 属性。
注意

使用 passthrough TLS 时,基于路径的路由不可用,因为路由器不会在这种情况下终止 TLS,且无法读取请求的内容。

1.1.3. 关于从 Ingress 传播到 Route 资源的标签

您可以选择一个使 Ingress Operator 自动传播标签的功能。这可让您添加有助于跟踪或管理资源的元数据,或者控制依赖于标签的特定行为。

默认情况下,受管 Route 对象不会继承 Ingress 资源的标签。当您启用传播功能时,Operator 会主动协调生成的 Route 资源上的标签,以匹配父 Ingress 资源上的标签。

注意

启用标签传播后,Ingress Operator 会将受管 Route 资源上的所有标签替换为父 Ingress 资源中的确切标签集合。任何手动添加到 Route 资源的标签都会被删除。

传播行为由 Ingress 资源上的 route.openshift.io/reconcile-labels 注解控制。Operator 的行为根据此注解的状态而有所变化:

  • 注解不存在(默认):Operator 不会将 Ingress 资源中的标签同步到 Route 资源。Route 上的任何现有标签都会被保留。
  • 启用注解(route.openshift.io/reconcile-labels: "true"): Operator 启用标签传播。在下一个协调(由 Ingress 创建或更新事件触发),Operator 会将生成的 Route 资源上的所有标签替换为 Ingress 资源的标签。
  • 注解禁用(删除或值设为非"true") :Operator 禁用标签传播。Route 资源上当前存在的标签按原样保存,但 Operator 不再与 Ingress 资源同步。
  • 重新启用注解:Operator 恢复传播。它将再次将 Route 资源上的所有标签替换为 Ingress 资源的当前标签。

1.1.4. 启用从 Ingress 到 Route 资源的标签传播

您可以启用 Ingress Operator,将标签从 Ingress 资源自动传播到它管理的 Route 资源。要启用此功能,您必须将 reconcile-labels 注解添加到 Ingress 资源中。

先决条件

  • 您可以访问 Red Hat OpenShift Service on AWS 集群。
  • 您有 cluster-admin 角色或权限来在项目中创建并编辑 Ingress 资源。

流程

  1. 创建或编辑 Ingress 资源清单。
  2. metadata.annotations 部分中,添加 route.openshift.io/reconcile-labels: "true"
  3. metadata.labels 部分中,添加您要传播的标签。

    启用标签传播的 Ingress 资源示例:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: example-ingress
      annotations:
        route.openshift.io/reconcile-labels: "true"
      labels:
        app: my-app
        owner: dev-team
    spec:
      ingressClassName: openshift-default
      rules:
      - host: example.com
        http:
          paths:
          - backend:
              service:
                name: example-service
                port:
                  number: 27017
            path: "/"
            pathType: "Prefix"
  4. 将清单应用到集群:

    $ oc apply -f <example-ingress-manifest.yaml>

    使用特定清单文件的名称替换 <example-ingress-manifest.yaml>

  5. 验证 Ingress 资源的标签是否已传播到生成的 Route 资源:

    $ oc get route -l app=my-app --show-labels

    输出示例:

    NAME          HOST/PORT     PATH   SERVICES          PORT    TERMINATION   WILDCARD   LABELS
    example-rt    example.com   /      example-service   8080                  None       app=my-app,owner=dev-team
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

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

让开源更具包容性

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

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部