【发布时间】:2017-08-29 10:43:26
【问题描述】:
我已经在 k8s 上部署了 envoy 容器作为 Istio 部署的一部分。 每个 Envoy 代理容器都作为“sidecar”安装在 k8s 的 pod 中的应用容器旁边。
我能够从应用程序内部发起 HTTP 流量,但是当我尝试联系 Redis 服务器(具有另一个 envoy 代理的另一个容器)时,我无法连接并接收来自 envoy 的 HTTP/1.1 400 Bad Request 消息。
检查 envoy 的日志时,只要此连接通过 envoy,我就会看到以下消息:HTTP/1.1" 0 - 0 0 0 "_"."_"."_"."_""
据我了解,Redis 命令是使用纯 TCP 传输(无 HTTP)发送的。 Envoy 是否可能只希望看到 HTTP 流量而拒绝仅 TCP 流量? 假设我的理解是正确的,有没有办法使用 Istio 来改变这种行为并接受和处理通用 TCP 流量?
以下是我相关的部署yaml文件:
apiVersion: v1
kind: Service
metadata:
name: redis
namespace: default
labels:
component: redis
role: client
spec:
selector:
app: redis
ports:
- name: http
port: 6379
targetPort: 6379
protocol: TCP
type: ClusterIP
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: redis-db
spec:
replicas: 1
template:
metadata:
labels:
app: redis
spec:
containers:
- name: redis
image: redis:3.2-alpine
imagePullPolicy: IfNotPresent
ports:
- containerPort: 6379
谢谢
【问题讨论】:
标签: http tcp kubernetes istio envoyproxy