为什么 Nginx 入口控制器"steals"来自主机上运行的 Apache 的流量?



这里有一个非常有趣的情况。我重新安装了我的Kubernetes集群(裸机)。我有1个主节点和2个工作节点。在worker no . 2上,在主机上,我有一个Apache http服务器监听端口80并提供web页面。

NAME         STATUS   ROLES           AGE   VERSION
kubemaster   Ready    control-plane   22h   v1.26.3
kubenode-1   Ready    <none>          21h   v1.26.3
kubenode-2   Ready    <none>          21h   v1.26.3

我在集群上安装了Nginx入口控制器作为守护进程集。所以有2个控制器在我的2个工作节点上运行。

NAME                READY   STATUS    RESTARTS   AGE   IP               NODE         NOMINATED NODE   READINESS GATES
bkk-ingress-5p7b8   1/1     Running   0          31m   192.168.29.136   kubenode-1   <none>           <none>
bkk-ingress-rxjw4   1/1     Running   0          31m   192.168.77.72    kubenode-2   <none>           <none>

这里是有趣的部分。当我想访问主机上Apache提供的网页时,流量由Nginx占用,我看到Nginx入口控制器没有找到页面,而不是我的网页。但是只有apache在80端口上监听:

[root@kubenode-2 ~]$ netstat -tulpn | grep --color :80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1099870/httpd
[root@kubenode-2 ~]$ netstat -tulpn | grep --color :443
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      1099870/httpd

入口服务是NodePort,它不应该使用端口80或443:

apiVersion: v1
kind: Service
metadata:
annotations:
meta.helm.sh/release-name: bkk
meta.helm.sh/release-namespace: nginx
creationTimestamp: "2023-03-30T21:00:17Z"
labels:
app.kubernetes.io/instance: bkk
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: bkk-nginx-ingress
helm.sh/chart: nginx-ingress-0.16.2
name: bkk-nginx-ingress
namespace: nginx
resourceVersion: "159007"
uid: 1f45c592-80e0-4fb5-acbd-a04c76772e6a
spec:
clusterIP: 10.104.170.119
clusterIPs:
- 10.104.170.119
externalTrafficPolicy: Local
internalTrafficPolicy: Cluster
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- name: http
nodePort: 31902
port: 801
protocol: TCP
targetPort: 801
- name: https
nodePort: 31903
port: 4431
protocol: TCP
targetPort: 4431
selector:
app: bkk-ingress
sessionAffinity: None
type: NodePort
status:
loadBalancer: {}

并且在我的系统中没有任何地方定义单个入口:

[root@kubemaster helm-chart]$ kubectl get ingresses --all-namespaces
No resources found

有人知道这里发生了什么吗?为什么作为Kubernetes pod运行的Nginx会窃取主机的流量?

我发现了…当我使用Helm安装Nginx时,它默认将hostPort:80添加到pod定义中。即使它不在价值观中。Yaml,在任何地方都没有提到。所以,如果你手动删除它,那么Nginx不会从安装在Kubernetes之外的Apache窃取端口80。

相关内容

  • 没有找到相关文章

最新更新