除了 80 / 443 之外,我可以为 Kubernetes 入口设置自定义端口以侦听吗?

Posted

技术标签:

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

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

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

【问题讨论】:

您使用的是什么入口控制器?你是如何部署它的? 【参考方案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 中,但已部署。

【讨论】:

从kubernetes.github.io/ingress-nginx/deploy下载deploy.yaml,然后在kubectl apply -f deploy.yaml进行上述更改

以上是关于除了 80 / 443 之外,我可以为 Kubernetes 入口设置自定义端口以侦听吗?的主要内容,如果未能解决你的问题,请参考以下文章

除了 phpMyAdmin 之外,所有来自 WAMP 的作品

请问CentOS怎么把在防火墙把除了22、80、443端口外的1-9999端口禁用掉?

如何验证服务器是不是可以在端口 80 和 443 上发出出站请求?

Puppetlabs-Apache:为虚拟主机启用 80 和 443

如何关闭”80“和“443”端口占用问题解决办法

通过 80 或 443 以外的端口查看 http