istio-インストール(0.7.1)


環境:
1. kubernetes 1.9.8
2. istio 0.7.1
一、kubernetes kube-apiserver増加権限配置(M u t a tingAdmissionWebhook,ValidatingAdmissionWebhook):
--admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,PersistentVolumeLabel,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota

二、ダウンロード
1.istio-releasesで対応するバージョンをダウンロードするか、次のスクリプトを使用して最新バージョンをダウンロードします.
curl -L https://git.io/getLatestIstio | sh -

2.解凍後、目次は以下の通りです.
mac-temp:istio-0.7.1 $ ls -l
total 48
-rw-r--r--   1 zyh  staff  11343  3 31 03:17 LICENSE
-rw-r--r--   1 zyh  staff   5881  3 31 03:17 README.md
drwxr-xr-x   3 zyh  staff     96  3 31 03:17 bin #istioctl        Envoy sidecar 、       ...
drwxr-xr-x   9 zyh  staff    288  3 31 03:17 install  #kubernetes   yaml     
-rw-r--r--   1 zyh  staff    638  3 31 03:17 istio.VERSION
drwxr-xr-x  10 zyh  staff    320  3 31 03:17 samples  #    
drwxr-xr-x  18 zyh  staff    576  3 31 03:17 tools

3.istioctlをPATHに加える
export PATH=$PWD/bin:$PATH

4.ingressのタイプloadbalancer->NodePortの変更(オプション)
kubernetesはバイナリファイルを使用してローカルにインストールするため、loadbalancerはサポートされず、istioがデフォルトでインストールするingressはloadbalancerを使用するため、install/kubernetes/istionを変更する必要がある.yamlでingress部分を定義し、NodePortに変更
apiVersion: v1
kind: Service
metadata:
  name: istio-ingress
  namespace: istio-system
  labels:
    istio: ingress
spec:
  type: NodePort
  ports:
  - port: 80
    nodePort: 80
    name: http
  - port: 443
    nodePort: 443
    name: https
  selector:
    istio: ingress

 
5.コアコンポーネントのインストール:
 
a)sidecar間のTLS双方向認証を有効にしないIstioをインストールする:
kubectl apply -f install/kubernetes/istio.yaml

b)Istioをインストールし、sidecar間のTLS双方向認証を有効にする:
 
kubectl apply -f install/kubernetes/istio-auth.yaml

6.インストールに成功したかどうかを確認します.
a)以下のk 8 sサービスがインストールされていることを確認する:istio-pilot,istio-mixer,istio-ingress.
$ kubectl get svc -n istio-system
NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                    AGE
istio-ingress  NodePort    10.254.162.226      80:80/TCP,443:443/TCP                2d
istio-mixer    ClusterIP   10.254.95.148       9091/TCP,15004/TCP,9093/TCP,9094/TCP,9102/TCP,9125/UDP,42422/TCP    2d
istio-pilot    ClusterIP   10.254.100.129      15003/TCP,15005/TCP,15007/TCP,15010/TCP,8080/TCP,9093/TCP,443/TCP   2d
istio-sidecar-injector   ClusterIP   10.254.158.211           443/TCP                    1d

b)次のkubernetes podが成功したことを確認する:istio-pilot-*、istio-mixer-*、istio-ingress-*、istio-ca-*、istio-sidecar-injector-*(オプション、sidecarの自動注入).
$ kubectl get po -n istio-system
NAME                                     READY     STATUS    RESTARTS   AGE
istio-ca-86f55cc46f-vlp2d                1/1       Running   3          2d
istio-ingress-5bb556fcbf-wsg5m           1/1       Running   9          22h
istio-mixer-86f5df6997-p9n2r             3/3       Running   9          2d
istio-pilot-67d6ddbdf6-5ghcr             2/2       Running   7          2d
istio-sidecar-injector-5b8c78fd6-mvkdp   1/1       Running   2          1d

7.アプリケーションの導入:
あなたのアプリケーションはHTTP/1.1またはHTTP/2.0プロトコルでなければなりません.HTTP/1.0 aはサポートされていません.Envoy containersを手動で注入します.
 
kubectl create -f .yaml)

配備されたアプリケーションを表示するには、次の手順に従います.
$ kubectl get deployment nginx -o wide
NAME   DESIRED CURRENT UP-TO-DATE   AVAILABLE   AGE  CONTAINERS        IMAGES        SELECTOR
nginx  1       1       1            1           22h  nginx,istio-proxy nginx:1.7.9,docker.io/istio/proxy:0.7.1   app=nginx

podはistio−proxyの容器に注入されることがわかる.
b)Envoy containersを自動的に注入し、後で詳しく紹介する.
参照先:
       http://istio.doczh.cn/docs/setup/kubernetes/sidecar-injection.html
       https://istio.io/docs/setup/kubernetes/sidecar-injection/      
注入ポリシー:sidecarを自動的に注入するように構成されていますが、podがある場合は、sidecarを注入したくない場合は、disabled-sidecar注入器がpodにデフォルトで注入されません.podテンプレート定義のannotations sidecarを追加します.istio.io/inject値がtrueの場合、注入機能が有効になります.enabled-sidecarインジェクタはデフォルトでpodに注入されます.podテンプレート定義のannotations sidecarを追加します.istio.io/inject値がfalseの場合、注入機能は禁止されます.​
deploymentは次のとおりです.
apiVersion: extensions/v1beta1  
kind: Deployment  
metadata:  
  name: test-metrics  
spec:  
  replicas: 1  
  template:  
    metadata:  
      labels:  
        app: echo  
      annotations:  
        sidecar.istio.io/inject: "false"
...

8.istioコンポーネントを削除するには:
a)sidecar間のTLS双方向認証を有効にしない:
kubectl delete -f install/kubernetes/istio.yaml

b)sidecar間のTLS双方向認証を有効にする:
 
kubectl delete -f install/kubernetes/istio-auth.yaml

 
参照先:
https://istio.io/docs/setup/kubernetes/quick-start.html自動注入バグ:
https://github.com/istio/istio/issues/7233
https://github.com/istio/old_issues_repo/issues/271