<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 安裝并試用Istio service mesh **注意:本文檔已失效,請瀏覽 [Istio 官方文檔](https://istio.io/zh)。本書中的 Service Mesh 章節已不再維護,請轉到 [istio-handbook](https://jimmysong.io/istio-handbook) 中瀏覽。** 官方文檔地址 [快速開始](https://istio.io/docs/setup/kubernetes/) 本文根據官網的文檔整理而成,步驟包括安裝**istio 0.5.1**并創建一個bookinfo的微服務來測試istio的功能。 文中使用的yaml文件可以在[kubernetes-handbook](https://github.com/rootsongjc/kubernetes-handbook)的`manifests/istio`目錄中找到,如果鏡像pull失敗,請根據官網的鏡像自行修改。 ## 安裝環境 - CentOS 7.4.1708 - Docker 17.12.0-ce - Kubernetes 1.8.5 ## 部署結構 Istio 的控制平面部署在 Kubernetes 中的部署架構如下圖所示。 ![Istio 在 Kubernetes 中的部署架構圖](https://box.kancloud.cn/d07d9f2fa2c1062071455fc6c2a61743_4638x1056.png) 我們可以清楚的看到 Istio 控制平面的幾個組件的部署運行的命令與開發的端口,以及端口與服務之間的映射的關系。 ## 安裝 **1.下載安裝包** 下載地址:https://github.com/istio/istio/releases 下載Linux版本的當前最新版安裝包 ```bash wget https://github.com/istio/istio/releases/download/0.5.1/istio-0.5.1-linux.tar.gz ``` **2.解壓** 解壓后,得到的目錄結構如下: ```bash ├── bin │?? └── istioctl ├── install │?? ├── ansible │?? ├── consul │?? ├── eureka │?? ├── gcp │?? ├── kubernetes │?? ├── README.md │?? └── tools ├── istio.VERSION ├── LICENSE ├── README.md ├── samples │?? ├── bookinfo │?? ├── CONFIG-MIGRATION.md │?? ├── helloworld │?? ├── httpbin │?? ├── kubernetes-blog │?? ├── rawvm │?? ├── README.md │?? └── sleep └── tools ├── cache_buster.yaml ├── deb ├── githubContrib ├── minikube.md ├── perf_istio_rules.yaml ├── perf_k8svcs.yaml ├── README.md ├── rules.yml ├── setup_perf_cluster.sh ├── setup_run ├── update_all └── vagrant ``` 從文件里表中可以看到,安裝包中包括了kubernetes的yaml文件,示例應用和安裝模板。 **3.先決條件** 以下說明要求您可以訪問啟用了RBAC(基于角色的訪問控制)的Kubernetes1.7.3或更新的群集。您還需要安裝1.7.3或更高版本。如果您希望啟用automatic sidecar injection,則需要Kubernetes 1.9或更高版本。kubectl 注意:如果您安裝了Istio 0.1.x,請在安裝新版本之前徹底卸載它(包括適用于所有啟用Istio的應用程序窗口的Istio支架)。 安裝或升級Kubernetes CLIkubectl以匹配群集支持的版本(CRD支持版本為1.7或更高版本)。 根據您的Kubernetes提供者: 要在本地安裝Istio,請安裝最新版本的Minikube(版本0.22.1或更高版本)。 **4.安裝步驟** 從0.2版本開始,Istio安裝在它自己的istio-system命名空間中,并且可以管理來自所有其他命名空間的服務。 轉至Istio發布頁面以下載與您的操作系統相對應的安裝文件。如果您使用的是MacOS或Linux系統,以下命令自動下載并提取最新版本: ```bash curl -L https://git.io/getLatestIstio | sh - ``` 解壓縮安裝文件并將目錄更改為文件位置。 *安裝目錄包含*: Installation .yaml Kubernetes的安裝文件 Sample/ 示例應用程序 bin/istioctl 二進制bin/文件 在手動注入Envoy作為附屬代理并創建路由規則和策略時使用. istio.VERSION配置文件 例如,如果包是istio-0.5(初步) ```bash cd istio-0.5 (preliminary) ``` 將istioctl客戶端添加到您的PATH。例如,在MacOS或Linux系統上運行以下命令: ```bash export PATH=$PWD/bin:$PATH ``` 安裝Istio的核心組件。從下面兩個互相排斥的選項中選擇一個,或者用Helm Chart交替安裝: a)安裝Istio而不啟用側車間的相互TLS認證。為具有現有應用程序的群集,使用Istio輔助車的服務需要能夠與其他非Istio Kubernetes服務以及使用活動性和準備就緒探測器,無頭服務或StatefulSets的應用程序通信的應用程序選擇此選項。 ```bash kubectl apply -f install/kubernetes/istio.yaml ``` **要么** b)安裝Istio并啟用側柜之間的相互TLS認證: ```bash 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。 ```bash kubectl get svc -n istio-system ``` ```bash NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE istio-ingress 10.83.245.171 35.184.245.62 80:32730/TCP,443:30574/TCP 5h istio-pilot 10.83.251.173 <none> 8080/TCP,8081/TCP 5h istio-mixer 10.83.244.253 <none> 9091/TCP,9094/TCP,42422/TCP 5h ``` > **注意**:如果您的集群中不支持外部負載平衡(例如,Minikube)的環境中運行,該external-ip的istio-ingress會顯示<pending>。您必須使用NodePort訪問應用程序,或使用端口轉發。 修改istio.yaml中的istio-ingress service的type為ClusterIP,并設置`nodePort`,默認為32000。 確保相應Kubernetes容器都運行起來:`istio-pilot-*`、`istio-mixer-*`、`istio-ingress-*`、`istio-ca-*`,和可選的`istio-sidecar-injector-*`。 ```bash kubectl get pods -n istio-system ``` ```bash istio-ca-3657790228-j21b9 1/1 Running 0 5h istio-ingress-1842462111-j3vcs 1/1 Running 0 5h istio-sidecar-injector-184129454-zdgf5 1/1 Running 0 5h istio-pilot-2275554717-93c43 1/1 Running 0 5h istio-mixer-2104784889-20rm8 2/2 Running 0 5h ``` **部署您的應用程序** 您現在可以部署您自己的應用程序或者像Bookinfo一樣隨安裝提供的示例應用程序之一。注意:應用程序必須對所有HTTP通信使用HTTP/1.1或HTTP/2.0協議,因為HTTP/1.0不受支持。 如果您啟動了Istio-sidecar-injector,如上所示,您可以直接使用應用程序部署應用程序kubectl create。 Istio Sidecar注入器會自動將Envoy容器注入到您的應用程序窗格中,假設運行在標有名稱空間的名稱空間中`istio-injection=enabled` ```bash kubectl label namespace <namespace> istio-injection=enabled ``` ```bash kubectl create -n <namspace> -f <your-app-spec>.yaml ``` 如果您沒有安裝Istio-sidecar-injector,則在部署它們之前,必須使用istioctl kube-inject將Envoy容器手動注入應用程序窗格中: ```bash kubectl create -f <(istioctl kube-inject -f <your-app-spec>.yaml) ``` **卸載** 卸載Istio sidecar進樣器: 如果您啟用Istio-sidecar-injector,請將其卸載: ```bash kubectl delete -f install/kubernetes/istio-sidecar-injector-with-ca-bundle.yaml ``` 卸載Istio核心組件。對于0.6(初始)發行版,卸載將刪除RBAC權限,istio-system命名空間和分層下的所有資源。忽略不存在資源的錯誤是安全的,因為它們可能已被分層刪除。 a)如果您在禁用相互TLS身份驗證的情況下安裝了Istio: ```bash kubectl delete -f install/kubernetes/istio.yaml ``` 要么 b)如果您在啟用相互TLS身份驗證的情況下安裝了Istio: ```bash kubectl delete -f install/kubernetes/istio-auth.yaml ``` **7.安裝監控插件** 安裝插件 ```bash kubectl apply -f install/kubernetes/addons/prometheus.yaml kubectl apply -f install/kubernetes/addons/grafana.yaml kubectl apply -f install/kubernetes/addons/servicegraph.yaml kubectl apply -f install/kubernetes/addons/zipkin.yaml ``` 在traefik ingress中增加增加以上幾個服務的配置,同時增加istio-ingress配置。 ```yaml - host: grafana.istio.io http: paths: - path: / backend: serviceName: grafana servicePort: 3000 - host: servicegraph.istio.io http: paths: - path: / backend: serviceName: servicegraph servicePort: 8088 - host: prometheus.istio.io http: paths: - path: / backend: serviceName: prometheus servicePort: 9090 - host: zipkin.istio.io http: paths: - path: / backend: serviceName: zipkin servicePort: 9411 - host: ingress.istio.io http: paths: - path: / backend: serviceName: istio-ingress servicePort: 80 ``` ## 測試 我們使用Istio提供的測試應用[bookinfo](https://istio.io/docs/samples/bookinfo.html)微服務來進行測試。 該微服務用到的鏡像有: ``` istio/examples-bookinfo-details-v1 istio/examples-bookinfo-ratings-v1 istio/examples-bookinfo-reviews-v1 istio/examples-bookinfo-reviews-v2 istio/examples-bookinfo-reviews-v3 istio/examples-bookinfo-productpage-v1 ``` 該應用架構圖如下: ![BookInfo Sample應用架構圖](https://box.kancloud.cn/fd7366dbfd7c2438889ff643509987a4_1499x887.png) **部署應用** ``` kubectl create -f <(istioctl kube-inject -f samples/apps/bookinfo/bookinfo.yaml) ``` `Istio kube-inject`命令會在`bookinfo.yaml`文件中增加Envoy sidecar信息。參考 https://istio.io/docs/reference/commands/istioctl/#istioctl-kube-inject 在本機的`/etc/hosts`下增加VIP節點和`ingress.istio.io`的對應信息,具體步驟參考:[邊緣節點配置](../practice/edge-node-configuration.md),或者使用gateway ingress來訪問服務, 如果將`productpage`配置在了ingress里了,那么在瀏覽器中訪問`http://ingress.istio.io/productpage`,如果使用了istio默認的`gateway` ingress配置的話,ingress service使用`nodePort`方式暴露的默認使用32000端口,那么可以使用 `http://任意節點的IP:32000/productpage` 來訪問。 ![BookInfo Sample頁面](https://box.kancloud.cn/481cf9d33a1af1671a2bff4c13aa80df_3262x964.jpg) 多次刷新頁面,你會發現有的頁面上的評論里有星級打分,有的頁面就沒有,這是因為我們部署了三個版本的應用,有的應用里包含了評分,有的沒有。Istio根據默認策略隨機將流量分配到三個版本的應用上。 查看部署的bookinfo應用中的`productpage-v1` service和deployment,查看`productpage-v1`的pod的詳細json信息可以看到這樣的結構: ```bash $ kubectl get pod productpage-v1-944450470-bd530 -o json ``` 見[productpage-v1-istio.json](../manifests/istio/productpage-v1-istio.json)文件。從詳細輸出中可以看到這個Pod中實際有兩個容器,這里面包括了`initContainer`,作為istio植入到kubernetes deployment中的sidecar。 ```json "initContainers": [ { "args": [ "-p", "15001", "-u", "1337" ], "image": "docker.io/istio/init:0.1", "imagePullPolicy": "Always", "name": "init", "resources": {}, "securityContext": { "capabilities": { "add": [ "NET_ADMIN" ] } }, "terminationMessagePath": "/dev/termination-log", "terminationMessagePolicy": "File", "volumeMounts": [ { "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", "name": "default-token-3l9f0", "readOnly": true } ] }, { "args": [ "-c", "sysctl -w kernel.core_pattern=/tmp/core.%e.%p.%t \u0026\u0026 ulimit -c unlimited" ], "command": [ "/bin/sh" ], "image": "alpine", "imagePullPolicy": "Always", "name": "enable-core-dump", "resources": {}, "securityContext": { "privileged": true }, "terminationMessagePath": "/dev/termination-log", "terminationMessagePolicy": "File", "volumeMounts": [ { "mountPath": "/var/run/secrets/kubernetes.io/serviceaccount", "name": "default-token-3l9f0", "readOnly": true } ] } ], ``` ## 監控 不斷刷新productpage頁面,將可以在以下幾個監控中看到如下界面。 **Grafana頁面** `http://grafana.istio.io` ![Istio Grafana界面](https://box.kancloud.cn/bde703de437d6d26c5f15ff93f596745_3254x1902.jpg) **Prometheus頁面** `http://prometheus.istio.io` ![Prometheus頁面](https://box.kancloud.cn/ce2c8df4753b3d80f1d447b710f1158a_3260x1900.jpg) **Zipkin頁面** `http://zipkin.istio.io` ![Zipkin頁面](https://box.kancloud.cn/4ad5733997bd72a4adcaa620b5db8660_3240x1896.jpg) **ServiceGraph頁面** `http://servicegraph.istio.io/dotviz` 可以用來查看服務間的依賴關系。 訪問` http://servicegraph.istio.io/graph` 可以獲得json格式的返回結果。 ![ServiceGraph頁面](https://box.kancloud.cn/4058d03cd366c25ff22cdbf8f16bea23_1832x862.jpg) ## 更進一步 BookInfo示例中有三個版本的`reviews`,可以使用istio來配置路由請求,將流量分發到不同版本的應用上。參考[Configuring Request Routing](https://istio.io/docs/tasks/request-routing.html)。 還有一些更高級的功能,我們后續將進一步探索。 ## 參考 - [安裝 Istio](https://istio.io/zh/docs/setup/kubernetes/) - [BookInfo 應用](https://istio.io/zh/docs/examples/bookinfo/)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看