Ingress Nginxを通じてTCP/UDPサービスを公開する

Auto Draft

Ingress Nginxは、Kubernetesにおいてウェブサービスのリバースプロキシやロードバランシングを提供するために広く利用されています。状況によっては、同じIPアドレスで他のTCP/UDPサービスも提供したい場合があります。この記事では、そのような状況でIngress NginxをTCP/UDPサービスのプロキシとして利用する方法を紹介します。

用途

ほとんどの場合、Ingress Nginx は HTTP/HTTPS のリバースプロキシやロードバランシングを提供するためにのみ使用されます。しかし、GitLab や Gitea などのサービスを構築する場合、HTTP/HTTPS に加えて、Git 接続用の SSH ポートも必要になります。このような状況では、DNS によって 2 つの異なるポートが同じ IP を使用することになるため、Ingress Nginx を利用して TCP サービスのプロキシを行う必要があります。

設定

Ingress は設計上 TCP/UDP サービスをサポートしていないため、Ingress コントローラーは以下を利用する必要があります。 --tcp-services-configmap--udp-services-configmap 既存の ConfigMap を参照し、この ConfigMap にプロキシするサービスの構成設定を含めます。

以下は、ポート 22 を介してサービスを提供するための ConfigMap の例です。

apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-services
  namespace: ingress-nginx
data:
  22: “<namespace>/<service>:22"

Ingress Nginx は、対応するポートも公開する必要があります。

apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  type: LoadBalancer
  ports:
    - name: http
      port: 80
      targetPort: 80
      protocol: TCP
    - name: https
      port: 443
      targetPort: 443
      protocol: TCP
    - name: proxied-tcp-22
      port: 22
      targetPort: 22
      protocol: TCP
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx

同時に、Ingress コントローラーの起動引数にも追加する必要があります。 --tcp-services-configmap

    spec:
      containers:
      - args:
...
        - --tcp-services-configmap=ingress-nginx/tcp-services

これらの設定を行うことで、Ingress Nginx を利用して TCP サービスを公開できるようになります。UDP についても同様の方法で設定可能です。

参考文献


著作権表示:特に断りのない限り、本ブログのすべての記事はCC BY-NC-SA 4.0ライセンスの下で提供されています。

コメントを残す