MicroK8sで2つのことを実行したいと思います。
私の最終目標は、Ubuntuホスト上に配置する単一ノードのKubernetesクラスターを作成し、次に、ingressを使用して、サービス内のそれぞれのポッドに異なるドメインをルーティングすることです。
私はこれまで数日間Microk8sでこれをやろうとしてきましたが、頭を包むことができません。
これまでに得た最高のものは、ロードバランサーを作成するために MetalLB を使用することです。しかし、これには、ホストマシンのIPアドレスではなく、ローカルネットワークで利用可能な無料のIPアドレスを使用する必要がありました。
また、default-http-backend
を有効にし、これらの構成ファイルをエクスポートして編集しようとしましたが、成功しませんでした。
例として、これはMinikube
で機能します。入力アドオンが有効になると、次の例は、クラスターIPのポート80にあるベースNginxサーバーイメージを示しています。
# ingress-service.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-service
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
# - Host: nginx.ioo
- http:
paths:
- path: /
backend:
serviceName: nginx-cluster-ip-service
servicePort: 80
# nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 1
selector:
matchLabels:
component: nginx
template:
metadata:
labels:
component: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
# nginx-cluster-ip-service
apiVersion: v1
kind: Service
metadata:
name: nginx-cluster-ip-service
spec:
type: ClusterIP
selector:
component: nginx
ports:
- port: 80
targetPort: 80
私があなたを正しく理解していれば、いくつかの見方があるかもしれません。
1つは、すでに言及した MetalLB です
MetalLB は、サポートされているクラウドプロバイダーで実行されないKubernetesクラスターにネットワークロードバランサーを実装し、任意のクラスター内でLoadBalancerサービスを効果的に使用できるようにします。
詳細な実装を読むことができます 純粋なソフトウェアソリューション:MetalLB
別の方法は NodePortサービス経由
このアプローチには、他に認識しておくべきいくつかの制限があります。
- ソースIPアドレス
タイプ NodePort のサービスは、デフォルトで 送信元アドレス変換 を実行します。これは、HTTPリクエストのソースIPが常にNGINXの観点からリクエストを受信したKubernetesノードのIPアドレスであることを意味します。
ホストネットワークも使用できます
利用可能な外部ロードバランサーはないが、NodePortsの使用がオプションではない設定では、
ingress-nginx
ポッドは、専用のネットワーク名前空間の代わりに、実行するホストのネットワークを使用します。このアプローチの利点は、NGINXイングレスコントローラーがポート80および443をKubernetesノードのネットワークインターフェースに直接バインドできることです。NodePortServicesによる追加のネットワーク変換は必要ありません。
また、POD
内の構成を編集すると、ポッドが再起動されたり、クラッシュしたりすると、その構成が失われることを覚えておく必要があります。
これがあなたのアイデアにどの方向に行くかを決定するのに役立つことを願っています。