ポート30000で公開されているKubernetesサービス(a Python Flaskアプリケーション))があります(すべてのKubernetes NodePortは、私が使用したものから30000〜32767の範囲内にある必要があります理解してください)LoadBalancerタイプを使用します。公開サービスに標準のHTTPポート80でアクセスできるようにする必要があります。これを行うための最良の方法は何ですか?
クラウドプロバイダーのLBを使用する場合、アプリがポート8080で公開され、ポート80で公開されると仮定すると、構成は次のようになります。
apiVersion: v1
kind: Service
metadata:
name: flask_app
labels:
run: flask_app
namespace: default
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 8080
protocol: TCP
name: http
selector:
run: flask_app
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: flask_app
namespace: default
spec:
replicas: 1
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
labels:
run: flask_app
spec:
restartPolicy: Always
terminationGracePeriodSeconds: 60
containers:
- name: flask_app
image: repo/flask_app:latest
ports:
- containerPort: 8080
imagePullPolicy: Always
もう1つのオプションは、NginxなどのIngressControllerを使用することです。
https://kubernetes.io/docs/concepts/services-networking/ingress/
クラウドプロバイダーを使用しない場合は、サービスでexternalIPs
オプションを設定し、このIPをノードに設定するだけで、kube-proxyがこのIPからポッドにトラフィックをルーティングします。
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "my-service"
},
"spec": {
"selector": {
"app": "MyApp"
},
"ports": [
{
"name": "http",
"protocol": "TCP",
"port": 80,
"targetPort": 9376
}
],
"externalIPs" : [
"80.11.12.10"
]
}
}
https://kubernetes.io/docs/concepts/services-networking/service/#external-ips