请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

多个服务的ingress 以path区分后访问异常

按照迁移服务至k8s章节的内容尝试了前端静态资源和动态服务单独服务用ingress代理都能够正常访问,
之后尝试两个服务的ingress合在一起以path区分代理,path: / 是代理到前端静态web    另一个path:/corpApi 是代理到eureka服务。
apply之后前端仍能够正常访问,但是后端的eureka管理页面无法正常显示报错Whitelabel Error Page。
看报错应该也是代理到了eureka服务里但是没显示出正常访问 / 的服务监控情况页面。

另外还有一个问题,如果spring-boot服务使用eureka或者nacos作为微服务注册中心,那原先服务是使用eureka服务器的IP和端口作为key:eureka.client.service-url.defaultZone的值,在k8s体系内是仍然使用域名+/path的方式来访问还是可以直接用service直接内部转发?


yaml文件如下

#eureka-deployment

apiVersion: apps/v1

kind: Deployment

metadata:

  name: eureka-server

spec:

  selector:

    matchLabels:

      app: eureka-server

  replicas: 1

  template:

    metadata:

      labels:

        app: eureka-server

    spec:

      containers:

      - name: eureka-server

        image: 10.5.118.197/kubernetes/eureka-server:latest

        ports:

        - containerPort: 8888

---

#eureka-service

apiVersion: v1

kind: Service

metadata:

  name: eureka-server

spec:

  ports:

  - port: 80

    protocol: TCP

    targetPort: 8888

  selector:

    app: eureka-server

  type: ClusterIP


---

#pcbook-deploy

apiVersion: apps/v1

kind: Deployment

metadata:

  name: pcbook

spec:

  selector:

    matchLabels:

      app: pcbook

  replicas: 2

  template:

    metadata:

      labels:

        app: pcbook

    spec:

      containers:

      - name: pcbook

        image: 10.5.118.197/kubernetes/pcbook:latest

        imagePullPolicy: Always

        ports:

        - containerPort: 80


---

#pcbook-service

apiVersion: v1

kind: Service

metadata:

  name: pcbook

spec:

  ports:

  - port: 80

    protocol: TCP

    targetPort: 80

  selector:

    app: pcbook

  type: ClusterIP


---

#ingress

apiVersion: extensions/v1beta1

kind: Ingress

metadata:

  name: ingress-nginx

spec:

  rules:

    - host: springboot.test.com

      http:

        paths:

        - path: /

          backend:

            serviceName: pcbook

            servicePort: 80

        - path: /corpApi

          backend:

            serviceName: eureka-server

            servicePort: 80


正在回答

1回答

既然打到了对应的后端,基本的ingress配置就是没问题的。先查一下eureka的访问日志,注意请求的path,这块的问题面大。

服务发现的问题:一般自带服务发现组件的应用最好使用原有的服务发现方案。

0 回复 有任何疑惑可以回复我~
  • 提问者 shengxi #1
    尝试了一下好像ingress配置还是有点问题,不管是静态页面还是eureka 直接path写 / 都能正常访问,但是加了路径就无法正常访问
    
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: ingress-nginx
    spec:
      rules:
        - host: springboot.ctrip.com
          http:
            paths:
            - path: /
              backend:
                serviceName: eureka-server
                servicePort: 80
            - path: /pcbook
              backend:
                serviceName: pcbook
                servicePort: 80
    回复 有任何疑惑可以回复我~ 2019-11-20 11:16:21
  • 提问者 shengxi #2
    大致理解了 应该是 path:/ 会代理给 服务A的 /  
    但是path:/pcbook 也会代理给服务pcbook的XXX.com/pcbook
    而不是类似location+upstream的反向代理
    回复 有任何疑惑可以回复我~ 2019-11-21 16:31:58
  • 提问者 shengxi #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2019-12-18 17:58:08
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信