簡體   English   中英

如何 map 在 AWS ALB 的 Ingress 中使用同一主機將不同的服務提供給不同的路徑?

[英]How to map different services to different paths with the same host within Ingress for AWS ALB?

我嘗試通過 Helm 圖表部署兩項服務:

  1. 前端服務(可通過主機訪問,使用 NodePort)
  2. 后端服務(只能在集群內部訪問,使用 ClusterIP)

我在使用 AWS ALB 時遇到部署的入口問題,它在訪問前端服務時拋出404 Not Found錯誤。

ingress.yaml

{{- if .Values.ingress.enabled -}}
{{- $fullName := include "metaflow-ui.fullname" . -}}
{{- $svcPort := .Values.service.port -}}
{{- $fullNameStatic := include "metaflow-ui.fullname-static" . -}}
{{- $svcPortStatic := .Values.serviceStatic.port -}}
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  namespace: metaflow-ui
  name: {{ $fullName }}
  labels:
    {{- include "metaflow-ui.labels" . | nindent 4 }}
  {{- with .Values.ingress.annotations }}
  annotations:
    {{- toYaml . | nindent 4 }}
    alb.ingress.kubernetes.io/healthcheck-path: "/api"
    alb.ingress.kubernetes.io/success-codes: "200"
  {{- end }}
spec:
  rules:
  - host: {{ .Values.externalDNS }}
    http:
      paths:
      - path: /api
        pathType: Prefix
        backend:
          serviceName: {{ $fullName }}
          servicePort: {{ $svcPort }}
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  namespace: metaflow-ui
  name: {{ $fullName }}
  labels:
    {{- include "metaflow-ui.labels" . | nindent 4 }}
  {{- with .Values.ingress.annotations }}
  annotations:
    {{- toYaml . | nindent 4 }}
    alb.ingress.kubernetes.io/healthcheck-path: "/"
    alb.ingress.kubernetes.io/success-codes: "200"
  {{- end }}
spec:
  rules:
  - host: {{ .Values.externalDNS }}
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          serviceName: {{ $fullNameStatic }}
          servicePort: {{ $svcPortStatic }}
---
{{ end }}

這些是 Ingress 在values.yaml下的注釋:

ingress:
  enabled: true
  className: ""
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internal
    alb.ingress.kubernetes.io/group.name: metaflow-ui
    alb.ingress.kubernetes.io/security-groups: # removed
    alb.ingress.kubernetes.io/listen-ports:  '[{"HTTP": 80}, {"HTTPS":443}]'
    alb.ingress.kubernetes.io/certificate-arn: # removed
    alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}'

我讀到附加group.name是使單個 AWS ALB 能夠跨多個 Ingress 共享的修復程序,但它沒有解決問題。 如果我要刪除第二個入口,則會部署整個站點(但沒有后端服務)。

編輯:

我發現這篇文章介紹了這個確切的應用程序, 如何在 Application Load Balancer 上實現基於路徑的路由? ,會試一試。

我設法使用以下 Ingress 設置讓它工作。 我最終沒有為每個服務使用一個 Ingress,而是使用了一個 Ingress,但保留了group.name

{{- if .Values.ingress.enabled -}}
{{- $fullName := include "metaflow-ui.fullname" . -}}
{{- $svcPort := .Values.service.port -}}
{{- $fullNameStatic := include "metaflow-ui.fullname-static" . -}}
{{- $svcPortStatic := .Values.serviceStatic.port -}}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: {{ $fullName }}
  labels:
    {{- include "metaflow-ui.labels" . | nindent 4 }}
  {{- with .Values.ingress.annotations }}
  annotations:
    {{- toYaml . | nindent 4 }}
    alb.ingress.kubernetes.io/healthcheck-path: "/"
    alb.ingress.kubernetes.io/success-codes: "200"
  {{- end }}
spec:
  rules:
  - host: {{ .Values.externalDNS }}
    http:
      paths:
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: {{ $fullName }}
            port:
              number: {{ $svcPort }}
      - path: /
        pathType: Prefix
        backend:
          service:
            name: {{ $fullNameStatic }}
            port:
              number: {{ $svcPortStatic }}
      - path: /
        pathType: Prefix
        backend:
          service:
            name: ssl-redirect
            port:
              name: use-annotation
      - path: /static
        pathType: Prefix
        backend:
          service:
            name: {{ $fullNameStatic }}
            port:
              number: {{ $svcPortStatic }}
{{ end }}

暫無
暫無

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

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