7

非常に一般的な問題の解決策を見つけようとしています。

  1. 8088 と 60004 の 2 つのポートを公開する k8s クラスター IP サービスがあります。
  2. これらの同じポートを ALB で公開し、パスベースのルーティングを使用したくない

これは、8088 ポートで 1 つのサービスを公開する場合に機能します。

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myingress
  namespace: myns
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/healthcheck-path: /ping
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/tags: Environment=dev,Team=test
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 8088}]'
spec:
  rules:
    - host: myhost
      http:
        paths:
          - path: /*
            backend:
              serviceName: firstservice
              servicePort: 8088

1 つのイングレスを使用して、両方のサービスで同じことを達成するにはどうすればよいでしょうか?

前もって感謝します。

4

2 に答える 2

11

最終的に、この問題を解決するために、現在アルファ版の ALB イングレス コントローラー グループ機能を使用しました: https://github.com/kubernetes-sigs/aws-alb-ingress-controller/issues/914

これは、私のイングレス リソースが現在どのように見えるかです。

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myingress_1
  namespace: myns
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/tags: Environment=dev,Team=test
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/group.name: mygroup
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 8088}]'
spec:
  rules:
    - host: <HOST>
      http:
        paths:
          - path: /*
            backend:
              serviceName: myservice
              servicePort: 8088
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: myingress_2
  namespace: myns
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/tags: Environment=dev,Team=test
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/group.name: mygroup
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 60004}]'
spec:
  rules:
    - host: <HOST>
      http:
        paths:
          - path: /*
            backend:
              serviceName: myservice
              servicePort: 60004

肝心なところ

alb.ingress.kubernetes.io/group.name: mygroup

これら 2 つのイングレス リソースを接続します。

したがって、私は次のようになります。

  • 2 つの別々のイングレス リソースで公開されている k8s の複数 (2 つ) のポートを持つサービスですが、それらは両方とも同じ AWS ALB を指しています (同じグループ名のため)。
  • AWS ALB 側では、2 つのポートが公開された 1 つの ALB を取得します: 8088 と 60004 で、それぞれが同じ k8s サービスを指していますが、同じポッドの異なるポートを指しています (必要に応じて、これは簡単に 2 つの異なる k8s サービスになる可能性があります)。
于 2019-10-14T15:49:20.453 に答える