代码之家  ›  专栏  ›  技术社区  ›  Zvika

从特使后面的容器与Redis服务器通信

  •  5
  • Zvika  · 技术社区  · 7 年前

    我在K8上部署了特使集装箱,作为Istio部署的一部分。

    我能够从应用程序内启动HTTP通信,但当尝试联系Redis服务器(另一个容器和另一个特使代理)时,我无法连接和接收 HTTP/1.1 400 Bad Request

    当检查特使的日志时,每当此连接通过特使时,我可以看到以下消息: HTTP/1.1" 0 - 0 0 0 "_"."_"."_"."_""

    特使是否可能只希望看到HTTP流量而拒绝仅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
    

    1 回复  |  直到 6 年前
        1
  •  2
  •   Effi Bar-She'an    7 年前

    进入特使(istio代理):

    kubectl exec -it my-pod -c proxy bash
    

    查看特使配置:

    cat /etc/envoy/envoy-rev2.json
    

    "address": "tcp://10.35.251.188:6379",
      "filters": [
        {
          "type": "read",
          "name": "tcp_proxy",
          "config": {
            "stat_prefix": "tcp",
            "route_config": {
              "routes": [
                {
                  "cluster": "out.cd7acf6fcf8d36f0f3bbf6d5cccfdb5da1d1820c",
                  "destination_ip_list": [
                    "10.35.251.188/32"
                  ]
                }
              ]
            }
          }
    

    在您的情况下,添加 http port name (Kubernetes部署文件),生成 http_connection_manager

    看见 istio docs :

    底线是,只需删除 端口名称 形成Redis服务,解决问题:)

    推荐文章