从Kubernetes中的pod使用静态IP发送出站SNMP警报

u59ebvdq  于 2023-04-11  发布在  Kubernetes
关注(0)|答案(1)|浏览(172)

我在Kubernetes集群中有一个Pod,需要通过SNMP向外部网络管理系统发送告警。但是,外部系统只有在保持稳定IP地址的情况下才能识别Pod。考虑到Pod的外部特性,是否可以使用静态IP向集群外的系统发送/重定向请求?
到目前为止,我所能收集到的信息只提供了如何从集群外部访问pod的解决方案,例如服务。我发现以下answer建议使用出口网关,但没有提供太多关于如何解决这个问题的信息。

xwbd5t1u

xwbd5t1u1#

一个可行的解决方案是利用定义为here的出口路由器资源,它使用专用源IP地址将流量重定向到指定的IP:

apiVersion: v1
kind: Pod
metadata:
  name: egress-1
  labels:
    name: egress-1
  annotations:
    pod.network.openshift.io/assign-macvlan: "true" 
spec:
  initContainers:
  - name: egress-router
    image: registry.redhat.io/openshift4/ose-egress-router
    securityContext:
      privileged: true
    env:
    - name: EGRESS_SOURCE 
      value: <egress_router>
    - name: EGRESS_GATEWAY 
      value: <egress_gateway>
    - name: EGRESS_DESTINATION 
      value: <egress_destination>
    - name: EGRESS_ROUTER_MODE
      value: init
  containers:
  - name: egress-router-wait
    image: registry.redhat.io/openshift4/ose-pod

示例配置如下所示:

apiVersion: v1
kind: Pod
metadata:
  name: egress-multi
  labels:
    name: egress-multi
  annotations:
    pod.network.openshift.io/assign-macvlan: "true"
spec:
  initContainers:
  - name: egress-router
    image: registry.redhat.io/openshift4/ose-egress-router
    securityContext:
      privileged: true
    env:
    - name: EGRESS_SOURCE
      value: 192.168.12.99/24
    - name: EGRESS_GATEWAY
      value: 192.168.12.1
    - name: EGRESS_DESTINATION
      value: |
        203.0.113.25
    - name: EGRESS_ROUTER_MODE
      value: init
  containers:
  - name: egress-router-wait
    image: registry.redhat.io/openshift4/ose-pod

Egress Router pod由Service公开,并链接到需要发送出站SNMP陷阱的应用程序:

apiVersion: v1
kind: Service
metadata:
  name: egress-1
spec:
  ports:
  - name: snmp
    port: 162
  type: ClusterIP
  selector:
    name: egress-1

应用程序将SNMP陷阱发送到暴露Egress Router pod的服务的ClusterIP/Service-Name,然后pod将请求重定向到指定的远程服务器。重定向后,源IP将更改为Egress Router资源中指定的源IP。有关在重定向模式下实现Egress Router的详细信息,请参阅此处。

请注意,根据您的网络配置,您可能需要将 assign-macvlan 字段配置到其他NIC接口,并将其设置为该接口的名称,例如 * eth 1*。

相关问题