【问题标题】:Can I set custom ports for a Kubernetes ingress to listen on besides 80 / 443?除了 80 / 443 之外,我可以为 Kubernetes 入口设置自定义端口以侦听吗?
【发布时间】:2019-10-08 03:12:05
【问题描述】:

我的意思不是能够路由到特定端口,我的意思是实际更改入口侦听的端口。

这可能吗?如何?这是在哪里记录的?

【问题讨论】:

  • 您使用的是什么入口控制器?你是如何部署它的?

标签: kubernetes kubernetes-ingress


【解决方案1】:

没有。来自kubernetes documentation

Ingress 不会公开任意端口或协议。向 Internet 公开 HTTP 和 HTTPS 以外的服务通常使用 Service.Type=NodePort 或 Service.Type=LoadBalancer 类型的服务。

可以在 AWS 等云提供商上自定义 LoadBalancer 以侦听其他端口。

【讨论】:

  • 可以自定义入口控制器监听任何端口,但不能修改入口定义中的端口
【解决方案2】:

我假设您使用的是NGINX Ingress Controller。在这种情况下,在安装过程中,您可以尝试下载 yaml 并更改端口,而不是像 this is one 那样在官方 yaml 中执行 kubectl apply。上面用于 L4 AWS ELB 的文件会变成这样:

kind: Service
apiVersion: v1
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: "*"
    service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: "60"
spec:
  type: LoadBalancer
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  ports:
    - port: {custom port 1}
      targetPort: http
    - port: {custom port 2}
      targetPort: https

另一种方法是使用功能更强大的入口控制器。 Here is a list 不同的控制器。 我个人的选择是Ambassador。如果您按照入门页面操作,只需更改您选择的端口的服务定义:

---
apiVersion: v1
kind: Service
metadata:
  name: ambassador
spec:
  type: LoadBalancer
  externalTrafficPolicy: Local
  ports:
   - port: {custom port}
     targetPort: 8080
  selector:
    service: ambassador

【讨论】:

    【解决方案3】:

    Ingress 定义由ingress controller 支持。入口控制器与普通 Kubernetes 对象一起部署,因此将有一个与之关联的 Service,用于公开入口控制器的端口。

    kubernetes/ingress-nginx static deploys 有一个 deploy.yaml,服务类型为 LoadBalancer

    kind: Service
    apiVersion: v1
    metadata:
      name: ingress-nginx
      namespace: ingress-nginx
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    spec:
      externalTrafficPolicy: Local
      type: LoadBalancer
      selector:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
      ports:
        - name: http
          port: 80
          targetPort: http
        - name: https
          port: 443
          targetPort: https
    

    修改负载均衡器配置的端口,在外部服务的spec.ports[*].port 中,但已部署。

    【讨论】:

    猜你喜欢
    • 2011-04-25
    • 2020-09-16
    • 1970-01-01
    • 2023-04-11
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多