istio配置skywalking链路追踪
可参考文档:
- skywalking:skywalking.apache.org/zh/how-to-u…
- istio:istio.io/latest/zh/d…
案例
1)在网格全局启用追踪功能
方法1:立即生效
istioctl apply -y -f - <<EOF
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
meshConfig:
defaultProviders:
tracing:
- "skywalking"
enableTracing: true
extensionProviders:
- name: "skywalking"
skywalking:
service: tracing.istio-system.svc.cluster.local
port: 11800
EOF
方法2:新网格配置生效,旧网格需重启/重建后生效
因为是网格全局配置,必须要重启才能生效
kubectl apply -f - <<EOF
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
namespace: istio-system
name: trace-skywalking
spec:
meshConfig:
defaultProviders:
tracing:
- "skywalking"
enableTracing: true
extensionProviders:
- name: "skywalking"
skywalking:
service: tracing.istio-system.svc.cluster.local
port: 11800
EOF
2)部署skywalking
istio配置示例中有,可以直接拿来用,省去集群外手动部署的过程
#部署
kubectl apply -f samples/addons/extras/skywalking.yaml
#暴露skywalking-ui到外部
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: sky-oap-gw
namespace: istio-system
spec:
selector:
istio: ingressgateway
servers:
- hosts:
- trace.hj.com
port:
name: http
number: 80
protocol: HTTP
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: sky-oap-vs
namespace: istio-system
spec:
gateways:
- sky-oap-gw
hosts:
- trace.hj.com
http:
- route:
- destination:
host: tracing-ui
port:
number: 8080
EOF
3)结合bookinfo示例,检测是否生效
#部署
kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
#暴露到外部
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: bookinfo-gateway
spec:
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- bookinfo.hj.com
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: bookinfo
spec:
hosts:
- bookinfo.hj.com
- mesh
gateways:
- bookinfo-gateway
http:
- match:
- uri:
exact: /productpage
- uri:
prefix: /static
- uri:
exact: /login
- uri:
exact: /logout
- uri:
prefix: /api/v1/products
route:
- destination:
host: productpage
port:
number: 9080
EOF
4)开启命名空间追踪
kubectl apply -f - <<EOF
apiVersion: telemetry.istio.io/v1alpha1
kind: Telemetry
metadata:
name: sky-oap-tel
namespace: default
spec:
tracing:
- providers:
- name: skywalking
randomSamplingPercentage: 100.00
EOF
5)浏览器访问,查看结果
6)清理bookinfo
cd /opt/istio
sh samples/bookinfo/platform/kube/cleanup.sh
istio做多集群流量镜像
可以结合上面的案例,不过需要部署第二个k8s集群才行 这里就不演示部署k8s集群了,相信都在使用istio,集群部署也会
案例
集群信息说明:
- 域名以.com结尾为集群1
- 域名以.cn结尾为集群2
1)参考上面的示例,在集群2完成追踪启用、bookinfo部署
2)集群2自定义部分配置
集群2 skywalking-ui暴露
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: sky-oap-gw
namespace: istio-system
spec:
selector:
istio: ingressgateway
servers:
- hosts:
- trace.hj.cn
port:
name: http
number: 80
protocol: HTTP
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: sky-oap-vs
namespace: istio-system
spec:
gateways:
- sky-oap-gw
hosts:
- trace.hj.cn
- mesh
http:
- route:
- destination:
host: tracing-ui
port:
number: 8080
EOF
bookinfo暴露
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: bookinfo-gateway
spec:
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- bookinfo.hj.cn
- bookinfo.hj.com-shadow
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: bookinfo
spec:
hosts:
- bookinfo.hj.cn
- bookinfo.hj.com-shadow
- mesh
gateways:
- bookinfo-gateway
http:
- match:
- uri:
exact: /productpage
- uri:
prefix: /static
- uri:
exact: /login
- uri:
exact: /logout
- uri:
prefix: /api/v1/products
route:
- destination:
host: productpage
port:
number: 9080
EOF
kiali暴露
kubectl apply -f samples/addons/
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: kiali-gw
namespace: istio-system
spec:
selector:
istio: ingressgateway
servers:
- hosts:
- kiali.hj.cn
port:
name: http
number: 80
protocol: HTTP
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: kiali-vs
namespace: istio-system
spec:
gateways:
- kiali-gw
hosts:
- kiali.hj.cn
- mesh
http:
- match:
- uri:
prefix: /
route:
- destination:
host: kiali
port:
number: 20001
EOF
3)在集群1中引入集群2的bookinfo
可以将集群2的bookinfo当做测试环境,引入部分流量
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1beta1
kind: WorkloadEntry
metadata:
name: bookinfo-we
spec:
address: "2.2.2.66"
ports:
http: 80
labels:
app: bookinfo-shadow
version: v1.0
instance-id: bookinfo-shadow
---
apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
name: bookinfo-external-se
spec:
hosts:
- bookinfo.hj.com-shadow
ports:
- number: 80
name: http
protocol: HTTP
location: MESH_EXTERNAL
resolution: STATIC
workloadSelector:
labels:
app: bookinfo-shadow
EOF
4)在集群1中配置流量镜像策略
稍微修改集群1的bookinfo-vs即可实现
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: bookinfo
spec:
hosts:
- bookinfo.hj.com
- mesh
gateways:
- bookinfo-gateway
http:
- match:
- uri:
exact: /productpage
- uri:
prefix: /static
- uri:
exact: /login
- uri:
exact: /logout
- uri:
prefix: /api/v1/products
route:
- destination:
host: productpage
port:
number: 9080
mirror:
host: bookinfo.hj.com-shadow
port:
number: 80
EOF
5)测试
while :;do curl -I -H 'host: bookinfo.hj.com' 2.2.2.17/productpage ;sleep 1;done
集群1的kiali查看
集群2的kiali查看