跳至内容

网格入口

网格入口允许用户将外部执行和跳跃节点对等到 AWX 控制平面。本指南重点介绍如何启用和配置网格入口。有关远程执行和跳跃节点以及如何创建它们的更多信息,请参阅 AWX 管理指南的使用实例管理容量章节。

先决条件

  • AWX 运营商版本 > 2.11.0
  • AWX > 23.8.0

部署和配置 AWXMeshIngress

注意

网格入口使用 AWX 实例的 control_plane_ee_imageimage_pull_policy 字段来确定要采用的镜像和策略。默认为 quay.io/ansible/awx-ee:latestAlways。目前没有专门的参数来指定镜像和策略。

在带有运营商管理路由的 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.iotraefik.containo.us 用于 Traefik,但建议使用 traefik.io,因为 traefik.containo.us 在 Traefik v2.10 中已弃用,并在 Traefik v3 中删除。有关弃用信息的更多信息,请参阅Traefik 文档

如果在部署网格入口后,您无法通过 kubectl 命令看到任何 IngressRouteTCP 资源,则应使用 API 组完全限定资源名称,例如 kubectl get ingressroutetcp.traefik.iokubectl 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 页面上可见

mesh ingress instance on AWX UI

该实例应至少具有 2 个侦听器地址。

在此示例中,网格入口有两个侦听器地址

  • 一个用于内部,所有控制节点都使用它进行对等(顶部)
  • 一个用于外部,它暴露给路由,以便外部执行节点可以对等到它(底部)

mesh ingress instance listener address on awx ui

在为新实例选择对等时,网格入口实例现在应该作为选项存在。 在 awx ui 上对等到网格入口

有关如何创建外部远程执行和跳跃节点以及配置网格的更多信息,请参阅 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 (字符串) 运营商管理的入口的入口类型。选项:noneIngressIngressRouteTCPRoute Route(在 OpenShift 上)、none(在 Kubernetes 上)
external_hostname (字符串) External hostname 是一个可选字段,用于指定在入口中定义的外部主机名。此参数在 OpenShift 上自动生成 N/A
external_ipaddress (字符串) External IP Address 是一个可选字段,用于指定在入口中定义的外部 IP 地址 N/A
ingress_api_version (字符串) 运营商管理的入口的 API 版本。当 ingress_typeRoute 时,此参数将被忽略 networking.k8s.io/v1
ingress_annotations (字符串) 运营商管理的入口的其他注释。当 ingress_typeRoute 时,此参数将被忽略 ""
ingress_controller (字符串) 特定入口控制器的特殊配置。当 ingress_typeRoute 时,此参数将被忽略 ""
ingress_class_name (字符串) 要使用的入口类的名称,而不是集群默认值。请参阅IngressSpec。当 ingress_typeRoute 时,此参数将被忽略 ""

AWXMeshIngressStatus

AWXMeshIngressStatus 描述 AWXMeshIngress 的当前状态。

AWXMeshIngressList

AWXMeshIngressList 是 AWXMeshIngress 的集合。

名称 描述
items (AWXMeshIngress) items 是入口列表。
apiVersion (字符串) APIVersion 定义了此对象表示的版本化模式。服务器应将识别的模式转换为最新的内部值,并可能拒绝无法识别的值。更多信息
kind (字符串) Kind 是一个字符串值,表示此对象所代表的 REST 资源。服务器可以从客户端提交请求的端点推断出这一点。不可更新。使用驼峰命名法。更多信息
metadata (ListMeta) 标准对象的元数据。 更多信息