istio配置链路追踪

162 阅读3分钟

istio配置skywalking链路追踪

可参考文档:

案例

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)浏览器访问,查看结果

image.png

image.png

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查看

123

集群2的kiali查看 AKN9)$2K@{0NAZ}R}O{FV0S.png