Reporting

The operator periodically reports state of node network interfaces to the API server. These reports are available through NodeNetworkState objects that are created per each node.

List all handled nodes

List NodeNetworkStates from all nodes:

kubectl get nodenetworkstates
NAME     AGE
node01   22s
node02   22s

You can also use short name nns to reach the same effect:

Note: there is a bug in kubectl where get on short names fails first time it is used.

kubectl get nns
NAME     AGE
node01   32s
node02   32s

Read state of a specific node

By using -o yaml you obtain the full network state of the given node:

kubectl get nns node01 -o yaml
apiVersion: nmstate.io/v1beta1
kind: NodeNetworkState
metadata:
  creationTimestamp: "2020-01-31T12:13:15Z"
  generation: 1
  name: node01
  ownerReferences:
  - apiVersion: v1
    kind: Node
    name: node01
    uid: 5292f6a0-de2d-425c-8c66-ab95fec461e1
  resourceVersion: "946"
  selfLink: /apis/nmstate.io/v1beta1/nodenetworkstates/node01
  uid: aada52e6-f7fa-4bc8-b580-27c2b70f4466
status:
  currentState:
    dns-resolver:
      config:
        search: []
        server: []
      running:
        search: []
        server:
        - 192.168.66.2
    interfaces:
    - bridge:
        options:
          group-forward-mask: 0
          mac-ageing-time: 300
          multicast-snooping: true
          stp:
            enabled: false
            forward-delay: 15
            hello-time: 2
            max-age: 20
            priority: 32768
        port: []
      ipv4:
        address:
        - ip: 10.244.0.1
          prefix-length: 24
        dhcp: false
        enabled: true
      ipv6:
        address:
        - ip: fe80::fc40:9cff:fefa:221a
          prefix-length: 64
        autoconf: false
        dhcp: false
        enabled: true
      mac-address: FE:40:9C:FA:22:1A
      mtu: 1450
      name: cni0
      state: up
      type: linux-bridge
    - ipv4:
        address:
        - ip: 192.168.66.101
          prefix-length: 24
        auto-dns: true
        auto-gateway: true
        auto-routes: true
        dhcp: true
        enabled: true
      ipv6:
        address:
        - ip: fe80::5055:ff:fed1:5501
          prefix-length: 64
        autoconf: false
        dhcp: false
        enabled: true
      mac-address: 52:55:00:D1:55:01
      mtu: 1500
      name: eth0
      state: up
      type: ethernet
    # output truncated
    route-rules:
      config: []
    routes:
      config: []
      running:
      - destination: 0.0.0.0/0
        metric: 0
        next-hop-address: 192.168.66.2
        next-hop-interface: eth0
        table-id: 254
      - destination: 192.168.66.0/24
        metric: 100
        next-hop-address: ""
        next-hop-interface: eth0
        table-id: 254
      - destination: ff00::/8
        metric: 256
        next-hop-address: ""
        next-hop-interface: eth0
        table-id: 255
      # output truncated
  lastSuccessfulUpdateTime: "2020-01-31T12:14:00Z"

As you can see, the object is cluster-wide (i.e. does not belong to a namespace). Its name reflects the name of the Node it represents.

The main part of the object is located in status.currentState. It contains the DNS configuration, list of interfaces observed on the host and their configuration, and routes.

Last attribute of the object is lastSuccessfulUpdateTime. It keeps a timestamp recording the last successful update of the report. Since the report is updated periodically and won’t get updated while the node is not reachable (e.g. during reconfiguration of networking), this value can be used to evaluate whether the observed state is fresh enough.

Configure refresh interval

The reported state is updated every 5 seconds.

Node Network State interfaces filtering

All unmanaged veth interfaces are omitted from the report in order to not clutter the output with all Pod connections.

Continue reading

The following tutorial will guide you through the configuration of node networking: Configuration