【发布时间】:2020-11-27 04:55:09
【问题描述】:
Ambassador 在尝试访问集群内的 websocket 端点时抛出 403。以下是重现问题的步骤:
[Kube 环境:Mac 上的 Docker for Desktop]
安装大使和 Echo 服务
- 使用 Helm 部署大使
helm repo add datawire https://getambassador.io
helm install ambassador datawire/ambassador
- 部署 websocket echo 部署/服务/映射
---
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
✅验证可以从集群中的 pod 访问 echo 服务器
- 在集群上创建节点外壳
kubectl run my-shell --rm -i --tty --image node:12 -- bash
- 在shell中,下载
wscat
npm i -g wscat
- 在 shell 中,通过集群服务端点连接到服务
wscat -c websocket-echo.default.svc.cluster.local
- 验证连接是否已建立,并且可以回显消息
❌验证无法从集群外部访问 echo 服务器
- 在本地机器上安装
wscat
npm i -g wscat
- 使用 wscat,使用映射连接到服务
wscat -c localhost/websocket-echo/
- 验证返回的错误是
error: Unexpected server response: 403
我错过了一些简单的东西吗?
【问题讨论】:
-
80 端口供集群使用,可以使用 kubectl portforward 或尝试 Nodeport 服务类型,然后使用 localhost:Nodeport 访问
-
他正在使用
Docker for Desktop on Mac。因此,可以localhost[:80]
标签: kubernetes aws-api-gateway ambassador