istio-安装(0.7.1)

环境:

1. kubernetes 1.9.8

2. istio 0.7.1

一、kubernetes kube-apiserver 增加权限配置(MutatingAdmissionWebhook,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) 安装 Istio ,不启用 sidecar 之间的 TLS 双向认证:

kubectl apply -f install/kubernetes/istio.yaml

b) 安装 Istio ,启用 sidecar 之间的 TLS 双向认证:

 

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

6. 检查是否安装成功:

a) 确认已经安装下面的k8s service : 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 <(istioctl kube-inject -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

自动注入bug :

https://github.com/istio/istio/issues/7233

https://github.com/istio/old_issues_repo/issues/271

 

 

你可能感兴趣的:(kubernetes,servicemesh)