kubernetes - Traefik 向除仪表板以外的任何地方显示 404 - Metallb
问题描述
我尝试使用 traefik 设置入口,但没有运气。我不会只使用 TLS 端口 80。我有一个端口为 8080 的服务。如果我从集群内部 curl 到该服务,它工作得很好。我得到了 HTTP/200。但是,如果我要从外部连接到他的路径,它就不起作用。Traefik 仪表板在端口 8080 上运行良好
我使用以下设置
特雷菲克:1.7.7
kind: Deployment
apiVersion: apps/v1
metadata:
name: traefik-ingress-controller
namespace: default
labels:
k8s-app: traefik-ingress-lb
spec:
replicas: 1
selector:
matchLabels:
k8s-app: traefik-ingress-lb
template:
metadata:
labels:
k8s-app: traefik-ingress-lb
name: traefik-ingress-lb
spec:
serviceAccountName: traefik-ingress-controller
terminationGracePeriodSeconds: 60
containers:
- image: traefik:v1.7.7
name: traefik-ingress-lb
ports:
- name: http
containerPort: 80
- name: admin
containerPort: 8080
args:
- --api
- --web
- --kubernetes
- --logLevel=DEBUG
---
kind: Service
apiVersion: v1
metadata:
name: traefik-ingress-service
namespace: default
annotations:
metallb.universe.tf/address-pool: mmas-ip-space
spec:
selector:
k8s-app: traefik-ingress-lb
ports:
- protocol: TCP
port: 80
name: web
- protocol: TCP
port: 8080
name: admin
type: LoadBalancer
我有一个在端口 8080 上运行的服务,我为它创建了一个入口规则。这是一个测试服务
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: webmust-ing
namespace: default
annotations:
kubernetes.io/ingress.class: traefik
spec:
rules:
- http:
paths:
- path: /helloservice
backend:
serviceName: hellok8s-service
servicePort: 8080
我得到 404 与 curl 到 /helloservice 或尝试从浏览器打开
curl -v http://10.24.33.32/helloservice
curl -v http://10.24.33.32:8080/helloservice
如果直接在集群内部 curl 到服务的 IP 地址,我会得到 200/OK
curl -v http://10.100.168.2:8080
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hellok8s-service ClusterIP 10.100.168.2 <none> 8080/TCP 5d7h
猫 helloservice.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: hellok8s-deployment
labels:
app: hellok8s
spec:
selector:
matchLabels:
app: hellok8s
template:
metadata:
labels:
app: hellok8s
spec:
containers:
- name: hellok8s
image: docker.io/rlkamradt/hellok8s:latest
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: hellok8s-service
spec:
type: ClusterIP
selector:
app: hellok8s
ports:
- port: 8080
targetPort: 8080
解决方案
最后,我通过入口中的以下更改解决了这个问题。
annotations:
ingress.kubernetes.io/protocol: http
traefik.ingress.kubernetes.io/rule-type: PathPrefixStrip
推荐阅读
- firebase - Flutter 访问不同类别的 Firebase 用户电子邮件
- 3d - 将图形转换为 3D 图表
- sql - 一列中的 STRING_AGG() 和旁边列中的不同值
- python - 向图像添加 exif 日期和时间
- racket - Racket 中的 `hash?` 之类的检查是否支持鸭子类型?
- ios - 发现 nil 时崩溃,同时隐式展开非 nil 的可选值
- go - 如何在 Go 中的“恐慌”之后抑制堆栈跟踪?
- r - 如何根据 R 中的样本 id 标记 PCA 点
- tensorflow - 带有 tf.dataset 管道的 TensorFlow 2 -- 预测错误 -- AssertionError: 无法计算输出张量(...)
- python - 运行此程序时出现属性错误。我正在使用 python 中的 kivy 模块,但不确定如何克服这个问题