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 终止。
1.8.4. 示例:配置路由和入口以公开 Web 应用程序 复制链接链接已复制到粘贴板!
Web 应用程序在 OpenShift Container Platform 集群上运行。您希望外部用户访问应用程序。该应用应该可通过特定的域名访问,流量应该使用 TLS 安全加密。以下示例演示了如何配置路由和入口,以安全地将 Web 应用程序公开给外部流量。
1.8.4.1. 配置路由 复制链接链接已复制到粘贴板!
创建一个新项目。
$ oc new-project webapp-project部署 Web 应用。
$ oc new-app nodejs:12~https://github.com/sclorg/nodejs-ex.git --name=webapp使用路由公开服务。
$ oc expose svc/webapp --hostname=webapp.example.com使用 TLS 保护路由。
使用您的证书和密钥创建 TLS secret。
$ oc create secret tls webapp-tls --cert=path/to/tls.crt --key=path/to/tls.key更新路由以使用 TLS secret。
$ oc patch route/webapp -p '{"spec":{"tls":{"termination":"edge","certificate":"path/to/tls.crt","key":"path/to/tls.key"}}}'
1.8.4.2. 配置入口 复制链接链接已复制到粘贴板!
创建入口资源。
确保在集群中安装并运行 ingress Controller。
为 Web 应用创建服务。如果尚未创建,以服务的方式公开应用。
apiVersion: v1 kind: Service metadata: name: webapp-service namespace: webapp-project spec: selector: app: webapp ports: - protocol: TCP port: 80 targetPort: 8080创建入口资源。
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使用 TLS 保护入口。
使用您的证书和密钥创建 TLS secret。
$ oc create secret tls webapp-tls --cert=path/to/tls.crt --key=path/to/tls.key -n webapp-project更新入口资源以使用 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-tls2 rules: - host: webapp.example.com http: paths: - path: / pathType: Prefix backend: service: name: webapp-service port: number: 80