部署Kubernetes - Istio

参考

  • Quick Start
  • 安装并试用Istio service mesh
  • 安装 Istio sidecar
  • Installing the Istio Sidecar
  • 安装 Istio sidecar

部署

  1. 安装

    curl -L https://git.io/getLatestIstio | sh -

    解压进入目录

    export PATH=$PWD/bin:$PATH

    安装Istio而不启用侧车间的相互TLS认证。为具有现有应用程序的群集,使用Istio辅助车的服务需要能够与其他非Istio Kubernetes服务以及使用活动性和准备就绪探测器,无头服务或StatefulSets的应用程序通信的应用程序选择此选项。

    kubectl apply -f install/kubernetes/istio.yaml

    安装Istio并启用侧柜之间的相互TLS认证。

    kubectl apply -f install/kubernetes/istio-auth.yaml

    这两个选项都会创建istio-system命名空间以及所需的RBAC权限,并部署Istio-Pilot,Istio-Mixer,Istio-Ingress和Istio-CA(证书颁发机构)。
    可选:如果您的群集的Kubernetes版本是1.9或更高,并且您希望启用自动代理注入,请安装sidecar injector webhook。 验证安装 请确保以下Kubernetes服务部署:istio-pilot,istio-mixer,istio-ingress。

    kubectl get svc -n istio-system

    NAME                     TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                                                             AGE
    istio-ingress            LoadBalancer   10.104.133.203        80:31411/TCP,443:31944/TCP                                          19h
    istio-mixer              ClusterIP      10.110.159.37            9091/TCP,15004/TCP,9093/TCP,9094/TCP,9102/TCP,9125/UDP,42422/TCP    1d
    istio-pilot              ClusterIP      10.109.170.9             15003/TCP,15005/TCP,15007/TCP,15010/TCP,8080/TCP,9093/TCP,443/TCP   1d
    istio-sidecar-injector   ClusterIP      10.109.227.123           443/TCP                                                             1h
    

    确保相应Kubernetes容器都运行起来:istio-pilot-、istio-mixer-、istio-ingress-、istio-ca-,和可选的istio-sidecar-injector-*。

    kubectl get pods -n istio-system

    NAME                                      READY     STATUS    RESTARTS   AGE
    istio-ca-75fb7dc8d5-6v27b                 1/1       Running   2          1d
    istio-ingress-7966684d69-xm966            1/1       Running   2          19h
    istio-mixer-566f68f5d6-wckqq              3/3       Running   6          1d
    istio-pilot-fd8fb6957-4c5hj               2/2       Running   4          1d
    istio-sidecar-injector-844b9d4f86-58nd9   1/1       Running   0          1h
    
  2. 安装 Istio sidecar

    Pod Spec 中需满足的条件

    为了成为 Service Mesh 中的一部分,kubernetes 集群中的每个 Pod 都必须满足如下条件:

    1. Service 关联:每个 pod 都必须只属于某一个 Kubernetes Service (当前不支持一个 pod 同时属于多个 service)。
    2. 命名的端口:Service 的端口必须命名。端口的名字必须遵循如下格式 [-],可以是httphttp2grpcmongo、 或者 redis 作为 ,这样才能使用 Istio 的路由功能。例如name: http2-fooname: http 都是有效的端口名称,而 name: http2foo 不是。如果端口的名称是不可识别的前缀或者未命名,那么该端口上的流量就会作为普通的 TCP 流量来处理(除非使用 Protocol: UDP 明确声明使用 UDP 端口)。
    3. 带有 app label 的 Deployment:我们建议 kubernetes 的Deploymenet 资源的配置文件中为 Pod 明确指定 applabel。每个 Deployment 的配置中都需要有个与其他 Deployment 不同的含有意义的 app label。app label 用于在分布式追踪中添加上下文信息。
    4. Mesh 中的每个 pod 里都有一个 Sidecar:最后,Mesh 中的每个 pod 都必须运行与 Istio 兼容的 sidecar。以下部分介绍了将 sidecar 注入到 pod 中的两种方法:使用istioctl 命令行工具手动注入,或者使用 Istio Initializer 自动注入。注意 sidecar 不涉及到流量,因为它们与容器位于同一个 pod 中。

    a) 生成证书

    ./install/kubernetes/webhook-create-signed-cert.sh
    --service istio-sidecar-injector
    --namespace istio-system
    --secret sidecar-injector-certs

    b) 安装 sidecar 注入的 configmap

    kubectl apply -f install/kubernetes/istio-sidecar-injector-configmap-release.yaml

    c) 设置安装 yaml 中 webhook 的 caBundle,以便 api-server能够用来调用 webhook

    cat install/kubernetes/istio-sidecar-injector.yaml |
    ./install/kubernetes/webhook-patch-ca-bundle.sh >
    install/kubernetes/istio-sidecar-injector-with-ca-bundle.yaml

    d) 安装 sidecar 注册器 webhook

    kubectl apply -f install/kubernetes/istio-sidecar-injector-with-ca-bundle.yaml

  1. 部署应用

    前置条件

    kubernetes 1.9 的集群需要启动 admissionregistration.k8s.io/v1beta1

    kubectl api-versions | grep admissionregistration.k8s.io/v1beta1

    admissionregistration.k8s.io/v1beta1
    

    如果您启动了Istio-sidecar-injector,如上所示,您可以直接使用应用程序部署应用程序kubectl create。

    kubectl get namespace -L istio-injection

    NAME           STATUS    AGE       ISTIO-INJECTION
    default        Active    4d        enabled
    istio-system   Active    1d        
    kube-public    Active    4d        
    kube-system    Active    4d    
    

    Istio Sidecar注入器会自动将Envoy容器注入到您的应用程序窗格中,假设运行在标有名称空间的名称空间中istio-injection=enabled

    kubectl label namespace istio-injection=enabled

    kubectl create -n -f .yaml

    如果您没有安装Istio-sidecar-injector,则在部署它们之前,必须使用istioctl kube-inject将Envoy容器手动注入应用程序窗格中:

    kubectl create -f <(istioctl kube-inject -f .yaml)

  2. 卸载

    如果您启用Istio-sidecar-injector,请将其卸载:

    kubectl delete -f install/kubernetes/istio-sidecar-injector-with-ca-bundle.yaml

    a)如果您在禁用相互TLS身份验证的情况下安装了Istio:

    kubectl delete -f install/kubernetes/istio.yaml

    b)如果您在启用相互TLS身份验证的情况下安装了Istio:

    kubectl delete -f install/kubernetes/istio-auth.yaml

你可能感兴趣的:(部署Kubernetes - Istio)