6.9. 通过 Ingress 对象创建路由
一些生态系统组件与 Ingress 资源集成,但与路由资源不集成。为了涵盖这种情况,红帽构建的 MicroShift 会在创建 Ingress 对象时自动创建受管路由对象。当相应 Ingress 对象被删除时,这些路由对象会被删除。
流程
在 MicroShift 控制台的 Red Hat build 中或通过
oc create命令定义 Ingress 对象:Ingress 的 YAML 定义
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: frontend annotations: route.openshift.io/termination: "reencrypt"1 route.openshift.io/destination-ca-certificate-secret: secret-ca-cert2 spec: rules: - host: www.example.com3 http: paths: - backend: service: name: frontend port: number: 443 path: / pathType: Prefix tls: - hosts: - www.example.com secretName: example-com-tls-certificate- 1
route.openshift.io/termination注解可用于配置Route的spec.tls.termination字段,因为Ingress没有此字段。可接受的值为edge、passthrough和reencrypt。所有其他值都会被静默忽略。当注解值未设置时,edge是默认路由。模板文件中必须定义 TLS 证书详细信息,才能实现默认的边缘路由。- 3
- 在使用
Ingress对象时,您必须指定一个显式主机名,这与使用路由时不同。您可以使用<host_name>.<cluster_ingress_domain>语法(如apps.openshiftdemos.com)以利用*.<cluster_ingress_domain>通配符 DNS 记录,为集群提供证书。否则,您必须确保有一个用于所选主机名的 DNS 记录。如果您在
route.openshift.io/termination注解中指定passthrough值,在 spec 中将path设置为'',将pathType设置为ImplementationSpecific:spec: rules: - host: www.example.com http: paths: - path: '' pathType: ImplementationSpecific backend: service: name: frontend port: number: 443$ oc apply -f ingress.yaml
- 2
route.openshift.io/destination-ca-certificate-secret可用于 Ingress 对象来定义带有自定义目的地证书(CA)的路由。该注解引用一个 kubernetes secret,secret-ca-cert将插入到生成的路由中。-
要从 ingress 对象使用目标 CA 指定路由对象,您必须在 secret 的
data.tls.crtspecifier 中创建一个带有 PEM 编码格式的证书的kubernetes.io/tls或Opaque类型 secret。
-
要从 ingress 对象使用目标 CA 指定路由对象,您必须在 secret 的
列出您的路由:
$ oc get routes结果包括一个自动生成的路由,其名称以
frontend-开头:NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD frontend-gnztq www.example.com frontend 443 reencrypt/Redirect None如果您检查这个路由,它会类似于:
自动生成的路由的 YAML 定义
apiVersion: route.openshift.io/v1 kind: Route metadata: name: frontend-gnztq ownerReferences: - apiVersion: networking.k8s.io/v1 controller: true kind: Ingress name: frontend uid: 4e6c59cc-704d-4f44-b390-617d879033b6 spec: host: www.example.com path: / port: targetPort: https tls: certificate: | -----BEGIN CERTIFICATE----- [...] -----END CERTIFICATE----- insecureEdgeTerminationPolicy: Redirect key: | -----BEGIN RSA PRIVATE KEY----- [...] -----END RSA PRIVATE KEY----- termination: reencrypt destinationCACertificate: | -----BEGIN CERTIFICATE----- [...] -----END CERTIFICATE----- to: kind: Service name: frontend