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

时间:2019-05-23 16:27:20

标签: azure kubernetes azure-aks

我正在将我的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

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

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

是否可以在默认端口上提供服务,或者建议使用哪种方法连接回该端点端口?

2 个答案:

答案 0 :(得分:1)

您需要从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

这样,您的服务将在80 \ 443上可用,并且一切正常运行

答案 1 :(得分:1)

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

按照以下步骤

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