Kubernetes中Wazuh API 55000端口外部访问连接拒绝排查
Wazuh API在Kubernetes中无法通过Service访问的问题排查与解决
问题现象
在Kubernetes集群部署Wazuh API后,无法通过Service访问55000端口,执行curl命令返回curl: (7) Failed to connect to wazuh-master port 55000: Connection refused,但直接使用Pod IP访问API可以正常返回结果。
Pod与Service状态
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES wazuh-manager-worker-0 1/1 Running 0 4m47s 172.16.0.231 10.0.0.10 <none> <none> wazuh-master-0 1/1 Running 0 4m47s 172.16.0.230 10.0.0.10 <none> <none> NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE wazuh-cluster ClusterIP None <none> 1516/TCP 53s wazuh-master ClusterIP 10.247.82.29 <none> 1515/TCP,55000/TCP 53s wazuh-workers LoadBalancer 10.247.70.29 <pending> 1514:32371/TCP 53s
测试结果
- 通过Pod名称访问:无法解析主机
curl -u user:pass -k -X GET "https://wazuh-master-0:55000/security/user/authenticate?raw=true" curl: (6) Could not resolve host: wazuh-master-0
- 通过Service名称访问:连接被拒绝
curl -u user:pass -k -X GET "https://wazuh-master:55000/security/user/authenticate?raw=true" curl: (7) Failed to connect to wazuh-master port 55000: Connection refused
- 通过Pod IP访问:成功返回结果
curl -u user:pass -k -X GET "https://172.16.0.230:55000/security/user/authenticate?raw=true" eyJ0eXAiOiJKV1QiLCJhbGciOiJIUasfsdfgfhgsdoIEFQSSBSRVhgfhfghfghgfasasdasNUIiwibmJmIjoxNjYzMTQ3ODcxLCJleHAiOjE2NjMxNDg3NzEsInN1YiI6IndhenV
问题根源
查看wazuh-master-svc.yaml配置,发现Service的Selector标签与Pod实际标签不匹配:
apiVersion: v1 kind: Service metadata: name: wazuh-master labels: app: wazuh-manager spec: type: ClusterIP selector: app: wazuh-manager node-type: LoadBalancer # 此处标签错误,未匹配wazuh-master-0 Pod的实际标签 ports: - name: registration port: 1515 targetPort: 1515 - name: api port: 55000 targetPort: 55000
Service的核心作用是通过Selector标签匹配Pod,将流量转发到对应的后端Pod上。如果Selector标签不匹配,Service会没有可用的后端Endpoint,导致外部请求被拒绝。而直接用Pod IP访问正常,说明Pod本身的API服务是正常运行的。
解决步骤
- 查看wazuh-master-0 Pod的实际标签
执行命令获取Pod的标签信息:
kubectl describe pod wazuh-master-0 | grep Labels
假设返回的标签为app: wazuh-manager, node-type: master(实际以命令输出为准)。
- 修改Service的Selector标签
更新wazuh-master-svc.yaml中的selector部分,使其匹配Pod的实际标签:
selector: app: wazuh-manager node-type: master # 修改为Pod实际的node-type标签
- 重新应用Service配置
kubectl apply -f wazuh-master-svc.yaml
- 验证Service是否关联到Pod
执行命令查看Service的Endpoints是否包含wazuh-master-0的IP:
kubectl describe service wazuh-master | grep Endpoints
如果输出包含172.16.0.230:1515,172.16.0.230:55000,说明关联成功。
- 重新测试Service访问
curl -u user:pass -k -X GET "https://wazuh-master:55000/security/user/authenticate?raw=true"
额外说明
- 通过Pod名称无法解析主机:默认情况下,Pod名称的DNS解析需要在同一个Namespace内使用完整域名,格式为
pod-name.namespace.svc.cluster.local,比如wazuh-master-0.default.svc.cluster.local(需替换为实际Namespace)。但这不是本次问题的核心,核心是Service的Selector不匹配。
内容的提问来源于stack exchange,提问作者Slashlinux
相关产品推荐
相关产品推荐

