私がやろうとしていること
DNSアドレスにマッピングされた単一のAPIゲートウェイサービスを使用してKubernetes環境を作成します。
私がやったこと:
1)AWS Route53サービスに行き、サブドメインを作成しました。
2)そのサブドメインには静的IPがあるようです。ドメイン名をpingしてこのIPを取得しました。
3) AWSにkopsを使用したKubernetesクラスター を設定しました。
4)エンドポイントのエンドポイントがk8sインフラストラクチャ内のマイクロサービスにヒットするゲートウェイサービスがあります。
このサービスのタイプはLoadBalancer
で、loadBalancerIP
は上記の静的IPと同じです。
問題:
上記の設定では、サービスはFailed to ensure load balancer for service default/gateway-service: LoadBalancerIP cannot be specified for AWS ELB
で作成できません。
それで、私は K8s Ingress ( Also )と Nginxリバースプロキシサービス についてかなり良いリソースのように見えるものを読んでいきます。 ( そしてこれは最後に )( これも )。
私のエラー 以前にも尋ねられたことがあります と答えは、私のAPIゲートウェイと外部の世界の間に別のレイヤーを置くようです。
それからNginx Ingressコントローラについてたくさん読んだ後、私は本当に混乱しています。
私の質問
a)互換性とは別に、ゲートウェイと外界の間に別の層を設ける大きな理由はありますか?
b)私が試したものはGoogle Cloud Platformで機能しますか(これはAWSデプロイメント固有の問題ですか)
c)Nginx ingress controller... NginxリバースプロキシとKubernetes Ingressサービスの違いは何ですか?私にとって言葉はここでは同じ意味で使われているようです。
d)これを行うには非常に多くの方法があるようですが、現在最良の(そして最も簡単な)方法は何ですか?
編集:
ジョナの回答のオプション1を実装しました。誰かが何かをコピーして貼り付けたい場合の設定は次のとおりです。
gateway-service.yaml:
apiVersion: v1
kind: Service
metadata:
name: gateway-service
spec:
ports:
- name: "gateway"
port: 80
targetPort: 5000
selector:
app: "gateway"
type: LoadBalancer
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: "gateway"
spec:
replicas: 1
template:
metadata:
labels:
app: "gateway"
spec:
containers:
- image: <account_nr>.dkr.ecr.us-east-1.amazonaws.com/gateway
imagePullPolicy: Always
name: "gateway"
ports:
- containerPort: 5000
protocol: "TCP"
次に、AWS Route53にサブドメインを作成します:
1)ドメインを作成する
2)New Record Set
3)タイプA
(IPv 4)
4)エイリアスyes
5)サービスの外部エンドポイントと一致するエイリアスターゲットを選択します。 (kubectl describe services gateway-service | grep LoadBalancer
)
インフラストラクチャの自動化には、5つの異なる部分があります。
それらのいくつかは他のいくつかを運転することができます。それらはすべて一緒にうまくいくとは限らず、お互いに競争することができます。
私は実際にはAmazonのkubernetesランタイムを確認していませんが、それ以外に、やりたいことを簡単にするために、少なくとも3つのオプションを知っています。
https://github.com/kubernetes/kops/tree/master/addons/route53-mapper
これはTLSを含む最初のバージョンのシンプルなバージョンですが、証明書をサービスのアノテーションではなく、秘密に保持する必要があるため、TLSに使用するのは少しおかしいようです。
反応:
互換性とは別に、ゲートウェイと外界の間に別の層を設ける大きな理由はありますか?
要件はありません。このアプローチは、ELBとk8の両方がオートメーションを所有することで解決します。一般に、競合するオートメーションの所有者は必要ありません。
Google Cloud Platformで何を試しましたか(これはAWSデプロイメント固有の問題ですか)
gcloud自動化は異なり、ロードバランサーにはIPを割り当てることができます。これは、IP割り当てを個別に管理しているためです。したがって、これはAWS固有の問題です。
Nginx ingress controller ... NginxリバースプロキシとKubernetes Ingressサービスの違いは何ですか?私にとって言葉はここでは同じ意味で使われているようです。
それらは交換可能です。 1つは抽象化で、もう1つは具象です。
Kubernetes Ingressは、さまざまな方法で実装できる抽象化です。 Ingressは、Ingressリソース、コントローラー、構成を行うプロキシで構成されます。コントローラは、クラスタで入力リソースの変更を監視し、それらをプロキシ固有の構成に変換してから、プロキシをリロードします。
Nginxイングレスコントローラーは、nginxを使用したこの機構の実装です。他にも、haproxyやその他のプロキシを使用するものがたくさんあります。
これを行うには非常に多くの方法があるようですが、現在の最善の(そして最も簡単な)方法は何ですか?
上記を参照。おそらく他の方法もあるでしょう。