如何在 Azure Kubernetes 服务上公开 http/https 应用程序

How to expose an http/https application on Azure Kubernetes Services

我正在将我的 dockerized 应用程序移植到 kubernetes,我在使用 aks 创建负载均衡器时遇到问题:

The Service "lbalance" is invalid: spec.ports[0].nodePort: Invalid value: 80: provided port is not in the valid range. 
The range of valid ports is 30000-32767

配置非常简单

apiVersion: v1
kind: Service
metadata:
  name: lbalance
spec:
  selector:
    app: lbalance
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 80
    name: http
  - protocol: TCP
    port: 443
    targetPort: 443
    nodePort: 443
    name: https
  type: LoadBalancer

在它后面是一个 haproxy,带有 ssl 终端,指向集群中公开的其他服务

在我的测试环境中,我有一个 属性 来控制打开哪个端口 ( --service-node-port-range ) 但我在门户页面和门户网站上都找不到 属性在 Azure 文档上。

有没有办法在默认端口上提供服务或推荐的连接回端点端口的方法?

您需要从您的 yaml 中删除 nodePort 声明,它将由 kubernetes 从错误文本中提到的池(您唯一可以使用的池)中分配。

apiVersion: v1
kind: Service
metadata:
  name: lbalance
spec:
  selector:
    app: lbalance
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    name: http
  - protocol: TCP
    port: 443
    targetPort: 443
    name: https
  type: LoadBalancer

这样您的服务就可以在 803 上使用,并且一切正常

30000-32767 是 kubernetes 中的默认节点端口范围。您已定义为 nodePort: 443。它不受支持,因此引发了错误。

按照以下步骤操作

  1. 将 NodePort 替换为 ClusterIP 作为服务类型
  2. 部署入口控制器
  3. 部署默认后端
  4. 从 dns 证书创建秘密(对于 https)
  5. 部署入口规则(包括机密)以将用户请求路由到后端服务。