我在裸机虚拟机上安装了 Kubernetes (1.28.2) 集群。一个主节点和两个工作节点。我正在使用 Calico pod 网络。
我已经部署了具有 NodePort 可访问性的 Traefik 入口。还部署了一个非常简单的whoami
服务,只有一个副本。我添加了必要的入口,并且我相信还添加了所有其他配置。
当我尝试whoami
使用分配给 Traefik 的 nodePort 访问服务时,它无法从 master 访问。但只能从 Master 访问,因为当我使用相同的 nodeport 访问任何工作节点时,它都可以正常工作并且我会得到响应whoami
。
我使用firewalld
服务,并且所有必要的端口都已打开。但这并不重要,因为如果我禁用防火墙,呼叫仍然会超时,就像打开防火墙一样。
首先,我尝试检查 Traefik 部署访问日志,但当我访问主节点时,那里什么都没有写。(当我访问工作节点时,日志按预期显示“路由”)。所以,我想,处理包时一定存在一些问题。因此,我尝试使用所述方法跟踪 iptables这里但基本上,日志没有移动,当我瞄准 master 上的 nodeport 时,看起来没有任何包触及 master 上的任何规则/链/任何东西。
告诉我您想查看什么配置,以便了解发生了什么,我会更新这篇文章!
以下是我的一些预先配置:
apiVersion: v1
kind: ServiceAccount
metadata:
name: traefik-account
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: traefik-role
rules:
- apiGroups:
- ""
resources:
- services
- endpoints
- secrets
verbs:
- get
- list
- watch
- apiGroups:
- extensions
- networking.k8s.io
resources:
- ingresses
- ingressclasses
verbs:
- get
- list
- watch
- apiGroups:
- extensions
- networking.k8s.io
resources:
- ingresses/status
verbs:
- update
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: traefik-role-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: traefik-role
subjects:
- kind: ServiceAccount
name: traefik-account
namespace: default # Using "default" because we did not specify a namespace when creating the ClusterAccount.
---
apiVersion: v1
kind: Service
metadata:
name: traefik-dashboard-service
spec:
type: NodePort
ports:
- nodePort: 32001
port: 8080
targetPort: dashboard
selector:
app: traefik
---
apiVersion: v1
kind: Service
metadata:
name: traefik-web-service
spec:
type: NodePort
ports:
- nodePort: 32000
targetPort: web
port: 80
selector:
app: traefik
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: traefik-deployment
labels:
app: traefik
spec:
replicas: 1
selector:
matchLabels:
app: traefik
template:
metadata:
labels:
app: traefik
spec:
serviceAccountName: traefik-account
containers:
- name: traefik
image: traefik:v2.10
args:
- --api.insecure
- --providers.kubernetesingress
- --accesslog
ports:
- name: web
containerPort: 80
- name: dashboard
containerPort: 8080
我的主服务器上打开的端口(我想在 por 32000 上使用该应用程序):
ports: 1903/tcp 6443/tcp 8080/tcp 10250/tcp 10251/tcp 10252/tcp 10255/tcp 2379-2380/tcp 5473/tcp 179/tcp 4789/udp 8285/udp 8472/udp 30000-32767/tcp
并且whoami
入口定义应该在整个集群中起作用:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: whoami-ingress-test
spec:
rules:
- http:
paths:
- path: /whoamitest
pathType: Prefix
backend:
service:
name: whoami
port:
name: web
任何帮助都将不胜感激!