Istio默认安装后流量阻断 Redis及Tyk组件通信故障排查求助
Istio环境下Tyk通信异常+Redis访问遗漏配置排查
同集群Tyk Gateway连Dashboard SSL报错问题
问题根因:Istio默认安装开启Sidecar自动注入后,所有Pod的进出流量都会被Envoy代理接管,同命名空间服务默认走Istio内部mTLS加密,和Tyk本身的SSL配置冲突,对应排查修复步骤如下:
- 第一步:确认Sidecar注入状态
执行kubectl get pod -n <你的命名空间> -o custom-columns=POD:.metadata.name,INJECTED:.metadata.annotations.sidecar\.istio\.io/inject,确认两个Tyk Pod都已被注入Sidecar - 第二步:校验mTLS策略
执行kubectl get peerauthentication -A,如果你的命名空间下存在STRICT模式的PeerAuthentication策略,会强制所有通信走Istio自签证书的双向TLS,Tyk内置的SSL校验会因为不信任Istio的证书报错 - 第三步:任选一种方案修复
- 方案1:修改Tyk Gateway环境变量,添加
TYK_GW_TYKAPI_INSECURESKIPVERIFY=true,跳过内部通信的证书校验 - 方案2:创建DestinationRule关闭Tyk服务之间的mTLS,配置示例:
apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: tyk-disable-mtls namespace: <你的命名空间> spec: host: "<Tyk Dashboard的服务名>.<你的命名空间>.svc.cluster.local" trafficPolicy: tls: mode: DISABLE - 方案3:不需要Istio管理Tyk流量的话,给Tyk的Deployment添加注解
sidecar.istio.io/inject: "false",关闭Sidecar注入即可
- 方案1:修改Tyk Gateway环境变量,添加
GCP Memorystore Redis访问配置遗漏
你之前遇到的Redis连接报错,是因为Istio默认拦截所有出站流量,外部私有IP的Redis没有被加入Istio服务注册表的话,流量会被Sidecar丢弃,需要创建ServiceEntry放通访问:
apiVersion: networking.istio.io/v1beta1 kind: ServiceEntry metadata: name: memorystore-redis spec: hosts: - internal.redis.memorystore # 自定义标识域名即可 addresses: - <你的Redis 10.x.x.x地址>/32 ports: - number: 6379 name: tcp-redis protocol: TCP location: MESH_EXTERNAL resolution: STATIC endpoints: - address: <你的Redis 10.x.x.x地址>
内容的提问来源于stack exchange,提问作者jsy
相关产品推荐
相关产品推荐

