kubernetes将使用Traefik 2.x的服务公开为使用CRD的入口 我有什么工作
我有一个Kubernetes集群,如下所示:kubernetes将使用Traefik 2.x的服务公开为使用CRD的入口 我有什么工作,kubernetes,traefik,kubernetes-ingress,traefik-ingress,Kubernetes,Traefik,Kubernetes Ingress,Traefik Ingress,我有一个Kubernetes集群,如下所示: 单个控制平面(但计划为HA扩展到3个控制平面) 2个工作节点 在我部署的集群上(遵循traefik的文档): 创建两个吊舱的部署: traefik本身:负责使用暴露端口808080进行路由 whoami:一个简单的http服务器,用于响应http请求 两种服务 traefik服务: whoami服务: 一条traefik入口路线: 我想要什么 我在集群中运行了多个服务,我希望使用入口将它们公开给外部。 更确切地说,我想使用新的tr
- 单个控制平面(但计划为HA扩展到3个控制平面)
- 2个工作节点
在我部署的集群上(遵循traefik的文档):
- 创建两个吊舱的部署:
- traefik本身:负责使用暴露端口808080进行路由
- whoami:一个简单的http服务器,用于响应http请求
- 两种服务
- traefik服务:
- whoami服务:
- 一条traefik入口路线:
IngressRoute
自定义资源定义公开端口80443800上的资源
有什么问题吗
如果我理解的很好,经典的入口控制器允许向外界展示我们想要的每个端口(包括80、8080和443)
但凭借新的traefik CDR ingress方法本身,它根本不导出任何内容。
一种解决方案是将Traefik服务定义为loadbalancer类型的服务,然后公开一些端口。但是您必须使用30000-32767端口范围(与nodeport相同),我不想在反向代理前面添加反向代理,以便能够公开端口80和443
此外,我还从新igress CRD()的文档中了解到:
kubectl端口转发--地址0.0.0.0服务/traefik 8000:8000 8080:8080 443:4443-n默认值
是必需的,我现在明白了。您需要将主机端口映射到服务端口。
但是,以这种方式映射端口会让人觉得笨重而且不直观。我不想在yaml中包含服务描述的一部分,同时必须记住,我需要使用kubectl
映射端口
我很确定这个问题有一个简洁的解决方案,但我不明白如何保持简单。你们有没有在kubernetes使用新traefik 2.x CRD配置的经验
apiVersion: v1
kind: Service
metadata:
name: traefik
spec:
ports:
- protocol: TCP
name: web
port: 80
targetPort: 8000
- protocol: TCP
name: admin
port: 8080
targetPort: 8080
- protocol: TCP
name: websecure
port: 443
targetPort: 4443
selector:
app: traefik
您是否尝试过使用tragetPort,其中每个请求都在80重定向到8000,但当您使用PortForward时,您需要始终使用服务而不是pod
您是否尝试过使用TragePort,其中每个请求都来自80重定向到8000,但当您使用port forward时,您需要始终使用service而不是pod,您可以尝试使用LoadBalancer service type在端口80、443和8080上公开Traefik服务。我已经从您在GKE中提供的链接中测试了yaml,它是有效的 您需要更改“traefik”服务上的端口,并添加“LoadBalancer”作为服务类型:
kind: Service
metadata:
name: traefik
spec:
ports:
- protocol: TCP
name: web
port: 80 <== Port to receive HTTP connections
- protocol: TCP
name: admin
port: 8080 <== Administration port
- protocol: TCP
name: websecure
port: 443 <== Port to receive HTTPS connections
selector:
app: traefik
type: LoadBalancer <== Define the type load balancer
您可以尝试使用LoadBalancer服务类型公开端口80、443和8080上的Traefik服务。我已经从您在GKE中提供的链接中测试了yaml,它是有效的 您需要更改“traefik”服务上的端口,并添加“LoadBalancer”作为服务类型:
kind: Service
metadata:
name: traefik
spec:
ports:
- protocol: TCP
name: web
port: 80 <== Port to receive HTTP connections
- protocol: TCP
name: admin
port: 8080 <== Administration port
- protocol: TCP
name: websecure
port: 443 <== Port to receive HTTPS connections
selector:
app: traefik
type: LoadBalancer <== Define the type load balancer
过了一段时间,我决定在库伯内特斯星系团前面放置一个半质子。这似乎是唯一的ATM解决方案。过了一段时间,我决定在kubernetes集群前面放置一个haproxy。这似乎是ATM的唯一解决方案。我尝试使用loadbalancer类型,但不是默认类型。使用loadbalancer,Kubernetes会忽略这些targetPort,并使用30k+范围内的随机端口。但即使使用默认类型,我觉得它也无法工作,因为使用此配置,没有端口对外公开,您提到的技巧只是关于内部集群通信,对吗?默认情况下,kubernetes loadbalancer类型使用NodePort进行通信,如果您想更改kubernetes分配的默认端口,在30k+范围内,您必须在Kubernets api中进行修改。我知道这个解决方案,但我也不喜欢它,这是一个传统的就地配置,我将在不到一周的时间内放弃,当系统将要失败时,我将愤怒地尝试进行故障排除。我读得越多,就越觉得在traefik CRD前面使用常规的Nginx入口是一种尝试loadbalancer类型的方法,而不是默认类型。使用loadbalancer,Kubernetes会忽略这些targetPort,并使用30k+范围内的随机端口。但即使使用默认类型,我觉得它也无法工作,因为使用此配置,没有端口对外公开,您提到的技巧只是关于内部集群通信,对吗?默认情况下,kubernetes loadbalancer类型使用NodePort进行通信,如果您想更改kubernetes分配的默认端口,在30k+范围内,您必须在Kubernets api中进行修改。我知道这个解决方案,但我也不喜欢它,这是一个传统的就地配置,我将在不到一周的时间内放弃,当系统将要失败时,我将愤怒地尝试进行故障排除。我读到的越多,我就越觉得在traefik CRD前使用常规的Nginx入口是在EKS上获得Raefik的方法,AKS和GKE需要设置为负载平衡器,并且在本机上工作正常,但是当您使用premise时(我在ubuntu服务器20.04和18.04上亲自测试过)在EKS上Traefik,AKS和GKE需要设置为LoadBalancer并在本机上正常工作,但当您在premise上工作时(我个人在ubuntu服务器20.04和18.04上测试过),似乎无法正常工作并在此处跟踪所有内容