示例实现细节#

服务网格使用基于 Istio 的服务网格来创建安全、可观察且高度可配置的通信层。OIDC 由 Keycloak、DEX 或其他商业解决方案等工具作为 OIDC 提供商提供。NVIDIA 开发并测试了本文档,使用了以下安装方法。

先决条件#

  • Kubernetes 集群和 cluster-admin 角色。有关支持的操作系统和 Kubernetes 平台的信息,请参阅平台支持

  • Linux 虚拟机或 Windows 上的 WSL。

使用 Istio 安装服务网格#

  1. 运行以下命令下载 Istio。

    curl https://raw.githubusercontent.com/istio/istio/release-1.23/release/downloadIstioCandidate.sh | sh -
    

    下载会创建一个目录,名称类似于 istio-1.2x.x

  2. 更改目录到 Istio 目录。

    cd istio-1.23.2
    
  3. istioctl 添加到 PATH

    export PATH=$PWD/bin:$PATH
    
  4. 可选:对于 VMware Tanzu Kubernetes 或 Red Hat OpenShift,创建一个命名空间并标记该命名空间以运行特权 Pod。

    kubectl create ns istio-system
    
    kubectl label --overwrite ns istio-system pod-security.kubernetes.io/warn=privileged  pod-security.kubernetes.io/enforce=privileged
    
  5. 使用演示配置文件安装 Istio。

    istioctl install --set profile=demo -y
    
  6. 确定集群上的存储类。Grafana Loki 使用持久存储,您必须指定一个存储类。

    kubectl get storageclass
    
  7. 更新 Loki 的存储类。

    sed -i '/accessModes:/i\        storageClassName: <storage-class-name> ' samples/addons/loki.yaml
    
  8. 运行以下命令安装 Prometheus、Grafana 和 Jaeger 等附加组件。

    kubectl rollout status deployment/kiali -n istio-system
    
    kubectl rollout status deployment/kiali -n istio-system
    

安装 OIDC Keycloak#

  1. 标记默认命名空间以运行特权 Pod。

    kubectl label --overwrite ns default pod-security.kubernetes.io/warn=privileged  pod-security.kubernetes.io/enforce=privileged
    
  2. 安装 KeyCloak。

    kubectl create -f https://raw.githubusercontent.com/keycloak/keycloak-quickstarts/latest/kubernetes/keycloak.yaml
    

配置 KeyCloak#

  1. 确定 Keycloak 服务的节点端口。

    kubectl get svc
    

    示例输出

    NAME       TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)          AGE
    keycloak   LoadBalancer   10.108.216.157   10.28.234.100   8080:30111/TCP   21h
    
  2. 列出工作节点 IP 地址,然后将其中任何一个与服务节点端口一起使用。

    for node in `kubectl get nodes | awk '{print $1}' | grep -v NAME`; do echo $node ' ' | tr -d '\n'; kubectl describe node $node | grep -i 'internalIP:' | awk '{print $2}'; done
    

    示例输出

    test-cluster-03-worker-nbhk9-56b4b888dd-8lpqd  10.120.199.16
    test-cluster-03-worker-nbhk9-56b4b888dd-hnrxr  10.120.199.23
    
  3. 使用任何工作节点 IP 地址访问 Keycloak 管理界面。

    10.120.199.15:30111
    
  4. 访问应用程序后,您可以看到如下页面。单击“Administration Console” (管理控制台)。

  5. 输入默认凭据 adminadmin,然后登录。

  6. 创建一个新的 Realm (域)。

  7. 输入 Realm Name (域名) 为 nvidia-nim,然后单击 Create (创建)。

  8. 单击导航栏上的 Clients (客户端),然后单击 Create client (创建客户端)。

  9. 提供 Client ID (客户端 ID) 为 nvidia-nim,然后单击 Next (下一步),步骤 2 和 3 使用默认值。

  10. 导航到左侧窗格上的 Realm roles (域角色),然后单击 Create (创建) 以创建角色。

  11. 创建角色,名称为 chat,然后保存。

  12. 创建另一个角色,名称为 completions,然后保存。

  13. 导航到左侧窗格上的 Users (用户),然后单击 Add user (添加用户)。

  14. 创建一个用户,名称为 nim,然后单击 Create (创建)。

    Keycloak 显示 nim User details (用户详细信息) 页面。

  15. nim User details (用户详细信息) 页面上,单击 Credentials (凭据),然后单击 Set password (设置密码) 以创建密码。

  16. 输入密码 nvidia,将 Temporary (临时) 开关设置为 Off (关闭),然后单击 Save (保存)。

  17. 导航到 nimuserRole Mapping0 (角色映射 0) 选项卡,然后单击 Assign Role (分配角色)。

  18. nimuser 启用 chatcompletion 角色,然后单击 Assign (分配)。

下一步#

  • 请参阅配置 RBAC以创建和验证入口资源。