Kubernetes入口|无法解析主机名

时间:2019-11-28 11:49:54

标签: kubernetes kubernetes-ingress

我首先创建了一个入口群集和一个入口服务,然后将请求路由到指向k8s群集中的NodePort-serviceA(资源服务)和NodePort-serviceB(人员服务)(入口文件)(通过如下所述应用了staffing-ingress.yaml的名称。

Resources-service和Staffing-service可以从容器内部相互通信,并在资源容器中命中curl命令“ curl –v http://staffing-service:8080/swagger/index.html”时,使用HTTP 200返回准确的结果,反之亦然。但是,如果像这样的http://staffing-service:8080/击中不完整的URL,则会引发404错误。

我怀疑下面的staffing-ingress.yaml文件中的路径路由方式。欢迎任何建议。

以下是详细信息

使用nginx负载平衡器IP访问服务(人员或资源)不会返回结果并抛出404错误。

Curl –v http:// a5b9f45d4119a11eabbd90a9c35f3125-1159448980.us-east-2.elb.amazonaws.com:80/api/resources throws the below error
* TCP_NODELAY set
* Connected to a5b9f45d4119a11eabbd90a9c35f3125-1159448980.us-east-2.elb.amazonaws.com (3.134.165.38) port 80 (#0)

< HTTP/1.1 404 Not Found
< Server: openresty/1.15.8.2
< X-Response-Time-ms: 0

Staffing-Ingress.YAML

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: staffing-ingress
  namespace: default
  annotations:
    ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
    http:
      paths:
      - path: /api/resources
        backend:
          serviceName: resources-service
          servicePort: 8001
      - path: /api/staffing
        backend:
          serviceName: staffing-service
          servicePort: 8080

预期结果 是在使用具有URI“ / api / resources /”的外部LB从入口进行攻击时,应调用api服务http://resources-service:8001/swagger/index.html

2 个答案:

答案 0 :(得分:1)

一切都在路由方面正常工作。 您使用的URL错误。 您必须使用该网址

http:// a5b9f45d4119a11eabbd90a9c35f3125-1159448980.us-east-2.elb.amazonaws.com:80/api/resources/swagger/index.html

您必须在自己的网址中添加 swagger / index.html ,就像通过服务访问它时一样。

curl –v http://staffing-service:8080/swagger/index.html


curl –v http:// a5b9f45d4119a11eabbd90a9c35f3125-1159448980.us-east-2.elb.amazonaws.com:80/api/resources/swagger/index.html

答案 1 :(得分:0)

Ingress不会删除上下文路径!

因此,您在Ingress前对{{​​1}}的呼叫不等于Ingress后对www.xxx.yyy/api/resources/的呼叫。这个想法是您的支持服务也将需要具有相同的上下文路径。

您需要做的就是为这两个服务添加上下文路径:

www.xxx.yyy/