4.6.4. 特定の IP アドレスを共有
複数のサービスを単一の IP アドレスに共存させるには、サービス仕様に metallb.io/allow-shared-ip アノテーションを適用してください。このアノテーションを設定することで、MetalLB は複数のサービスに同じ IP アドレスを割り当てることが可能になり、ポートごとにトラフィックを区別しながら、効率的なアドレス使用を実現できます。
デフォルトでは、サービスは IP アドレスを共有しません。
apiVersion: v1
kind: Service
metadata:
name: service-http
annotations:
metallb.io/address-pool: doc-example
metallb.io/allow-shared-ip: "web-server-svc"
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: 8080
selector:
<label_key>: <label_value>
type: LoadBalancer
loadBalancerIP: 172.31.249.7
# ...
---
apiVersion: v1
kind: Service
metadata:
name: service-https
annotations:
metallb.io/address-pool: doc-example
metallb.io/allow-shared-ip: "web-server-svc"
spec:
ports:
- name: https
port: 443
protocol: TCP
targetPort: 8080
selector:
<label_key>: <label_value>
type: LoadBalancer
loadBalancerIP: 172.31.249.7
# ...
ここでは、以下のようになります。
metallb.io/allow-shared-ip-
metallb.io/allow-shared-ipアノテーションにも同じ値を指定します。この値は 共有キー と呼ばれます。 名前.ポート- サービスごとに異なるポート番号を指定します。
spec.selector-
externalTrafficPolicy: localを指定する必要がある場合、サービスが同じ Pod のセットにトラフィックを送信するように、同一の Pod セレクターを指定します。clusterの外部トラフィックポリシーを使用する場合、Pod セレクターは同じである必要はありません。 spec.loadBalancerIP- オプションのパラメーター。上記 3 項目を指定した場合、MetalLB はサービスを同じ IP アドレス上に配置する可能性があります。サービスが IP アドレスを共有することを確認するには、共有する IP アドレスを指定します。
デフォルトで、Kubernetes はマルチプロトコルロードバランサーサービスを許可しません。この制限は通常、TCP と UDP の両方をリッスンする必要がある DNS などのサービスを実行できなくなります。MetalLB を使用して Kubernetes のこの制限を回避するには、2 つのサービスを作成します。
- 1 つのサービスには TCP を指定し、2 番目のサービスには UDP を指定します。
- 両方のサービスで、同じ Pod セレクターを指定します。
-
同じ共有キーと
spec.loadBalancerIP値を指定して、TCP サービスと UDP サービスを同じ IP アドレスに配置します。