安装
istioctl operator init --hub pcr-sz.paic.com.cn/pks-istio --tag 1.5.5
所有操作在k8s的master节点上执行。
查看是否开启istio的自动注入
kubectl get namespace -L istio-injection
pib-core开启自动注入:
kubectl label namespace pib-core istio-injection=enabled
如下的policy是enabled,但和上面是什么关系?
kubectl -n istio-system get configmap istio-sidecar-injector -o jsonpath='{.data.config}' | grep policy:
查看istio的gateway
kubectl get gateway -n istio-system
查看gateway是否有外部IP
kubectl get svc istio-ingressgateway -n istio-system
EXTERNAL-IP 一直处于pending状态,只能采用nodePort方式
export INGRESS_HOST=$(kubectl get po -l istio=ingressgateway -n istio-system -o jsonpath='{.items[0].status.hostIP}')
export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
查看istio里有什么
kubectl get all -n istio-system
诊断istio的问题
istioctl analyze -n pib-core
httpbin
通过pks进行部署
获取部署文件 (下面的kubectl_pib_core是我设置的alias,具体内容已经找不到了)
kubectl_pib_core get deployment httpbin -o yaml > httpbin_deployment.yaml
注释掉generation的信息,否则需要手动+1
注入istio,重新部署
kubectl apply -f <(istioctl kube-inject -f ./httpbin_deployment.yaml)
查看注入的envoy的access log
kubectl_pib_core logs -l caas_service=httpbin -c istio-proxy
kiali
将kiali的pod的端口,映射到master节点机器上
kubectl -n istio-system port-forward --address 0.0.0.0 $(kubectl -n istio-system get pod -l app=kiali -o jsonpath='{.items[0].metadata.name}') 20001:20001 &
在k8s的nginx添加路由关系:
让https://xx.xx.xx.xx/kiali/ 可以访问到kiali
用户名和密码都是admin
kiali的用户名和密码采用secret托管,也是可以获知的
kubectl_istio get secrets/kiali --template={{.data.username}} | base64 -d kubectl_istio get secrets/kiali --template={{.data.passphrase}} | base64 -d
如果要在kiali中显示出ingressgateway到服务这条链路,需要显式声明容器监听的port
两个方法:
方法1:
修改k8s部署的template
在deployment.yaml的容器containers下新增
ports:
{{- if .Values.container_ports }}
{{ toYaml .Values.container_ports | indent 10 }}
{{- end }}
然后在values.yaml新增
container_ports:
- containerPort: xxxx
方法2:
修改istio的virtualservice,显式声明port
如:
- destination:
host: ibudda-user
port:
number: 8010
在部署模板的values.yaml中
需要对label进行定义:
labels:
app: ibudda-xxxx
version: v2
app标签是kiali用于识别是否是application的依据
version是做版本路由的重要参数
另外,在values.yaml中,需要将ports的name改为http,这样kiali才能正常显示gateway到服务这一段的流量。
ports:
- port: 8080
targetPort: 8080
name: "http"
istio新增网关(envoy)
master节点执行:kubectl -n istio-system port-forward --address 0.0.0.0 $(kubectl -n istio-system get pod -l app=istio-ingressgateway -o jsonpath='{.items[0].metadata.name}') 15000:15000 &
在nginx上新增/envoy/执行 istio-ingressgateway的转发
则可以通过:https://ibudda-stg.paic.com.cn/envoy/ 进入istio入口网关的管理员界面,从而获取必要的信息。
k8s的部署模板的values.yaml的ports的name,要改为http,才能被istio正常监控,否则会缺失一些信息。
统一认证: