web-dev-qa-db-ja.com

ポート80でKubernetesサービスにアクセスする

ポート30000で公開されているKubernetesサービス(a Python Flaskアプリケーション))があります(すべてのKubernetes NodePortは、私が使用したものから30000〜32767の範囲内にある必要があります理解してください)LoadBalancerタイプを使用します。公開サービスに標準のHTTPポート80でアクセスできるようにする必要があります。これを行うための最良の方法は何ですか?

12
kellanburket

クラウドプロバイダーの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/

2
Camil

クラウドプロバイダーを使用しない場合は、サービスで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

9
aborilov