除了 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 上发出出站请求?