发生了什么: 我将Nginx服务的externalTrafficPolicy更改为Local,现在我的Nginx Pod不再接收流量
您期望发生的事情: Nginx Pod将继续获得流量,但源IP保持不变。使用第2层模式
环境:
MetalLB版本:0.7.1 Kubernetes版本:最新 操作系统(例如,从/ etc / os-release版):centos7 内核(例如uname -a):Linux K8SM1 3.10.0-862.3.2.el7.x86_64#1 SMP Mon May 21 23:36:36 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux
我有一个Nginx Pod,它侦听端口80上的UDP,并将UDP数据包重定向到192.168.122.206:8080 我有一个简单的udp服务器,监听192.168.122.206:8080。一切正常,但是我需要知道数据包的原始源IP和端口,因此我将服务的流量策略更改为本地。 现在,广告连播似乎没有获得流量。 我正在运行一个单节点裸机集群。 我曾尝试做过“ kubectl日志pod-name”,但没有任何显示,这使我相信pod根本没有获得流量。 我确保将UDP数据包发送到Nginx服务的外部IP和端口80。
我从中构建图像的nginx.conf:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
stream {
server {
listen 80 udp;
proxy_pass 192.168.122.206:8080;
}
}
我的nginx部署和服务
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: asvilla/custom_nginx2:first
ports:
- name: http
containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
externalTrafficPolicy: Local
ports:
- name: http
port: 80
protocol: UDP
targetPort: 80
selector:
app: nginx
type: LoadBalance
我已将Pod和Container日志的详细级别设置为9。当我发送数据包时,它们没有任何新内容。 我还将“ kubectl describe service nginx”的详细程度设置为9,并且在发送数据包时未显示任何新内容。 我最大的猜测是kube-proxy出了什么问题?另外,我的主节点是我唯一的节点这一事实可能会影响某些方面,尽管在我设置它时我并未对其进行污染,并允许调度程序将其视为辅助节点。
答案 0 :(得分:0)
由于您已经指出Service
通过UDP协议路由网络流量,我想Nginx Deployment
也应该允许这样做,并添加protocol: UDP
参数:< / p>
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: asvilla/custom_nginx2:first
ports:
- name: http
containerPort: 80
protocol: UDP