如何不将Traefik端口暴露在互联网上



我是Traefik和Kubernetes的新手。我通过helm安装了Traefik(repo:https://traefik.github.io/traefik-helm-chart/,helm版本3.5.2,图表traefik-9.19.1(。然后我想从中获得普罗米修斯指标。

这是我的values.yaml文件的摘录:

ports:
metrics:
expose: true
port: 3333
exposedPort: 3333
protocol: TCP
additionalArguments:
- "--metrics.prometheus=true"
- "--metrics.prometheus.buckets=0.100000, 0.300000, 1.200000, 5.000000"
- "--metrics.prometheus.addEntryPointsLabels=true"
- "--metrics.prometheus.addServicesLabels=true"
- "--entrypoints.metrics.address=:3333/tcp"
- "--metrics.prometheus.entryPoint=metrics"

我的问题是:此配置将TCP端口3333暴露给Internet。出于安全考虑,我宁愿避免这样做。

有没有办法只向我的集群公开端口3333?

尝试删除exposeexposedPort参数。

试试这个:

ports:
metrics:
expose: true
port: 3333
exposedPort: 3333
protocol: TCP
env:
- name: POD_IP
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
additionalArguments:
- "--metrics.prometheus=true"
- "--metrics.prometheus.buckets=0.100000, 0.300000, 1.200000, 5.000000"
- "--metrics.prometheus.addEntryPointsLabels=true"
- "--metrics.prometheus.addServicesLabels=true"
- "--entrypoints.metrics.address=$(POD_IP):3333/tcp"
- "--metrics.prometheus.entryPoint=metrics"

Traefik将仅在POD_IP网络接口上公开度量。

和/或另外,我建议更新你的工作人员的防火墙设置(iptables等…(

如果您喜欢在traefik之外设置配置:我认为您可以使用类似iptable的东西来阻止从服务器外部访问此端口。或者仅接受特定子网络的此端口。

iptables -A INPUT -s 0.0.0.0  -i eth0 --protocol tcp --dport 3333 -j DROP

只向集群中的其他容器公开traefik端口,您必须创建一个新服务并映射端口。

我的用例是将/metrics端点暴露给其他pod,而不需要在互联网上访问/metrics。

不要更改helm图表中的任何度量值,这只会使初始化变得更加混乱。helm chart将在默认情况下打开端口9100以访问/度量,而不会暴露在互联网上。

这是我的访问/度量服务。要进行测试,请进入容器并进行curl ${service_cluster_ip}:9100/metrics

# Traefik exposes /metrics on port 9100 and need to let other containers access it.
apiVersion: v1
kind: Service
metadata:
name: traefik-metrics
namespace: default
labels:
app.kubernetes.io/instance: traefik
app.kubernetes.io/name: traefik-metrics
spec:
type: ClusterIP
ports:
- name: traefik
port: 9100
targetPort: metrics
protocol: TCP
selector:
app.kubernetes.io/instance: traefik
app.kubernetes.io/name: traefik

运行helm安装并添加服务应使其工作

相关内容

最新更新