×

了解如何使用YAML配置文件为Red Hat Advanced Cluster Security for Kubernetes (RHACS)配置端点。

您可以使用YAML配置文件来配置公开的端点。您可以使用此配置文件为Red Hat Advanced Cluster Security for Kubernetes定义一个或多个端点,并为每个端点自定义TLS设置,或为特定端点禁用TLS。您还可以定义是否需要客户端身份验证以及要接受哪些客户端证书。

自定义YAML配置

Red Hat Advanced Cluster Security for Kubernetes使用YAML配置作为ConfigMap,使配置更易于更改和管理。

当您使用自定义YAML配置文件时,您可以为每个端点配置以下内容:

  • 要使用的协议,例如HTTPgRPC或两者。

  • 启用或禁用TLS。

  • 指定服务器证书。

  • 客户端证书颁发机构(CA),用于信任客户端身份验证。

  • 指定是否需要客户端证书身份验证(mTLS)。

您可以使用配置文件在安装期间或在Red Hat Advanced Cluster Security for Kubernetes的现有实例上指定端点。但是,如果您公开除默认端口8443以外的任何其他端口,则必须创建允许在这些附加端口上进行流量的网络策略。

以下是Red Hat Advanced Cluster Security for Kubernetes的示例endpoints.yaml配置文件:

# Sample endpoints.yaml configuration for Central.
#
# # CAREFUL: If the following line is uncommented, do not expose the default endpoint on port 8443 by default.
# #          This will break normal operation.
# disableDefault: true # if true, do not serve on :8443 (1)
endpoints: (2)
  # Serve plaintext HTTP only on port 8080
  - listen: ":8080" (3)
    # Backend protocols, possible values are 'http' and 'grpc'. If unset or empty, assume both.
    protocols: (4)
      - http
    tls: (5)
      # Disable TLS. If this is not specified, assume TLS is enabled.
      disable: true (6)
  # Serve HTTP and  gRPC for sensors only on port 8444
  - listen: ":8444" (3)
    tls: (5)
      # Which TLS certificates to serve, possible values are 'service' (For  service certificates that Red Hat Advanced Cluster Security for Kubernetes generates)
      # and 'default' (user-configured default TLS certificate). If unset or empty, assume both.
      serverCerts: (7)
        - default
        - service
      # Client authentication settings.
      clientAuth: (8)
        # Enforce TLS client authentication. If unset, do not enforce, only request certificates
        # opportunistically.
        required: true (9)
        # Which TLS client CAs to serve, possible values are 'service' (CA for service
        # certificates that Red Hat Advanced Cluster Security for Kubernetes generates) and 'user' (CAs for PKI auth providers). If unset or empty, assume both.
        certAuthorities: (10)
        # if not set, assume ["user", "service"]
          - service
1 使用true禁用默认端口号8443上的公开。默认值为false;将其更改为true可能会破坏现有功能。
2 用于公开Central的其他端点的列表。
3 要侦听的地址和端口号。如果您使用endpoints,则必须指定此值。您可以使用格式port:portaddress:port来指定值。例如:
  • 8080:8080 - 在所有接口上的端口8080上侦听。

  • 0.0.0.0:8080 - 在所有IPv4(而不是IPv6)接口上的端口8080上侦听。

  • 127.0.0.1:8080 - 仅在本地环回设备上的端口8080上侦听。

4 用于指定端点的协议。可接受的值为httpgrpc。如果您未指定值,Central将在指定的端口上侦听HTTP和gRPC流量。如果您只想公开用于RHACS门户的端点,请使用http。但是,您将无法将端点用于服务到服务的通信或roxctl CLI,因为这些客户端需要gRPC和HTTP。Red Hat建议您不要指定此键的值,以便为端点启用HTTP和gRPC协议。如果您想将端点限制为仅供Red Hat Advanced Cluster Security for Kubernetes服务使用,请使用**clientAuth**选项。
5 用于指定端点的TLS设置。如果您未指定值,Red Hat Advanced Cluster Security for Kubernetes将为以下所有嵌套键启用具有默认设置的TLS。
6 使用true禁用指定端点上的TLS。默认值为false。当您将其设置为true时,您不能为serverCertsclientAuth指定值。
7 指定要从中配置服务器TLS证书的源列表。serverCerts列表是依赖于顺序的,这意味着列表中的第一项确定Central在没有匹配的SNI(服务器名称指示)时默认使用的证书。您可以使用此方法指定多个证书,Central会根据SNI自动选择正确的证书。可接受的值为:
  • default:如果已配置自定义TLS证书,则使用它。

  • service:使用 Red Hat Advanced Cluster Security for Kubernetes 生成的内部服务证书。

