OpenShift

根据以下操作指南 为 Istio 准备一个 OpenShift 集群。

默认情况下,OpenShift 不允许容器使用 User ID(UID)1337 来运行。通过以下命令可以让 Istio 的服务账户(Service Accounts)以 UID 1337 来运行容器(如果您将 Istio 部署到其它 Namespace,请注意替换 istio-system ):

  1. $ oc adm policy add-scc-to-group anyuid system:serviceaccounts:istio-system

使用 OpenShift 配置文件进行安装 Istio:

  1. $ istioctl install --set profile=openshift

安装 Istio 完成后,通过以下命令为 Ingress Gateway 暴露 OpenShift 路由:

  1. $ oc -n istio-system expose svc/istio-ingressgateway --port=http2

Sidecar 应用的专用安全上下文约束(SCC)

OpenShift 默认是不允许 Istio Sidecar 注入到每个应用 Pod 中以用户 ID 为 1377 来运行的。要允许使用该 UID 运行,需要执行以下命令(注意替换 <target-namespace> 为适当的 Namespace):

  1. $ oc adm policy add-scc-to-group privileged system:serviceaccounts:<target-namespace>
  2. $ oc adm policy add-scc-to-group anyuid system:serviceaccounts:<target-namespace>

当需要移除应用时,请按以下操作移除权限:

  1. $ oc adm policy remove-scc-from-group privileged system:serviceaccounts:<target-namespace>
  2. $ oc adm policy remove-scc-from-group anyuid system:serviceaccounts:<target-namespace>

应用 Namespace 的其他要求

OpenShift 上的 CNI 由 Multus 管理,如要使用 istio-cni,需要应用 Namespace 中配置 NetworkAttachmentDefinition。执行以下命令,将 <target-namespace> 替换为相应的 Namespace:

  1. $ cat <<EOF | oc -n <target-namespace> create -f -
  2. apiVersion: "k8s.cni.cncf.io/v1"
  3. kind: NetworkAttachmentDefinition
  4. metadata:
  5. name: istio-cni
  6. EOF

当需要移除应用时,请按以下操作移除 NetworkAttachmentDefinition

  1. $ oc -n <target-namespace> delete network-attachment-definition istio-cni