网格入口¶
网格入口允许用户将外部执行和跳跃节点对等到 AWX 控制平面。本指南重点介绍如何启用和配置网格入口。有关远程执行和跳跃节点以及如何创建它们的更多信息,请参阅 AWX 管理指南的使用实例管理容量章节。
先决条件¶
- AWX 运营商版本 > 2.11.0
- AWX > 23.8.0
部署和配置 AWXMeshIngress¶
注意
网格入口使用 AWX 实例的 control_plane_ee_image
和 image_pull_policy
字段来确定要采用的镜像和策略。默认为 quay.io/ansible/awx-ee:latest
和 Always
。目前没有专门的参数来指定镜像和策略。
在带有运营商管理路由的 Red Hat OpenShift 上¶
要在 OpenShift 上部署网格入口,请在您的 AWX 实例所在的命名空间中创建 AWXMeshIngress 资源。
示例
---
apiVersion: awx.ansible.com/v1alpha1
kind: AWXMeshIngress
metadata:
name: <mesh ingress name>
spec:
deployment_name: <awx instance name>
在带有运营商管理入口 (NGINX) 的 Kubernetes 上¶
要在具有NGINX 入口控制器的 Kubernetes 集群上部署网格入口,请在您的 AWX 实例所在的命名空间中创建 AWXMeshIngress 资源。
请注意,AWXMeshIngress 需要启用SSL 直通,默认情况下它是禁用的。请确保在您的 NGINX 入口控制器上启用了它。
通过将 ingress_controller
指定为 nginx
,AWX 运营商将生成具有 nginx.ingress.kubernetes.io/ssl-passthrough
注释设置为 "true"
的入口资源。
示例
---
apiVersion: awx.ansible.com/v1alpha1
kind: AWXMeshIngress
metadata:
name: <mesh ingress name>
spec:
deployment_name: <awx instance name>
ingress_type: Ingress
ingress_controller: nginx
ingress_class_name: nginx
external_hostname: <fqdn for mesh ingress>
在带有运营商管理入口 (Traefik) 的 Kubernetes 上¶
要在具有Traefik Kubernetes 入口提供程序的 Kubernetes 集群上部署网格入口,请在您的 AWX 实例所在的命名空间中创建 AWXMeshIngress 资源。
请注意,通过部署以下 AWXMeshIngress,AWX 运营商将生成具有 websecure
作为 entryPoints
的 IngressRouteTCP 资源。如果这不能满足您的需求,请参阅用户管理入口部分并手动创建 IngressRouteTCP 资源。
示例
---
apiVersion: awx.ansible.com/v1alpha1
kind: AWXMeshIngress
metadata:
name: <mesh ingress name>
spec:
deployment_name: <awx instance name>
ingress_type: IngressRouteTCP
ingress_controller: traefik
ingress_class_name: traefik
ingress_api_version: traefik.io/v1alpha1
external_hostname: <fqdn for mesh ingress>
提示
AWX 运营商在 ingress_api_version
中同时支持 API 组 traefik.io
和 traefik.containo.us
用于 Traefik,但建议使用 traefik.io
,因为 traefik.containo.us
在 Traefik v2.10 中已弃用,并在 Traefik v3 中删除。有关弃用信息的更多信息,请参阅Traefik 文档。
如果在部署网格入口后,您无法通过 kubectl
命令看到任何 IngressRouteTCP 资源,则应使用 API 组完全限定资源名称,例如 kubectl get ingressroutetcp.traefik.io
或 kubectl get ingressroutetcp.traefik.containo.us
。
在带有用户管理入口的 Kubernetes 上¶
要在 Kubernetes 集群上部署网格入口,请在您的 AWX 实例所在的命名空间中创建 AWXMeshIngress 资源。
或者,如果您希望创建自己的入口资源,您可以将 ingress_type
设置为 none
部署网格入口,然后手动创建具有任何配置的入口资源。
在这种情况下,仍然需要 external_hostname
,因为它用于生成 Receptor 将使用的证书。
示例
---
apiVersion: awx.ansible.com/v1alpha1
kind: AWXMeshIngress
metadata:
name: <mesh ingress name>
spec:
deployment_name: <awx instance name>
ingress_type: none # This line can be omitted since this is the default value
external_hostname: <fqdn for mesh ingress>
用户管理入口资源的要求如下
- 支持 WebSocket
- 启用了 SSL/TLS 直通
- 可通过端口
443
访问 - 在 AWXMeshIngress 资源中具有与
external_hostname
相同的主机名 - 将流量路由到与 AWXMeshIngress 资源名称相同的服务的端口
27199
以下是 NGINX 和 Traefik 的入口资源示例。
# Ingress for NGINX Ingress Controller
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: <mesh ingress name>
annotations:
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
spec:
ingressClassName: nginx
rules:
- host: <fqdn for mesh ingress>
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: <mesh ingress name>
port:
number: 27199
# Ingress for Traefik Kubernetes Ingress provider
---
apiVersion: traefik.io/v1alpha1
kind: IngressRouteTCP
metadata:
name: <mesh ingress name>
spec:
entryPoints:
- websecure
routes:
- match: HostSNI(`<fqdn for mesh ingress>`)
services:
- name: <mesh ingress name>
port: 27199
tls:
passthrough: true
验证网格入口的设置¶
成功创建 AWXMeshIngress 后,将向 AWX 注册一个具有相同名称的新实例,并且该实例将在实例 UI 页面上可见
该实例应至少具有 2 个侦听器地址。
在此示例中,网格入口有两个侦听器地址
- 一个用于内部,所有控制节点都使用它进行对等(顶部)
- 一个用于外部,它暴露给路由,以便外部执行节点可以对等到它(底部)
在为新实例选择对等时,网格入口实例现在应该作为选项存在。
有关如何创建外部远程执行和跳跃节点以及配置网格的更多信息,请参阅 AWX 文档中的添加实例。
自定义资源定义¶
AWXMeshIngress¶
AWXMeshIngress 控制 AWX 上网格入口的部署和配置
名称 | 描述 |
---|---|
apiVersion |
awx.ansible.com/v1alpha1 |
kind |
AWXMeshIngress |
metadata (ObjectMeta) |
标准对象的元数据。 更多信息 |
spec (AWXMeshIngressSpec) |
Spec 是 AWXMeshIngress 的期望状态。 更多信息 |
status (AWXMeshIngressStatus) |
Status 是 AWXMeshIngress 的当前状态。 更多信息 |
AWXMeshIngressSpec¶
AWXMeshIngressSpec 是 AWXMeshIngress 配置的描述。
名称 | 描述 | 默认值 |
---|---|---|
deployment_name (字符串),必需 |
要为其创建网格入口的 AWX 部署的名称。 | awx |
ingress_type (字符串) |
运营商管理的入口的入口类型。选项:none 、Ingress 、IngressRouteTCP 、Route |
Route (在 OpenShift 上)、none (在 Kubernetes 上) |
external_hostname (字符串) |
External hostname 是一个可选字段,用于指定在入口中定义的外部主机名。此参数在 OpenShift 上自动生成 | N/A |
external_ipaddress (字符串) |
External IP Address 是一个可选字段,用于指定在入口中定义的外部 IP 地址 | N/A |
ingress_api_version (字符串) |
运营商管理的入口的 API 版本。当 ingress_type 为 Route 时,此参数将被忽略 |
networking.k8s.io/v1 |
ingress_annotations (字符串) |
运营商管理的入口的其他注释。当 ingress_type 为 Route 时,此参数将被忽略 |
"" |
ingress_controller (字符串) |
特定入口控制器的特殊配置。当 ingress_type 为 Route 时,此参数将被忽略 |
"" |
ingress_class_name (字符串) |
要使用的入口类的名称,而不是集群默认值。请参阅IngressSpec。当 ingress_type 为 Route 时,此参数将被忽略 |
"" |
AWXMeshIngressStatus¶
AWXMeshIngressStatus 描述 AWXMeshIngress 的当前状态。
AWXMeshIngressList¶
AWXMeshIngressList 是 AWXMeshIngress 的集合。
名称 | 描述 |
---|---|
items (AWXMeshIngress) |
items 是入口列表。 |
apiVersion (字符串) |
APIVersion 定义了此对象表示的版本化模式。服务器应将识别的模式转换为最新的内部值,并可能拒绝无法识别的值。更多信息 |
kind (字符串) |
Kind 是一个字符串值,表示此对象所代表的 REST 资源。服务器可以从客户端提交请求的端点推断出这一点。不可更新。使用驼峰命名法。更多信息 |
metadata (ListMeta) |
标准对象的元数据。 更多信息 |