在端口80上访问Kubernetes服务

kel*_*ket 11 python networking http flask kubernetes

我有一个Kubernetes服务(一个Python Flask应用程序)使用LoadBalancer类型在端口30000上公开公开(所有Kubernetes NodePorts必须在我理解的范围内,在30000-32767范围内).我需要在标准的HTTP端口80上访问面向公众的服务.这样做的最佳方法是什么?

abo*_*lov 9

如果您不使用任何云提供商,您只需externalIPs在服务中设置选项并在节点上启用此IP,并且kube-proxy会将来自此IP的流量路由到您的pod.

{
    "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"
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

https://kubernetes.io/docs/concepts/services-networking/service/#external-ips


Cam*_*mil 6

如果您想使用云提供商的 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
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用入口控制器,例如 Nginx。

https://kubernetes.io/docs/concepts/services-networking/ingress/