- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要一个 NodePort 服务的节点端口(比如 30034)的 tcpdump 指向 Kubernetes 集群中的一个 pod。此节点端口服务映射到路径下的入口资源内。当我使用入口内配置的主机访问入口时,我收到了目标 pod 的响应,但 tcpdump 没有跟踪任何内容。 (Ingress-->NodePortService->NodePort--[tcpdump]->pod)
我试过:sudo tcpdump -i any port 30034 -w tcp-dump.pcap但它没有捕捉到任何东西。
你能在这里提出建议吗?当流量来自入口 Controller 时,tcpdump 未捕获任何内容的原因是什么。但是,如果我直接将节点打为 https://node-ip:30034:/service ;我收到了 tcpdump。
谢谢。
最佳答案
在 Kubernetes 中有效地进行 TCPdump 有点棘手,需要您为 pod 创建一个 side car。您所面临的实际上是预期的行为。
run good old stuff like TCPdump or ngrep would not yield much interesting information, because you link directly to the bridge network or overlay in a default scenario.
The good news is, that you can link your TCPdump container to the host network or even better, to the container network stack. Source: How to TCPdump effectively in Docker
问题是你有两个入口点,一个是 nodeIP:NodePort,第二个是 ClusterIP:Port。两者都指向在 kubernetes iptables 上设置的端点的同一组随机化规则。
一旦它可能发生在任何节点上,就很难配置 tcpdump 以仅在一个点上捕获所有有趣的流量。
我所知道的用于此类分析的最佳工具是 Istio,但它主要适用于 HTTP 流量。
考虑到这一点,最好的解决方案是为服务后面的每个 pod 使用 tcpdumper sidecar。
让我们通过一个例子来了解如何实现这一点
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: web
name: web-app
spec:
replicas: 2
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web-app
image: nginx
imagePullPolicy: Always
ports:
- containerPort: 80
protocol: TCP
- name: tcpdumper
image: docker.io/dockersec/tcpdump
restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
name: web-svc
namespace: default
spec:
ports:
- nodePort: 30002
port: 80
protocol: TCP
targetPort: 80
selector:
app: web
type: NodePort
在这个 list 上我们可以注意到树重要的东西。我们有一个 nginx 容器和一个 tcpdumper 容器作为边车,我们有一个定义为 NodePort 的服务。
要访问我们的 sidecar,您必须运行以下命令:
$ kubectl attach -it web-app-db7f7c59-d4xm6 -c tcpdumper
例子:
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 13d
web-svc NodePort 10.108.142.180 <none> 80:30002/TCP 9d
$ curl localhost:30002
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
$ kubectl attach -it web-app-db7f7c59-d4xm6 -c tcpdumper
Unable to use a TTY - container tcpdumper did not allocate one
If you don't see a command prompt, try pressing enter.
> web-app-db7f7c59-d4xm6.80: Flags [P.], seq 1:78, ack 1, win 222, options [nop,nop,TS val 300957902 ecr 300958061], length 77: HTTP: GET / HTTP/1.1
12:03:16.884512 IP web-app-db7f7c59-d4xm6.80 > 192.168.250.64.1336: Flags [.], ack 78, win 217, options [nop,nop,TS val 300958061 ecr 300957902], length 0
12:03:16.884651 IP web-app-db7f7c59-d4xm6.80 > 192.168.250.64.1336: Flags [P.], seq 1:240, ack 78, win 217, options [nop,nop,TS val 300958061 ecr 300957902], length 239: HTTP: HTTP/1.1 200 OK
12:03:16.884705 IP web-app-db7f7c59-d4xm6.80 > 192.168.250.64.1336: Flags [P.], seq 240:852, ack 78, win 217, options [nop,nop,TS val 300958061 ecr 300957902], length 612: HTTP
12:03:16.884743 IP 192.168.250.64.1336 > web-app-db7f7c59-d4xm6.80: Flags [.], ack 240, win 231, options [nop,nop,TS val 300957902 ecr 300958061], length 0
12:03:16.884785 IP 192.168.250.64.1336 > web-app-db7f7c59-d4xm6.80: Flags [.], ack 852, win 240, options [nop,nop,TS val 300957902 ecr 300958061], length 0
12:03:16.889312 IP 192.168.250.64.1336 > web-app-db7f7c59-d4xm6.80: Flags [F.], seq 78, ack 852, win 240, options [nop,nop,TS val 300957903 ecr 300958061], length 0
12:03:16.889351 IP web-app-db7f7c59-d4xm6.80 > 192.168.250.64.1336: Flags [F.], seq 852, ack 79, win 217, options [nop,nop,TS val 300958062 ecr 300957903], length 0
12:03:16.889535 IP 192.168.250.64.1336 > web-app-db7f7c59-d4xm6.80: Flags [.], ack 853, win 240, options [nop,nop,TS val 300957903 ecr 300958062], length 0
12:08:10.336319 IP6 fe80::ecee:eeff:feee:eeee > ff02::2: ICMP6, router solicitation, length 16
12:15:47.717966 IP 192.168.250.64.2856 > web-app-db7f7c59-d4xm6.80: Flags [S], seq 3314747302, win 28400, options [mss 1420,sackOK,TS val 301145611 ecr 0,nop,wscale 7], length 0
12:15:47.717993 IP web-app-db7f7c59-d4xm6.80 > 192.168.250.64.2856: Flags [S.], seq 2539474977, ack 3314747303, win 27760, options [mss 1400,sackOK,TS val 301145769 ecr 301145611,nop,wscale 7], length 0
12:15:47.718162 IP 192.168.250.64.2856 > web-app-db7f7c59-d4xm6.80: Flags [.], ack 1, win 222, options [nop,nop,TS val 301145611 ecr 301145769], length 0
12:15:47.718164 IP 192.168.250.64.2856 > web-app-db7f7c59-d4xm6.80: Flags [P.], seq 1:78, ack 1, win 222, options [nop,nop,TS val 301145611 ecr 301145769], length 77: HTTP: GET / HTTP/1.1
12:15:47.718191 IP web-app-db7f7c59-d4xm6.80 > 192.168.250.64.2856: Flags [.], ack 78, win 217, options [nop,nop,TS val 301145769 ecr 301145611], length 0
12:15:47.718339 IP web-app-db7f7c59-d4xm6.80 > 192.168.250.64.2856: Flags [P.], seq 1:240, ack 78, win 217, options [nop,nop,TS val 301145769 ecr 301145611], length 239: HTTP: HTTP/1.1 200 OK
12:15:47.718403 IP web-app-db7f7c59-d4xm6.80 > 192.168.250.64.2856: Flags [P.], seq 240:852, ack 78, win 217, options [nop,nop,TS val 301145769 ecr 301145611], length 612: HTTP
12:15:47.718451 IP 192.168.250.64.2856 > web-app-db7f7c59-d4xm6.80: Flags [.], ack 240, win 231, options [nop,nop,TS val 301145611 ecr 301145769], length 0
12:15:47.718489 IP 192.168.250.64.2856 > web-app-db7f7c59-d4xm6.80: Flags [.], ack 852, win 240, options [nop,nop,TS val 301145611 ecr 301145769], length 0
12:15:47.723049 IP 192.168.250.64.2856 > web-app-db7f7c59-d4xm6.80: Flags [F.], seq 78, ack 852, win 240, options [nop,nop,TS val 301145612 ecr 301145769], length 0
12:15:47.723093 IP web-app-db7f7c59-d4xm6.80 > 192.168.250.64.2856: Flags [F.], seq 852, ack 79, win 217, options [nop,nop,TS val 301145770 ecr 301145612], length 0
12:15:47.723243 IP 192.168.250.64.2856 > web-app-db7f7c59-d4xm6.80: Flags [.], ack 853, win 240, options [nop,nop,TS val 301145612 ecr 301145770], length 0
12:15:50.493995 IP 192.168.250.64.31340 > web-app-db7f7c59-d4xm6.80: Flags [S], seq 124258064, win 28400, options [mss 1420,sackOK,TS val 301146305 ecr 0,nop,wscale 7], length 0
12:15:50.494022 IP web-app-db7f7c59-d4xm6.80 > 192.168.250.64.31340: Flags [S.], seq 3544403648, ack 124258065, win 27760, options [mss 1400,sackOK,TS val 301146463 ecr 301146305,nop,wscale 7], length 0
12:15:50.494189 IP 192.168.250.64.31340 > web-app-db7f7c59-d4xm6.80: Flags [.], ack 1, win 222, options
您还可以查看 ksniff 工具,这是一个 kubectl 插件,它利用 tcpdump 和 Wireshark 在您的 Kubernetes 集群中的任何 pod 上启动远程捕获。
关于docker - 我们如何获取 Kubernetes 集群中 NodePort 服务的 NodePort 的 tcpdump?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61754712/
我想要一个 NodePort 服务的节点端口(比如 30034)的 tcpdump 指向 Kubernetes 集群中的一个 pod。此节点端口服务映射到路径下的入口资源内。当我使用入口内配置的主机访
我正在尝试使用 NodePort与 kind但不知何故它不想工作。 我已经成功部署了以下集群: apiVersion: kind.x-k8s.io/v1alpha4 kind: Cluster nod
所以我在 Google Cloud 上设置了一个完整的堆栈,我有几个组件需要相互通信,所以我想出了以下流程: 入口 -> Apache 服务 -> Apache 部署(2 个实例) -> 应用服务 -
我正在尝试运行 3 节点 Kubernetes 集群。我已经启动并充分运行集群,以便在不同节点上运行服务。不幸的是,我似乎无法让基于 NodePort 的服务正常工作(正如我所理解的正确性......
我正在关注这个示例,以便使用 Kubernetes 创建一个 Docker 注册表: https://robertbrem.github.io/Microservices_with_Kubernete
我在 virtualbox 环境中有一个包含 3 个节点的集群。我用标志创建了集群 kubeadm init --pod-network-cidr=10.244.0.0/16 然后我安装了法兰绒并将其
我有一个由 3 个虚拟机组成的集群,我在上面安装了 kubernetes 并部署了一些我希望可以从外部访问的 pod 和服务(例如我的本地电脑) 我遵循了本教程 https://kubernetes.
我的情况是,目前,我正在将我的应用程序作为 Daemon 集运行,并希望将 Datadog 集成到我的基础架构中。 据我了解,守护进程集的目的是确保每个集的一个 pod 在每个节点上运行。 在这里,我
按照 kubernetes.io 上的交互式教程进行操作其中 NodePort类型服务是通过 kubectl expose deploy kubernetes-bootcamp --type="Nod
我正在使用 AWS EKS 运行 Kubernetes。我正在为 nodeport 服务执行一些负载测试,并在访问 pod 未运行的节点时看到 ~16k-20k 的并发连接限制。我想知道是否有某种方法
我是 kubernetes 的新手,我想了解当我们让 NodePort 向外界公开端口时,kubernetes 网络是如何工作的。 假设我们的 kubernetes 集群中有两个节点,分别称为 Nod
有没有办法在 kubernetes 服务 YAML 定义中指定自定义 NodePort 端口?我需要能够在我的配置文件中明确定义端口。 最佳答案 您可以设置类型NodePort在您的Service部署
我正试着用Kind来使用NodePort,但不知何故它不想工作。。我已经成功部署了以下集群:。然后是一个非常简单的部署:。和一项服务:。并且我可以通过例如。但我无法通过公开的NodePort连接到该服
我尝试打开 nodePort 80/443,但失败了,因为它超出了默认的 nodePort 范围。 解决方案是将 - --service-node-port-range 选项添加到静态 pod kub
如何更改 Kubernetes NodePort 服务超时? 我已经通过使用 apache2 网络服务器运行无限循环 php 代码对其进行了测试,但 3 分钟后它以 nginx 的 504 网关超时结
apiVersion: v1 kind: Service metadata: name: nginx labels: name: nginx spec: ports: #
我有以下服务配置: kind: Service apiVersion: v1 metadata: name: web-srv spec: type: NodePort selector:
我刚刚开始使用 Kubernetes,我对 NodePort 和 LoadBalancer 类型的服务之间的区别感到困惑。 我理解的区别是 LoadBalancer 不支持 UDP,但除此之外,每当我
部署新的工作负载时,Rancher 2在“端口”部分提供了4个选项: NodePort HostPort 群集IP 第4层负载均衡器 有什么区别?尤其是在NodePort,HostPort和群集IP之
我有一个正在运行的 pod,它是使用以下 pod-definition.yaml 创建的: apiVersion: v1 kind: Pod metadata: name: microserv
我是一名优秀的程序员,十分优秀!