前言
在前面的一篇文章中我做了简单的部署,但是在疏忽bookinfo的时候出现了错误。这个错误不解决,没办法进行下一步。后学的路由规则完全没办法学习和测试。
istio错误解决
istio的错误查看istio的部署,本次根据这个错误来进行解决。
查看日志
apiserver日志
这个错误访问k8s的apiserver 问题,应该是超时。我们可以查看apiserver的日志,利用 journalctl 命令来筛选apiserver的日志
1 | # journalctl -u kube-apiserver -f |
istio-pilot日志
1 | # kubectl logs istio-pilot-569499d666-rfjsh -n istio-system discovery |
istio-galley日志
1 | # kubectl logs istio-galley-64f7d8cc97-8nbpc -n istio-system |
前面其实有一个错误,忘记记录了,是一个tls的证书问题。根据上面的错误在google上找了好久,各种文档都查看了好久。就是安装的时候去验证tls证书,还有什么webhook问题。
解决办法: 需要在apiserver里面需要配置 enable-admission-plugins,由于在安装的时候指定了某一个插件,导致这个未启用,如果没有配置该插件,默认其实是启用的。两个插件分别是:ValidatingAdmissionWebhook、MutatingAdmissionWebhook。安装文档里面已经修改,参考配置。修改以后需要重启kube-apiserver。
master加入node
如果master节点未安装kubele、flanneld、docker、kube-proxy。会导致master节点访问不了集群内部的istio-sidecar-injector服务。就会导致自动注入失败。而且当在部署自动注入的时候就会提示: Error creating: Internal error occurred: failed calling webhook "sidecar-injector.istio.io": Post https://istio-sidecar-injector.istio-system.svc:443/inject?timeout=30s: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers
。
在这个错误提示前,在容器里面看看能否访问该地址。是否同
1 | curl -vL -k https://istio-sidecar-injector.istio-system.svc:443/inject?timeout=30s |
![img]https://img.xxlaila.cn/1D39819D6935D7496D07AC714D17A231.jpg()
这里有大神总结的详细错误,master节点加入node详细参考说明。
验证api-resources
1 | kubectl api-resources | grep admissionregistration |
- 启用 admissionregistration.k8s.io/v1alpha1 API
1
2# kubectl api-versions | grep admissionregistration.k8s.io
admissionregistration.k8s.io/v1beta1
使用上面命令可以检查当前是否以启用,admissionregistration.k8s.io/v1alpha1 API,若不存在则需要在 apiserver 的配置中添加–runtime-config=admissionregistration.k8s.io/v1alpha1。
重新部署
新建一个Values.yaml 配置参数文件。下面是参考一个大神的。然后根据自己测试修改的
- Values.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161global:
defaultResources:
requests:
cpu: 30m
memory: 50Mi
limits:
cpu: 400m
memory: 600Mi
proxy:
includeIPRanges: 10.244.0.0/16,10.254.0.0/16
# 是否开启自动注入功能,取值enabled则该pods只要没有被注解为sidecar.istio.io/inject: "false",就会自动注入。如果取值为disabled,则需要为pod设置注解sidecar.istio.io/inject: "true"才会进行注入
# 如果要使用官方bookinfo来进行测试学习,这个设置为enabled。如果设置为disable的,在部署官方bookinfo的时候则不会部署 `Sidecar (istio-proxy)`。需要自己手动去整。官方默认是开启状态
autoInject: enabled
resources:
requests:
cpu: 30m
memory: 50Mi
limits:
cpu: 400m
memory: 500Mi
mtls:
enabled: false
sidecarInjectorWebhook:
enabled: true
# 变量为true,就会为所有命名空间开启自动注入功能。如果赋值为false,则只有标签为istio-injection的命名空间才会开启自动注入功能
enableNamespacesByDefault: false
rewriteAppHTTPProbe: false
mixer:
policy:
enabled: enabled
telemetry:
enabled: true
resources:
requests:
cpu: 100m
memory: 300Mi
limits:
cpu: 1000m
memory: 1024Mi
pilot:
enabled: true
resources:
requests:
cpu: 100m
memory: 300Mi
limits:
cpu: 1000m
memory: 1024Mi
gateways:
enabled: true
istio-ingressgateway:
enabled: true
type: NodePort
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 1000m
memory: 1024Mi
istio-egressgateway:
enabled: enabled
type: NodePort
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 1000m
memory: 256Mi
tracing:
enabled: true
jaeger:
resources:
limits:
cpu: 300m
memory: 900Mi
requests:
cpu: 30m
memory: 100Mi
zipkin:
resources:
limits:
cpu: 300m
memory: 900Mi
requests:
cpu: 30m
memory: 100Mi
contextPath: /
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: traefik
hosts:
- istio-tracing.xxlaila.cn
kiali:
enabled: true
resources:
limits:
cpu: 300m
memory: 900Mi
requests:
cpu: 30m
memory: 50Mi
hub: kiali
contextPath: /
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: traefik
hosts:
- istio-kiali.xxlaila.cn
dashboard:
grafanaURL: http://grafana:3000
jaegerURL: http://jaeger-query:16686
grafana:
enabled: true
persist: true
storageClassName: xxlaila-nfs-storage
accessMode: ReadWriteMany
resources:
requests:
cpu: 30m
memory: 50Mi
limits:
cpu: 300m
memory: 500Mi
contextPath: /
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: traefik
hosts:
- istio-grafana.xxlaila.cn
prometheus:
resources:
requests:
cpu: 30m
memory: 50Mi
limits:
cpu: 500m
memory: 1024Mi
retention: 3d
contextPath: /
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: traefik
hosts:
- istio-prometheus.xxlaila.cn
istio_cni:
enabled: false
注:
- istio 访问外部服务,istio网格默认不能访问外部服务,如需要访问外部服务有三种方式
- global.proxy.includeIPRanges: istio 访问外部服务。指定访问外部的服务ip地址段,直接通过proxy进行访问。默认是
*
所有的 - 创建应用时指定pod annotaion: traffic.sidecar.istio.io/includeOutboundIPRanges: “127.0.0.1/24,10.244.0.1/24”
- 创建ServiceEntry, 需要通过egressgateway控制访问外部服务,应用场景一般是集群的node不能访问外部网络。如集群可以访问外部网络则不需要
- global.proxy.includeIPRanges: istio 访问外部服务。指定访问外部的服务ip地址段,直接通过proxy进行访问。默认是
安装 Istio
部署crds
1
# helm install install/kubernetes/helm/istio-init --name istio-init --namespace istio-system
部署istio
1
# helm install ./install/kubernetes/helm/istio --name istio --namespace istio-system -f Values.yaml --host=10.254.156.238:44134
这里说一下这个 --host
参数。在执行helm安装的时候遇到了 portforward.go:178] lost connection to pod, Error: transport is closing
。ip是tiller-deploy的ip
1 | # kubectl get svc -n kube-system tiller-deploy |
- 部署kiali登录认证
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# cat >kiali-secret.yaml <<EOF
apiVersion: v1
kind: Secret
metadata:
name: kiali
namespace: istio-system
labels:
app: kiali
type: Opaque
data:
username: "YWRtaW4="
passphrase: "YWRtaW4="
EOF
# kubectl apply -f kiali-secret.yaml
账号密码是admin/admin,可以参考istio部署最前面
查看验证
1 | # helm list --all |
1 | # kubectl get pods -n istio-system |
部署官方的bookinfo
使用自动注入。
部署pods 和服务
1 | # kubectl label namespace default istio-injection=enabled |
部署gateway
1 | # kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml |
验证
1 | # kubectl get pods |
在浏览器打开任意node的ip,http://ip:31380/productpage, istio部署错误解决完成。
规则验证
在刚开始建立的时候已经设置了默认的目标规则。下面来测试一下官方给的默认规则。
吧所有的流量迁移到v3版本。需要执行virtual-service-reviews-v3.yaml文件
1 | # kubectl apply -f virtual-service-reviews-v3.yaml |
设定一个登录某一个用户显示v2版本。默认显示v3版本。需要执行virtual-service-reviews-jason-v2-v3.yaml
1 | # kubectl apply -f virtual-service-reviews-jason-v2-v3.yaml |