示例实现细节#
服务网格使用基于 Istio 的服务网格来创建安全、可观察且高度可配置的通信层。OIDC 由 Keycloak、DEX 或其他商业解决方案等工具作为 OIDC 提供商提供。NVIDIA 开发并测试了本文档,使用了以下安装方法。
先决条件#
Kubernetes 集群和 cluster-admin 角色。有关支持的操作系统和 Kubernetes 平台的信息,请参阅平台支持。
Linux 虚拟机或 Windows 上的 WSL。
使用 Istio 安装服务网格#
运行以下命令下载 Istio。
curl https://raw.githubusercontent.com/istio/istio/release-1.23/release/downloadIstioCandidate.sh | sh -
下载会创建一个目录,名称类似于
istio-1.2x.x
。更改目录到 Istio 目录。
cd istio-1.23.2
将
istioctl
添加到PATH
。export PATH=$PWD/bin:$PATH
可选:对于 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
使用演示配置文件安装 Istio。
istioctl install --set profile=demo -y
确定集群上的存储类。Grafana Loki 使用持久存储,您必须指定一个存储类。
kubectl get storageclass
更新 Loki 的存储类。
sed -i '/accessModes:/i\ storageClassName: <storage-class-name> ' samples/addons/loki.yaml
运行以下命令安装 Prometheus、Grafana 和 Jaeger 等附加组件。
kubectl rollout status deployment/kiali -n istio-system
kubectl rollout status deployment/kiali -n istio-system
安装 OIDC Keycloak#
标记默认命名空间以运行特权 Pod。
kubectl label --overwrite ns default pod-security.kubernetes.io/warn=privileged pod-security.kubernetes.io/enforce=privileged
安装 KeyCloak。
kubectl create -f https://raw.githubusercontent.com/keycloak/keycloak-quickstarts/latest/kubernetes/keycloak.yaml
配置 KeyCloak#
确定 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
列出工作节点 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
使用任何工作节点 IP 地址访问 Keycloak 管理界面。
10.120.199.15:30111
访问应用程序后,您可以看到如下页面。单击“Administration Console” (管理控制台)。
输入默认凭据
admin
和admin
,然后登录。创建一个新的 Realm (域)。
输入 Realm Name (域名) 为
nvidia-nim
,然后单击 Create (创建)。单击导航栏上的 Clients (客户端),然后单击 Create client (创建客户端)。
提供 Client ID (客户端 ID) 为
nvidia-nim
,然后单击 Next (下一步),步骤 2 和 3 使用默认值。导航到左侧窗格上的 Realm roles (域角色),然后单击 Create (创建) 以创建角色。
创建角色,名称为
chat
,然后保存。创建另一个角色,名称为
completions
,然后保存。导航到左侧窗格上的 Users (用户),然后单击 Add user (添加用户)。
创建一个用户,名称为
nim
,然后单击 Create (创建)。Keycloak 显示
nim
User details (用户详细信息) 页面。在
nim
User details (用户详细信息) 页面上,单击 Credentials (凭据),然后单击 Set password (设置密码) 以创建密码。输入密码
nvidia
,将 Temporary (临时) 开关设置为 Off (关闭),然后单击 Save (保存)。导航到
nimuser
的 Role Mapping0 (角色映射 0) 选项卡,然后单击 Assign Role (分配角色)。为
nimuser
启用 chat 和 completion 角色,然后单击 Assign (分配)。
下一步#
请参阅配置 RBAC以创建和验证入口资源。