# 部署

当[部署 Operator](https://documentation.alluxio.io/ee-ai-cn/ai-3.7/administration/overview/pages/HD0nViQ7plYnUT2Cglob#id-2.-bu-shu-alluxio-operator)时，如下所示附加一个新的 `console` 部分。

```yaml
global:
  image: <PRIVATE_REGISTRY>/alluxio-operator
  imageTag: 3.3.2

console:
  web:
    authType: none
```

当 `authType` 为 `none` 时，管理控制台没有登录页面，也不执行任何身份验证。

为了生产环境的安全，建议启用身份验证。您可以将 `authType` 更改为 `okta` 以与 Okta 集成。更多详情，请参阅 [Okta Auth Type](#okta-ren-zheng-lei-xing)。

启用 Okta 的配置示例：

```yaml
global:
  image: <PRIVATE_REGISTRY>/alluxio-operator
  imageTag: 3.3.2

console:
  web:
    authType: okta
    oktaIssuer: https://your-okta-domain/oauth2/default
    oktaClientID: your-client-id-value
```

安装 Operator 后，您可以验证控制台 pod 是否在 `alluxio-operator` 命名空间中运行：

```bash
kubectl get pods -n alluxio-operator
```

示例输出：

```bash
NAME                                             READY   STATUS    RESTARTS   AGE
alluxio-cluster-controller-6768ff89dc-4dggt      1/1     Running   0          2m
alluxio-collectinfo-controller-87bbf67c8-m6rf6   1/1     Running   0          2m
alluxio-console-7ff487467c-kt88v                 1/1     Running   0          2m
alluxio-csi-controller-67b6c49786-55g9w          2/2     Running   0          2m
alluxio-csi-nodeplugin-lszbp                     2/2     Running   0          2m
alluxio-csi-nodeplugin-pmcwg                     2/2     Running   0          2m
alluxio-csi-nodeplugin-qknjd                     2/2     Running   0          2m
alluxio-license-controller-55fb54868-rmsq8       1/1     Running   0          2m
alluxio-ufs-controller-579c85f95f-vpd8d          1/1     Running   0          2m
```

查找 `alluxio-console-*` pod（在此示例中为 `alluxio-console-7ff487467c-kt88v`）以确认管理控制台正在运行。确认后，您可以按照下述方式访问管理控制台。

## 访问管理控制台

有几种方法可以访问控制台。

### 通过节点主机名访问

默认情况下，管理控制台会创建一个 `ClusterIP` 类型的 Kubernetes 服务，使其只能在集群内部访问。要从外部通过主机名或 IP 地址访问，您可以将服务类型更改为 `NodePort` 并指定一个端口（例如 `30002`）来暴露服务。

```yaml
global:
  image: <PRIVATE_REGISTRY>/alluxio-operator
  imageTag: 3.3.2

console:
  web:
    authType: okta
    oktaIssuer: https://your-okta-domain/oauth2/default
    oktaClientID: your-client-id-value
  service:
    type: NodePort
    ports:
      api: 80
    nodePort: 30002
```

如果您知道主机的 IP 地址并已配置适当的安全组（具体设置取决于您的云服务提供商），您可以通过 `IP-address:30002` 访问服务。

如果您想通过主机名访问，可以获取主机名：

```shell
kubectl -n alluxio-operator get pod $(kubectl -n alluxio-operator get pod -l app.kubernetes.io/component=console --no-headers -o custom-columns=:metadata.name) -o jsonpath='{.spec.nodeName}'
```

假设主机名是 `foo.kubernetes.org`，那么您可以在以下地址访问管理控制台：

```
http://foo.kubernetes.org:80/
```

### 通过负载均衡器访问

要从外部暴露管理控制台，您可以配置一个 `LoadBalancer` 类型的 Kubernetes 服务。这允许来自集群外部的流量到达控制台组件。

以下是通过负载均衡器暴露控制台的服务定义示例：

```yaml
apiVersion: v1
kind: Service
metadata:
  name: load-balancer
  namespace: alluxio-operator
  annotations:
    # 以下注释是针对 AWS 的。对于其他云提供商，请参阅其文档以了解 LoadBalancer 配置。
    service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
    service.beta.kubernetes.io/aws-load-balancer-type: nlb
spec:
  type: LoadBalancer
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  selector:
    app.kubernetes.io/instance: operator
    app.kubernetes.io/name: console
```

将以上内容保存为 `load-balancer.yaml` 并通过以下命令创建：

```shell
kubectl create -f load-balancer.yaml
```

服务创建后，Kubernetes 将根据您的云提供商提供一个外部 IP 或 DNS 名称。您可以使用以下命令检查状态：

```bash
kubectl -n alluxio-operator get service load-balancer
```

示例输出：

```bash
load-balancer   LoadBalancer   171.33.111.33  some-random-string.region.elb.amazonaws.com   80:30977/TCP   8m50s
```

您现在可以在浏览器中使用外部 IP 或 DNS 名称访问管理控制台。

### 集群管理

进入主页后，页面将显示当前 Kubernetes 环境中所有已部署的 Alluxio 集群。

<figure><img src="/files/HqSKza51ra8jbg2paNOh" alt=""><figcaption></figcaption></figure>

您也可以单击“添加集群”按钮来创建新集群。系统提供两种创建集群的方式：

* **手动配置**：通过填写表单来配置集群参数，适用于需要逐步配置的场景
* **上传 Yaml**：直接上传现有的 Alluxio YAML 配置文件，适用于已存在配置文件的情况

在此示例中，我们演示如何使用手动配置通过填写表单来创建集群。

<figure><img src="/files/LVsFTt2OQqlIGcHmeeKq" alt=""><figcaption></figcaption></figure>

在手动配置页面，您需要填写集群的基本信息。

在此示例中，我们将部署一个带有控制台的集群，因此我们需要同时启用网关和控制台。

<figure><img src="/files/AjqfDKJwHujVIUTcnmO1" alt=""><figcaption></figcaption></figure>

单击“下一步”后，系统将生成一个资源类型为 AlluxioCluster 的 YAML 文件。此文件将用于创建一个名为“alluxio”的新集群。您可以根据需要编辑此 YAML 文件，添加或修改配置项。

<figure><img src="/files/lpfQjrddcQidbq0YyaBz" alt=""><figcaption></figcaption></figure>

从生成的 YAML 文件中，您可以看到由于启用了网关和控制台，系统已自动为这两个组件生成了基本配置。接下来，我们将重点关注与控制台相关的配置选项。

#### 启用审计日志

审计日志记录管理控制台中的用户活动和系统事件，以用于安全和合规目的。此功能默认启用，无需额外配置。

**访问审计日志：** 您可以在 Web 控制台 Pod 内的 `/opt/alluxio/console/audit-logs/console-audit.log` 查看日志文件。

**配置示例：**

```yaml
apiVersion: k8s-operator.alluxio.com/v1
kind: AlluxioCluster
spec:
  console:
    enabled: true
    image: <PRIVATE_REGISTRY>/alluxio-console
    imageTag: AI-3.7-13.0.0
    auditLog:
      enabled: true  # 设置为 false 以禁用审计日志
```

### 配置网关和控制台之间的 TLS 连接

当您的网关中启用 TLS（传输层安全）时，您需要配置管理控制台以建立安全的 TLS 连接。这包括向 Web 控制台提供 CA（证书颁发机构）证书，它将使用该证书来验证网关的 TLS 证书。

1. **准备证书文件**
   * 获取有效的 CA 证书文件（通常名为 `ca.crt`）
   * 准备网关证书（`server.crt`）和私钥（`server.key`）文件
   * 确保网关证书由 CA 正确签名
2. **创建 Kubernetes 秘密**

   ```bash
   # 使用 CA 证书、网关证书和密钥创建secret
   kubectl create secret generic gateway-k8s-secret-name \
     --from-file=ca.crt=/path/to/ca.crt \
     --from-file=server.key=/path/to/server.key \
     --from-file=server.crt=/path/to/server.crt \
     --namespace=alx-ns
   ```
3. **配置您的 Alluxio 集群**

   ```yaml
   apiVersion: k8s-operator.alluxio.com/v1
   kind: AlluxioCluster
   spec:
     gateway:
       enabled: true
       image: <PRIVATE_REGISTRY>/alluxio-gateway
       imageTag: AI-3.7-13.0.0
       tls:
         enabled: true
         secretName: gateway-k8s-secret-name 
         certFile: server.crt 
         certKeyFile: server.key 
     console:
       enabled: true
       image: <PRIVATE_REGISTRY>/alluxio-dashboard
       imageTag: AI-3.7-13.0.0
       gateway:
         secretName: gateway-k8s-secret-name  
         caFile: ca.crt                  
   ```

**重要说明：**

* 您配置中的 `secretName` 必须与创建的 Kubernetes secret 的名称完全匹配
* 所有文件名（`caFile`、`certFile`、`certKeyFile`）必须与 secret 中使用的文件名匹配
* 验证您的 CA 证书和网关证书是否有效且未过期
* 管理控制台在连接期间使用 CA 证书来验证网关的 TLS 证书
* **关键：** CA 证书必须与网关证书属于同一证书链；使用不相关的 CA 将导致 TLS 验证失败

### Okta 认证类型

Okta 身份验证为您的管理控制台提供安全的企业级访问控制。请按照以下步骤设置和使用 Okta 身份验证：

**1. 在 Okta 中配置应用程序**

1. 登录到您的 Okta 管理仪表板
2. 导航到 **应用程序** > **应用程序**
3. 单击 **创建应用集成**
4. 选择 **单页应用程序 (SPA)** 类型
   * 此应用程序类型利用 [带 PKCE 的授权码流程](https://developer.okta.com/docs/guides/implement-grant-type/authcodepkce/main/#about-the-authorization-code-grant-with-pkce) 来安全地获取客户端令牌

<figure><img src="/files/tfybw7N0rzzv5oWi9tu0" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/xhAWmCpeqOtzflikl678" alt=""><figcaption></figcaption></figure>

5. 使用您的应用程序名称和一些选项完成基本配置

<figure><img src="/files/dcjiJxATNvRy92BW2oYW" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/3VADGZQxg4TbRvzM5WDA" alt=""><figcaption></figcaption></figure>

6. 在应用程序设置的 **登录** 部分，配置：
   * **登录重定向 URI**：`http://your-domain:your-port/login/callback`
   * **注销重定向 URI**：`http://your-domain:your-port/user/login`
   * 将 `your-domain` 和 `your-port` 替换为您的实际域和端口值
   * 这些设置确保在 Okta 身份验证完成后正确重定向

<figure><img src="/files/IrChtnc4cDsR2K1WyLIb" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/Z94H4aaZ4NDrOzgfZVzD" alt=""><figcaption></figcaption></figure>

7. 保存您的应用程序配置

**2. 用户组分配和授权**

要控制对管理控制台的访问：

1. 在您的 Okta 管理仪表板中，导航到 **目录** > **组**

<figure><img src="/files/QrFfnDnLFlyWELPXcaFB" alt=""><figcaption></figcaption></figure>

2. 如果尚不存在，请创建用户组（例如，“Admins”）
3. 将适当的用户分配到这些组
4. 返回到您的应用程序设置
5. 在 **分配** 选项卡下，分配应有权访问管理控制台的用户组

<figure><img src="/files/3PElDSODoeZ9JZCK0ApE" alt=""><figcaption></figcaption></figure>

**3. 授权服务器配置**

管理控制台需要特定的 OAuth 范围才能正常运行：

1. 在您的 Okta 管理仪表板中，导航到 **安全** > **API**
2. 选择您的授权服务器（或根据需要创建一个）
3. 转到 **范围** 选项卡
4. 单击 **添加范围**

<figure><img src="/files/yLmjWwM9QDPvJnTUqj8n" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/8CQT7b9dboHgee4xlxb5" alt=""><figcaption></figcaption></figure>

5. 创建一个名为 `alluxio` 的范围，并附上适当的描述
6. 管理控制台需要 `openid` 范围（Okta 中的默认范围）和此自定义 `alluxio` 范围
7. 如果在您的部署中启用了授权，请将您指定的声明与此范围关联。在下面的屏幕截图中，授权配置中的 `roleFieldName` 设置为 `userType`，`groupFieldName` 设置为 `department`。请访问 [用户角色和访问控制](/ee-ai-cn/ai-3.7/administration/overview/user-roles-access-control.md) 了解更多信息。

<figure><img src="/files/KLLzrZwpOwP1TxmkMHiQ" alt=""><figcaption></figcaption></figure>

**4. 获取配置值**

完成设置后，为您的管理控制台配置收集这些值：

1. **Okta 颁发者 URL**：
   * 在您的 Okta 管理仪表板中导航到 **安全** > **API**
   * 选择您的授权服务器
   * 复制颁发者 URL（格式：`https://your-okta-domain/oauth2/default`）
2. **客户端 ID**：
   * 转到您的应用程序设置
   * 从 **客户端凭据** 部分复制客户端 ID
3. 使用这些值更新您的 Alluxio 配置：

   ```yaml
   web:
     authType: okta
     oktaIssuer: https://your-okta-domain/oauth2/default
     oktaClientID: your-client-id-value
   ```

**5. 登录过程**

<figure><img src="/files/oPwxxC8zp7qvfTh0iXbi" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/oxBhStZ340rkEqdF6zu1" alt=""><figcaption><p>带 Okta 选项的管理控制台登录页面</p></figcaption></figure>

<figure><img src="/files/NtLZnnBM8HBmKRj3Ifqk" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/LHNYfAG1cRDpVLMDhhao" alt=""><figcaption><p>Okta 认证门户</p></figcaption></figure>

使用 Okta 身份验证时：

1. 导航到您的管理控制台 URL
2. 登录页面将显示一个“使用 Okta 登录”按钮
3. 单击此按钮将被重定向到您组织的 Okta 身份验证门户
4. 输入您的 Okta 凭据并完成任何多因素身份验证（如果已配置）
5. 成功验证后，您将被重定向回管理控制台的仪表板
6. 您的会话将根据您的 Okta 令牌配置保持活动状态

**6. Okta 集成故障排除**

如果您遇到 Okta 身份验证问题：

* 验证重定向 URI 在 Okta 和您的应用程序中都已正确配置
* 检查用户是否已分配到有权访问应用程序的适当组
* 确保 `alluxio` 范围已正确创建并与您的授权服务器关联
* 确认您配置中的颁发者 URL 和客户端 ID 与 Okta 中的值匹配

### 配置授权

管理控制台支持访问控制，以根据角色和职责限制用户权限。可以配置授权来控制哪些用户可以访问特定功能并在系统内执行某些操作。

有关设置和管理授权的详细说明，请参阅 [用户角色和访问控制](/ee-ai-cn/ai-3.7/administration/overview/user-roles-access-control.md) 文档。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://documentation.alluxio.io/ee-ai-cn/ai-3.7/administration/overview/deployment.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