8 使用它来配置启用 TLS 的端点的客户端证书身份验证的行为。
9 使用true仅允许具有有效客户端证书的客户端。默认值为false。您可以将trueservicecertAuthorities设置结合使用,以仅允许 Red Hat Advanced Cluster Security for Kubernetes 服务连接到此端点。
10 用于验证客户端证书的 CA 列表。默认值为["service", "user"]certAuthorities 列表的顺序无关紧要,这意味着此列表中项目的顺序无关紧要。此外,将其设置为空列表[]将禁用端点的客户端证书身份验证,这与不设置此值不同。可接受的值为:
  • service:Red Hat Advanced Cluster Security for Kubernetes 生成的服务证书的 CA。

  • user:由 PKI 身份验证提供程序配置的 CA。

新安装期间配置端点

使用roxctl CLI 安装 Red Hat Advanced Cluster Security for Kubernetes 时,它会创建一个名为central-bundle的文件夹,其中包含部署 Central 所需的 YAML 清单和脚本。

步骤
  1. 生成central-bundle后,打开./central-bundle/central/02-endpoints-config.yaml文件。

  2. 在此文件中,在endpoints.yaml键的data:部分下添加您的自定义 YAML 配置。确保为 YAML 配置保持 4 个空格的缩进。

  3. 继续按照通常的安装说明进行操作。Red Hat Advanced Cluster Security for Kubernetes 将使用指定的配置。

如果您公开除默认端口8443之外的任何其他端口,则必须创建允许在这些其他端口上进行流量的网络策略。

为现有实例配置端点

您可以为现有的 Red Hat Advanced Cluster Security for Kubernetes 实例配置端点。

步骤
  1. 下载现有的 ConfigMap

    $ oc -n stackrox get cm/central-endpoints -o go-template='{{index .data "endpoints.yaml"}}'  > <directory_path>/central_endpoints.yaml
  2. 在下载的central_endpoints.yaml文件中,指定您的自定义 YAML 配置。

  3. 上传并应用修改后的central_endpoints.yaml配置文件

    $ oc -n stackrox create cm central-endpoints --from-file=endpoints.yaml=<directory-path>/central-endpoints.yaml -o yaml --dry-run | \
    oc label -f - --local -o yaml app.kubernetes.io/name=stackrox | \
    oc apply -f -
  4. 重启 Central。

如果您公开除默认端口8443之外的任何其他端口,则必须创建允许在这些其他端口上进行流量的网络策略。

重启 Central 容器

您可以通过终止 Central 容器或删除 Central Pod 来重启 Central 容器。

步骤
  • 运行以下命令来终止 Central 容器:

    您必须等待至少 1 分钟,直到 OpenShift Container Platform 传播您的更改并重启 Central 容器。

    $ oc -n stackrox exec deploy/central -c central -- kill 1
  • 或者,运行以下命令来删除 Central Pod:

    $ oc -n stackrox delete pod -lapp=central

启用通过自定义端口的流量

如果您将端口公开到在同一集群中运行的其他服务或到 Ingress 控制器,则必须仅允许来自集群中的服务或来自 Ingress 控制器代理的流量。否则,如果您使用负载均衡器服务公开端口,则可能需要允许来自所有来源的流量,包括外部来源。使用本节中列出的步骤来允许来自所有来源的流量。

步骤
  1. 克隆allow-ext-to-central Kubernetes 网络策略

    $ oc -n stackrox get networkpolicy.networking.k8s.io/allow-ext-to-central -o yaml > <directory_path>/allow-ext-to-central-custom-port.yaml
  2. 将其用作创建网络策略的参考,并在该策略中指定要公开的端口号。确保更改 YAML 文件的metadata部分中网络策略的名称,以便它不会干扰内置的allow-ext-to-central策略。