Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 大使让403试图连接到Websocket_Kubernetes_Aws Api Gateway_Ambassador - Fatal编程技术网

Kubernetes 大使让403试图连接到Websocket

Kubernetes 大使让403试图连接到Websocket,kubernetes,aws-api-gateway,ambassador,Kubernetes,Aws Api Gateway,Ambassador,Ambassador在尝试访问群集中的websocket端点时抛出403。以下是重新创建问题的步骤: [Kube环境:Mac桌面Docker] 安装大使和回音服务 派遣大使掌舵 helm repo添加数据线https://getambassador.io 舵手安装大使数据线/大使 部署websocket echo部署/服务/映射 ✅ 验证是否可以从群集中的pod访问echo服务器 在集群上创建节点外壳 kubectl运行我的shell--rm-i--tty--image节点:12--bash

Ambassador在尝试访问群集中的websocket端点时抛出403。以下是重新创建问题的步骤:

[Kube环境:Mac桌面Docker]

安装大使和回音服务

  • 派遣大使掌舵
  • helm repo添加数据线https://getambassador.io
    舵手安装大使数据线/大使
    
  • 部署websocket echo部署/服务/映射
  • ✅ 验证是否可以从群集中的pod访问echo服务器

  • 在集群上创建节点外壳
  • kubectl运行我的shell--rm-i--tty--image节点:12--bash
    
  • 在shell中,下载
    wscat
  • npm i-g wscat
    
  • 在shell中,通过集群服务端点连接到服务
  • wscat-c websocket-echo.default.svc.cluster.local
    
  • 验证连接是否已建立,消息是否可以回显
  • ❌ 验证无法从群集中外部访问echo服务器

  • 在本地计算机上安装
    wscat
  • 使用wscat,使用映射连接到服务
  • wscat-c localhost/websocket-echo/
    
  • 验证返回的错误是否为
    错误:意外服务器响应:403

  • 我遗漏了一些简单的东西吗?

    大使将把传入的请求从http重定向到https

    您可以通过以下方式进行验证:

    $curl localhost/websocket/-v
    *正在尝试::1。。。
    *TCP_节点集
    *已连接到本地主机(::1)端口80(#0)
    >GET/websocket/HTTP/1.1
    >主机:本地主机
    >用户代理:curl/7.54.0
    >接受:*/*
    > 
    
    因此,您需要添加此配置以禁用本地主机上的重定向

    apivision:getambassador.io/v2
    种类:主持人
    元数据:
    名称:localhost
    名称空间:默认值
    规格:
    主机名:localhost
    acmeProvider:
    授权:无
    请求策略:
    不安全的:
    行动:路线
    
    参考文献

    端口80供您在集群中使用,可以使用kubectl portforward,也可以尝试Nodeport服务类型,然后使用localhost:Nodeport访问。使用Mac桌面上的Docker进行访问。因此,可以执行
    localhost[:80]
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: websocket-echo
      namespace: default
    spec:
      ports:
        - name: http
          port: 80
          targetPort: 8080
      selector:
        app: websocket-echo
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: websocket-echo
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: websocket-echo
      template:
        metadata:
          labels:
            app: websocket-echo
        spec:
          containers:
            - name: backend
              image: jmalloc/echo-server
              ports:
                - name: http
                  containerPort: 8080
    ---
    apiVersion: getambassador.io/v2
    kind: Mapping
    metadata:
      name: websocket-echo
      namespace: default
    spec:
      prefix: /websocket/
      service: websocket-echo
      allow_upgrade:
      - websocket
    
    npm i -g wscat