0

我正在尝试在我的本地 Kubernetes(Docker 桌面集群)中设置大使边缘堆栈。

完成所有部署后,我检查了大使命名空间,一切都按预期工作。此外,我的部署(pod 和服务)正常工作。我已将大使边缘堆栈服务更改为 nodeport,以便我可以在本地访问和测试。另外,我在我的 HOST 文件中添加了 url。

现在,这里是细节。

kubectl get svc -n ambassador

在此处输入图像描述

kubectl get svc -n sample-on-ambassador-edgestack

在此处输入图像描述

edgestack-listener yaml:
--------------------------
apiVersion: getambassador.io/v3alpha1
kind: Listener
metadata:
  name: my-listener-80
  namespace: sample-on-ambassador-edgestack
spec:
  port: 80
  protocol: HTTP
  securityModel: XFP
  hostBinding: 
    namespace:
      from: ALL


apiVersion: getambassador.io/v3alpha1
kind: Listener
metadata:
  name: my-listener-8080
  namespace: sample-on-ambassador-edgestack
spec:
  port: 8080
  protocol: HTTP
  securityModel: XFP
  hostBinding: 
    namespace:
      from: ALL


edgestack-binding yaml
-------------------------
apiVersion: getambassador.io/v3alpha1
kind: Mapping
metadata:
  name: my-mappingrules
  namespace: sample-on-ambassador-edgestack
spec:
  hostname: "local.edgestack.com"
  prefix: /apple/
  service: my-apple-service.sample-on-ambassador-edgestack
  

注意:我使用了上面的 Service: pod.service 形式

有了这个,我得到了带有http://local.edgestack.com的 edgestack 主页 在此处输入图像描述

但如果我输入:local.edgestack.com/apple/ 我会收到 404 错误页面。与 curl 命令相同:

curl -i http://local.edgestack.com:32510/apple/


HTTP/1.1 404 Not Found
date: Thu, 02 Dec 2021 01:51:48 GMT
server: envoy
content-length: 0

4

1 回答 1

0

您的问题与命名空间无关,而是您正在访问 a 上的服务,NodePort因此将端口包含在 curl 请求的主机中,但未配置 Emissary 来解决此问题。

如果您要发送带有-v标志集的 curl,您会看到此请求> Host: local.edgestack.com:32510local.edgestack.com您的 Emissary Ingress 所期望的不同。由于传入请求的主机名与Mapping.spec.hostname您配置的不匹配,因此 Emissary 未找到匹配的路由并返回 404。

您可以通过在中执行 glob 来解决此问题,Mapping.spec.hostname以便它匹配local.edgestack.com以及随后的任何端口

apiVersion: getambassador.io/v3alpha1
kind: Mapping
metadata:
  name: my-mappingrules
  namespace: sample-on-ambassador-edgestack
spec:
  hostname: "local.edgestack.com*"
  prefix: /apple/
  service: my-apple-service
于 2021-12-02T16:16:03.650 回答