問題は、httpまたはhttpsリクエストをngnixコントローラー経由でしかルーティングできないことです。コンテナへのイングレス経由で非HTTPリクエスト(データベースやcorbaなど)を送信するにはどうすればよいですか?
これは、イングレスメカニズムでは十分にサポートされておらず、 未解決の問題 です。
configmapを使用して公開ポートをkubernetesサービスにマッピングするnginx-ingressを使用したtcpまたはudpトラフィックの回避策があります。
このドキュメント を参照してください。
tcp-services-configmap
(および/またはudp-services-configmap
)引数を使用して入力コントローラーを開始します。
args:
- "/nginx-ingress-controller"
- "--tcp-services-configmap=default/nginx-tcp-configmap"
- "--v=2"
configmapをデプロイします:
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-tcp-configmap
data:
9000: "default/example-service:8080"
9000
は公開されたポート、8080
はサービスポートです
ベアメタルサーバーでnginx-ingress-controllerを使用しています。すべてのノードからホストされたサイトにアクセスするために、展開ではなくDaemonSetとして作成しました( ベアメタルの考慮事項 )。
このソリューションはうまく機能し、イングレス仕様の更新は完全に統合されています。
TSサーバーを利用可能にするために、stacksonstacksで言及されているように、nginx-ingress-controller.ymlのポッドの引数を変更しました。
/nginx-ingress-controller
--configmap=$(POD_NAMESPACE)/nginx-configuration
--publish-service=$(POD_NAMESPACE)/ingress-nginx
--annotations-prefix=nginx.ingress.kubernetes.io
--tcp-services-configmap=default/tcp-ingress-configmap
--udp-services-configmap=default/udp-ingress-configmap
残念ながら、変更された仕様を適用するとき、DaemonSetはポッドを自動的に再作成しなかったため、ポッドを検査するとき、古い引数がまだありました。
/nginx-ingress-controller
--configmap=$(POD_NAMESPACE)/nginx-configuration
--publish-service=$(POD_NAMESPACE)/ingress-nginx
--annotations-prefix=nginx.ingress.kubernetes.io
kubectl --namespace ingress-nginx delete pod --all
を使用してingress-nginx名前空間内のPodを削除すると、コントローラーで新しいPodが作成され、最終的にホストネットワークでポートが使用可能になりました。
状況は少し異なるかもしれませんが、誰かがこれで数分節約できることを願っています。