设置 Kubernetes 集群

    在这个模块,您将设置一个安装了 Istio 的 Kubernetes 集群,和一个整个教程要用到的命名空间。

    如果您在培训班且讲师已准备好了集群,直接前往设置本地机器

    • 确保您有 的访问权限。您可以使用 Google Kubernetes Engine 或。

    • 生成一个环境变量用于存储运行教程指令要用到的命名空间的名字。可以用任何名字,比如 。

    • 创建命名空间:
    1. $ kubectl create namespace $NAMESPACE
    • 安装 Istio

    • 使用 kubectl 命令为这些通用 Istio 服务创建一个 Kubernetes Ingress 资源。在教程目前这个阶段要熟悉这些服务并不是必须的。

      • Grafana
      • Prometheus
      • kubectl 命令可以接收一个行内配置去为每个服务创建 Ingress 资源:
    1. $ kubectl apply -f - <<EOF
    2. apiVersion: extensions/v1beta1
    3. kind: Ingress
    4. metadata:
    5. name: istio-system
    6. namespace: istio-system
    7. spec:
    8. rules:
    9. - host: my-istio-dashboard.io
    10. http:
    11. paths:
    12. - path: /
    13. backend:
    14. serviceName: grafana
    15. servicePort: 3000
    16. - host: my-istio-tracing.io
    17. http:
    18. paths:
    19. - path: /
    20. backend:
    21. serviceName: tracing
    22. servicePort: 9411
    23. - host: my-istio-logs-database.io
    24. paths:
    25. - path: /
    26. backend:
    27. serviceName: prometheus
    28. servicePort: 9090
    29. http:
    30. paths:
    31. - path: /
    32. backend:
    33. serviceName: kiali
    34. servicePort: 20001
    35. EOF
    • 创建一个角色为 istio-system 命名空间提供读权限。要在下面的步骤中限制参与者的权限,这个角色是必须要有的。
    • 为每个参与者创建服务账号:
    1. $ kubectl apply -f - <<EOF
    2. apiVersion: v1
    3. kind: ServiceAccount
    4. metadata:
    5. name: ${NAMESPACE}-user
    6. namespace: $NAMESPACE
    7. EOF
    • 限制每个参与者的权限。在教程中,参与者只需要在他们自己的命名空间中创建资源以及从 istio-system 命名空间中读取资源。即使使用您自己的集群,这也是一个好的实践,它可以避免影响您集群中的其他命名空间。

    创建一个角色为每个参与者的命名空间提供读写权限。为每个参与者赋予这个角色,以及读取 istio-system 资源的角色:

    1. $ kubectl apply -f - <<EOF
    2. kind: Role
    3. apiVersion: rbac.authorization.k8s.io/v1beta1
    4. metadata:
    5. name: ${NAMESPACE}-access
    6. namespace: $NAMESPACE
    7. rules:
    8. - apiGroups: ["", "extensions", "apps", "networking.k8s.io", "networking.istio.io", "authentication.istio.io",
    9. "rbac.istio.io", "config.istio.io"]
    10. resources: ["*"]
    11. verbs: ["*"]
    12. kind: RoleBinding
    13. apiVersion: rbac.authorization.k8s.io/v1beta1
    14. metadata:
    15. namespace: $NAMESPACE
    16. subjects:
    17. - kind: ServiceAccount
    18. name: ${NAMESPACE}-user
    19. namespace: $NAMESPACE
    20. roleRef:
    21. apiGroup: rbac.authorization.k8s.io
    22. kind: Role
    23. name: ${NAMESPACE}-access
    24. ---
    25. kind: RoleBinding
    26. apiVersion: rbac.authorization.k8s.io/v1beta1
    27. metadata:
    28. name: ${NAMESPACE}-istio-system-access
    29. namespace: istio-system
    30. subjects:
    31. - kind: ServiceAccount
    32. name: ${NAMESPACE}-user
    33. namespace: $NAMESPACE
    34. roleRef:
    35. apiGroup: rbac.authorization.k8s.io
    36. kind: Role
    37. name: istio-system-access
    38. EOF
    • 每个参与者需要使用他们自己的 Kubernetes 配置文件。这个配置文件指明了集群的详细信息,服务账号,证书和参与者的命名空间。kubectl 命令使用这个配置文件在集群上操作。
    • ${NAMESPACE}-user-config.yaml 配置文件设置环境变量 KUBECONFIG
    1. $ export KUBECONFIG=./${NAMESPACE}-user-config.yaml
    • 打印当前命名空间以确认配置文件已生效:
    1. $ kubectl config view -o jsonpath="{.contexts[?(@.name==\"$(kubectl config current-context)\")].context.namespace}"
    2. tutorial

    在输出中可以看到命名空间的名字。

    如果您是讲师,则将生成的配置文件发送给每个学员。学员必须将该配置文件复制到自己本地的计算机。

    恭喜, 您为您的教程设置好了集群!

    您已经准备好设置本地机器了。