簡體   English   中英

從 LB ip 重定向到服務的入口

[英]Ingress to redirect to service from LB ip

我正在嘗試創建一個Ingress規則以將請求從 LoadBalancer 重定向到服務。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: hostlessendpoint
spec:
  rules:
  - http:
      paths:
      - path: /hostless
        backend:
          serviceName: node-red
          servicePort: 1880

上面的 yaml 腳本應該將來自https://LOAD_BALANCER_IP/hostless的所有請求重定向到端口1880上的node-red

如果我嘗試請求上述 URL,我收到錯誤Cannot GET /hostless 請求 root 給出404 page not found

我可以通過直接 URL 訪問我的服務(例如http://LOAD_BALANCER_IP:1880將重定向到 Node-red 服務)。

服務 yaml 看起來像這樣:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: node-red
  name: node-red
spec:
  ports:
    - name: "1880"
      port: 1880
      protocol: TCP
      targetPort: 1880
  selector:
    app: node-red
  sessionAffinity: None
  type: LoadBalancer

如何使用ingress來訪問服務,而自定義端口?

嘗試設置重寫目標注釋,這將有效地將/hostless請求重寫為/ ,即http://LOAD_BALANCER_IP:1880/hostless外部到http://node-red:1880內部。

例如:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
  name: hostlessendpoint
spec:
  rules:
  - http:
      paths:
      - path: /hostless(/|$)(.*)
        backend:
          serviceName: node-red
          servicePort: 1880

請參閱此鏈接,假設您使用的是 Nginx 入口 controller。

我找到了一種使它起作用的方法!

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
    traefik.ingress.kubernetes.io/redirect-entry-point: https
    kubernetes.io/ingress.class: "traefik"
    traefik.ingress.kubernetes.io/router.middlewares: "kube-system-traefik-stripprefix@kubernetescrd"
  name: traefik-all
  namespace: partner
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: nginx-demo
          servicePort: 2222
      - path: /node
        backend:
          serviceName: node-red
          servicePort: 1880
---
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: traefik-stripprefix
  namespace: kube-system
spec:
  stripPrefixRegex:
    regex:
      - "/[^/]+"

我使用中間件刪除前綴,因為 K3S Traefik 不支持traefik.ingress.kubernetes.io/rewrite-target注釋。

使用上面的代碼,來自LOAD_BALANCER_IP/*的所有流量都將被重定向到nginx-demo:2222服務。 來自LOAD_BALANCER_IP/node/*的所有流量都將被重定向到node-red:1880服務。

我希望這可以幫助別人!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM