diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index cc5bb5a6e9c..c90c7c6b185 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -7,6 +7,8 @@ updates:
open-pull-requests-limit: 5
ignore:
- dependency-name: "k8s.io/*"
+ - dependency-name: "sigs.k8s.io/*"
+ - dependency-name: "github.com/containernetworking/*"
- dependency-name: "github.com/vmware/go-ipfix"
- dependency-name: "github.com/TomCodeLV/OVSDB-golang-lib"
- dependency-name: "github.com/vmware-tanzu/octant"
diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml
index e162bac0eb1..2ff0fba4217 100644
--- a/.github/workflows/benchmark.yml
+++ b/.github/workflows/benchmark.yml
@@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Set up Go 1.17
- uses: actions/setup-go@v2
+ uses: actions/setup-go@v3
with:
go-version: 1.17
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 394e150cde6..ad31cfeef8c 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -5,10 +5,12 @@ on:
branches:
- main
- release-*
+ - feature/*
push:
branches:
- main
- release-*
+ - feature/*
jobs:
check-changes:
diff --git a/.github/workflows/clair.yml b/.github/workflows/clair.yml
index 15118916539..beb632c02be 100644
--- a/.github/workflows/clair.yml
+++ b/.github/workflows/clair.yml
@@ -11,7 +11,7 @@ jobs:
runs-on: [ubuntu-latest]
steps:
- uses: actions/checkout@v3
- - uses: actions/setup-go@v2
+ - uses: actions/setup-go@v3
with:
go-version: 1.17
- name: Scan Antrea Docker image for vulnerabilities
@@ -23,7 +23,7 @@ jobs:
./ci/clair-scan/run.sh ./clair-reports
- name: Upload Clair scan reports
if: ${{ always() }}
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
with:
name: clair-scan-reports
path: clair-reports/*.json
diff --git a/.github/workflows/dependabot.yml b/.github/workflows/dependabot.yml
index c0014e72916..8baeffeacc3 100644
--- a/.github/workflows/dependabot.yml
+++ b/.github/workflows/dependabot.yml
@@ -32,7 +32,7 @@ jobs:
runs-on: [ubuntu-latest]
steps:
- name: Set up Go 1.17
- uses: actions/setup-go@v2
+ uses: actions/setup-go@v3
with:
go-version: 1.17
- uses: actions/checkout@v3
diff --git a/.github/workflows/docker_update_ethtool.yml b/.github/workflows/docker_update_ethtool.yml
index 8ec7637d3d3..0d7bbdd713a 100644
--- a/.github/workflows/docker_update_ethtool.yml
+++ b/.github/workflows/docker_update_ethtool.yml
@@ -26,16 +26,16 @@ jobs:
with:
ref: ${{ github.event.inputs.antrea-ref }}
- name: Set up QEMU
- uses: docker/setup-qemu-action@v1
+ uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v1
+ uses: docker/setup-buildx-action@v2
- name: Login to DockerHub
- uses: docker/login-action@v1
+ uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push Docker image
- uses: docker/build-push-action@v2
+ uses: docker/build-push-action@v3
with:
context: build/images/ethtool
platforms: linux/amd64,linux/arm64,linux/arm/v7
diff --git a/.github/workflows/docker_update_flow_visibility.yml b/.github/workflows/docker_update_flow_visibility.yml
index 0784213c8b2..95e81832508 100644
--- a/.github/workflows/docker_update_flow_visibility.yml
+++ b/.github/workflows/docker_update_flow_visibility.yml
@@ -22,7 +22,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Login to DockerHub
- uses: docker/login-action@v1
+ uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml
index 559e48b2f26..b8a1412f9be 100644
--- a/.github/workflows/go.yml
+++ b/.github/workflows/go.yml
@@ -4,10 +4,12 @@ on:
branches:
- main
- release-*
+ - feature/*
push:
branches:
- main
- release-*
+ - feature/*
env:
go-cache-name: go
@@ -37,7 +39,7 @@ jobs:
runs-on: ${{ matrix.os }}
steps:
- name: Set up Go 1.17
- uses: actions/setup-go@v2
+ uses: actions/setup-go@v3
with:
go-version: 1.17
- name: Check-out code
@@ -59,7 +61,7 @@ jobs:
- name: Run unit tests
run: make test-unit
- name: Codecov
- uses: codecov/codecov-action@v1
+ uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
file: .coverage/coverage-unit.txt
@@ -76,7 +78,7 @@ jobs:
runs-on: ${{ matrix.platform }}
steps:
- name: Set up Go 1.17
- uses: actions/setup-go@v2
+ uses: actions/setup-go@v3
with:
go-version: 1.17
- name: Check-out code
@@ -108,7 +110,7 @@ jobs:
runs-on: [ubuntu-latest]
steps:
- name: Set up Go 1.17
- uses: actions/setup-go@v2
+ uses: actions/setup-go@v3
with:
go-version: 1.17
- name: Check-out code
@@ -147,7 +149,7 @@ jobs:
runs-on: [ubuntu-latest]
steps:
- name: Set up Go 1.17
- uses: actions/setup-go@v2
+ uses: actions/setup-go@v3
with:
go-version: 1.17
- name: Check-out code
@@ -176,7 +178,7 @@ jobs:
runs-on: [ubuntu-latest]
steps:
- name: Set up Go 1.17
- uses: actions/setup-go@v2
+ uses: actions/setup-go@v3
with:
go-version: 1.17
- name: Check-out code
@@ -196,7 +198,7 @@ jobs:
runs-on: [ubuntu-latest]
steps:
- name: Set up Go 1.17
- uses: actions/setup-go@v2
+ uses: actions/setup-go@v3
with:
go-version: 1.17
- name: Check-out code
@@ -204,15 +206,26 @@ jobs:
- name: Run verify scripts
run: make verify
- name: Checking for broken Markdown links
+ if: ${{ github.event_name == 'pull_request' }}
uses: gaurav-nelson/github-action-markdown-link-check@v1
with:
- folder-path: './docs'
- file-path: './README.md, ./CHANGELOG.md, ./CONTRIBUTING.md, ./GOVERNANCE.md, ./MAINTAINERS.md, ./ROADMAP.md, ./SECURITY.md'
+ # Check modified files only for pull requests. Cronjob "Verify docs" takes care of checking all markdown files.
+ check-modified-files-only: yes
+ base-branch: ${{ github.base_ref }}
config-file: 'hack/.md_links_config.json'
- name: Markdownlint
run: |
sudo npm install -g markdownlint-cli@0.31.1
make markdownlint
+ - name: Checking whether autogenerated Helm chart documentation is up-to-date
+ working-directory: build/charts/
+ run: |
+ make helm-docs
+ DIFF=$(git diff .)
+ if [ -n "$DIFF" ]; then
+ echo "The Helm chart documentation is out-of-date; please run 'make helm-docs' in 'build/charts/' and commit the changes"
+ exit 1
+ fi
benchmark:
needs: check-changes
@@ -221,7 +234,7 @@ jobs:
runs-on: [ubuntu-latest]
steps:
- name: Set up Go 1.17
- uses: actions/setup-go@v2
+ uses: actions/setup-go@v3
with:
go-version: 1.17
- name: Check-out code
diff --git a/.github/workflows/golicense.yml b/.github/workflows/golicense.yml
index 4c7ecdf598e..2d8ab81ff09 100644
--- a/.github/workflows/golicense.yml
+++ b/.github/workflows/golicense.yml
@@ -4,10 +4,12 @@ on:
branches:
- main
- release-*
+ - feature/*
push:
branches:
- main
- release-*
+ - feature/*
release:
types:
- created
@@ -33,7 +35,7 @@ jobs:
runs-on: [ubuntu-latest]
steps:
- name: Set up Go 1.17
- uses: actions/setup-go@v2
+ uses: actions/setup-go@v3
with:
go-version: 1.17
- uses: actions/checkout@v3
@@ -59,7 +61,7 @@ jobs:
./ci/golicense/run.sh ./antrea-bins ./license-reports
- name: Upload licensing information
if: ${{ always() }}
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
with:
name: licenses.deps
path: license-reports/ALL.deps.txt
diff --git a/.github/workflows/kind.yml b/.github/workflows/kind.yml
index 0f09464591d..3ba9f45a4bb 100644
--- a/.github/workflows/kind.yml
+++ b/.github/workflows/kind.yml
@@ -4,13 +4,15 @@ on:
branches:
- main
- release-*
+ - feature/*
push:
branches:
- main
- release-*
+ - feature/*
env:
- KIND_VERSION: v0.11.1
+ KIND_VERSION: v0.12.0
jobs:
check-changes:
@@ -40,7 +42,7 @@ jobs:
- name: Save Antrea image to tarball
run: docker save -o antrea-ubuntu.tar antrea/antrea-ubuntu-coverage:latest
- name: Upload Antrea image for subsequent jobs
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
with:
name: antrea-ubuntu-cov
path: antrea-ubuntu.tar
@@ -57,7 +59,7 @@ jobs:
- name: Save Flow Aggregator image to tarball
run: docker save -o flow-aggregator.tar antrea/flow-aggregator-coverage:latest
- name: Upload Flow Aggregator image for subsequent jobs
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
with:
name: flow-aggregator-cov
path: flow-aggregator.tar
@@ -65,7 +67,7 @@ jobs:
test-e2e-encap:
name: E2e tests on a Kind cluster on Linux
- needs: [build-antrea-coverage-image, build-flow-aggregator-coverage-image]
+ needs: [build-antrea-coverage-image]
runs-on: [ubuntu-latest]
steps:
- name: Free disk space
@@ -74,15 +76,14 @@ jobs:
sudo apt-get clean
df -h
- uses: actions/checkout@v3
- - uses: actions/setup-go@v2
+ - uses: actions/setup-go@v3
with:
go-version: 1.17
- name: Download Antrea images from previous jobs
- uses: actions/download-artifact@v2
+ uses: actions/download-artifact@v3
- name: Load Antrea image
run: |
docker load -i antrea-ubuntu-cov/antrea-ubuntu.tar
- docker load -i flow-aggregator-cov/flow-aggregator.tar
- name: Install Kind
run: |
curl -Lo ./kind https://github.com/kubernetes-sigs/kind/releases/download/${KIND_VERSION}/kind-$(uname)-amd64
@@ -96,13 +97,13 @@ jobs:
- name: Tar coverage files
run: tar -czf test-e2e-encap-coverage.tar.gz test-e2e-encap-coverage
- name: Upload coverage for test-e2e-encap-coverage
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
with:
name: test-e2e-encap-coverage
path: test-e2e-encap-coverage.tar.gz
retention-days: 30
- name: Codecov
- uses: codecov/codecov-action@v1
+ uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
file: '*.cov.out*'
@@ -113,7 +114,7 @@ jobs:
if: ${{ failure() }}
run: tar -czf log.tar.gz log
- name: Upload test log
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
if: ${{ failure() }}
with:
name: e2e-kind-encap.tar.gz
@@ -122,7 +123,7 @@ jobs:
test-e2e-encap-no-proxy:
name: E2e tests on a Kind cluster on Linux with AntreaProxy disabled
- needs: [build-antrea-coverage-image, build-flow-aggregator-coverage-image]
+ needs: [build-antrea-coverage-image]
runs-on: [ubuntu-latest]
steps:
- name: Free disk space
@@ -131,15 +132,14 @@ jobs:
sudo apt-get clean
df -h
- uses: actions/checkout@v3
- - uses: actions/setup-go@v2
+ - uses: actions/setup-go@v3
with:
go-version: 1.17
- name: Download Antrea images from previous jobs
- uses: actions/download-artifact@v2
+ uses: actions/download-artifact@v3
- name: Load Antrea image
run: |
docker load -i antrea-ubuntu-cov/antrea-ubuntu.tar
- docker load -i flow-aggregator-cov/flow-aggregator.tar
- name: Install Kind
run: |
curl -Lo ./kind https://github.com/kubernetes-sigs/kind/releases/download/${KIND_VERSION}/kind-$(uname)-amd64
@@ -153,13 +153,13 @@ jobs:
- name: Tar coverage files
run: tar -czf test-e2e-encap-no-proxy-coverage.tar.gz test-e2e-encap-no-proxy-coverage
- name: Upload coverage for test-e2e-encap-no-proxy-coverage
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
with:
name: test-e2e-encap-no-proxy-coverage
path: test-e2e-encap-no-proxy-coverage.tar.gz
retention-days: 30
- name: Codecov
- uses: codecov/codecov-action@v1
+ uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
file: '*.cov.out*'
@@ -170,7 +170,7 @@ jobs:
if: ${{ failure() }}
run: tar -czf log.tar.gz log
- name: Upload test log
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
if: ${{ failure() }}
with:
name: e2e-kind-encap-no-proxy.tar.gz
@@ -179,7 +179,7 @@ jobs:
test-e2e-encap-proxy-all:
name: E2e tests on a Kind cluster on Linux with AntreaProxy all Service support
- needs: [ build-antrea-coverage-image, build-flow-aggregator-coverage-image ]
+ needs: [ build-antrea-coverage-image ]
runs-on: [ ubuntu-latest ]
steps:
- name: Free disk space
@@ -188,21 +188,14 @@ jobs:
sudo apt-get clean
df -h
- uses: actions/checkout@v3
- - uses: actions/setup-go@v2
+ - uses: actions/setup-go@v3
with:
go-version: 1.17
- - name: Download Antrea image from previous job
- uses: actions/download-artifact@v1
- with:
- name: antrea-ubuntu-cov
- - name: Download Flow Aggregator image from previous job
- uses: actions/download-artifact@v1
- with:
- name: flow-aggregator-cov
+ - name: Download Antrea images from previous jobs
+ uses: actions/download-artifact@v3
- name: Load Antrea image
run: |
docker load -i antrea-ubuntu-cov/antrea-ubuntu.tar
- docker load -i flow-aggregator-cov/flow-aggregator.tar
- name: Install Kind
run: |
curl -Lo ./kind https://github.com/kubernetes-sigs/kind/releases/download/${KIND_VERSION}/kind-$(uname)-amd64
@@ -216,13 +209,13 @@ jobs:
- name: Tar coverage files
run: tar -czf test-e2e-encap-proxy-all-coverage.tar.gz test-e2e-encap-proxy-all-coverage
- name: Upload coverage for test-e2e-encap-proxy-all-coverage
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
with:
name: test-e2e-encap-proxy-all-coverage
path: test-e2e-encap-proxy-all-coverage.tar.gz
retention-days: 30
- name: Codecov
- uses: codecov/codecov-action@v1
+ uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
file: '*.cov.out*'
@@ -233,7 +226,7 @@ jobs:
if: ${{ failure() }}
run: tar -czf log.tar.gz log
- name: Upload test log
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
if: ${{ failure() }}
with:
name: e2e-kind-encap-proxy-all.tar.gz
@@ -242,7 +235,7 @@ jobs:
test-e2e-noencap:
name: E2e tests on a Kind cluster on Linux (noEncap)
- needs: [build-antrea-coverage-image, build-flow-aggregator-coverage-image]
+ needs: [build-antrea-coverage-image]
runs-on: [ubuntu-latest]
steps:
- name: Free disk space
@@ -251,15 +244,14 @@ jobs:
sudo apt-get clean
df -h
- uses: actions/checkout@v3
- - uses: actions/setup-go@v2
+ - uses: actions/setup-go@v3
with:
go-version: 1.17
- name: Download Antrea images from previous jobs
- uses: actions/download-artifact@v2
+ uses: actions/download-artifact@v3
- name: Load Antrea image
run: |
docker load -i antrea-ubuntu-cov/antrea-ubuntu.tar
- docker load -i flow-aggregator-cov/flow-aggregator.tar
- name: Install Kind
run: |
curl -Lo ./kind https://github.com/kubernetes-sigs/kind/releases/download/${KIND_VERSION}/kind-$(uname)-amd64
@@ -273,13 +265,13 @@ jobs:
- name: Tar coverage files
run: tar -czf test-e2e-noencap-coverage.tar.gz test-e2e-noencap-coverage
- name: Upload coverage for test-e2e-noencap-coverage
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
with:
name: test-e2e-noencap-coverage
path: test-e2e-noencap-coverage.tar.gz
retention-days: 30
- name: Codecov
- uses: codecov/codecov-action@v1
+ uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
file: '*.cov.out*'
@@ -290,7 +282,7 @@ jobs:
if: ${{ failure() }}
run: tar -czf log.tar.gz log
- name: Upload test log
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
if: ${{ failure() }}
with:
name: e2e-kind-noencap.tar.gz
@@ -299,7 +291,7 @@ jobs:
test-e2e-hybrid:
name: E2e tests on a Kind cluster on Linux (hybrid)
- needs: [build-antrea-coverage-image, build-flow-aggregator-coverage-image]
+ needs: [build-antrea-coverage-image]
runs-on: [ubuntu-latest]
steps:
- name: Free disk space
@@ -308,15 +300,14 @@ jobs:
sudo apt-get clean
df -h
- uses: actions/checkout@v3
- - uses: actions/setup-go@v2
+ - uses: actions/setup-go@v3
with:
go-version: 1.17
- name: Download Antrea images from previous jobs
- uses: actions/download-artifact@v2
+ uses: actions/download-artifact@v3
- name: Load Antrea image
run: |
docker load -i antrea-ubuntu-cov/antrea-ubuntu.tar
- docker load -i flow-aggregator-cov/flow-aggregator.tar
- name: Install Kind
run: |
curl -Lo ./kind https://github.com/kubernetes-sigs/kind/releases/download/${KIND_VERSION}/kind-$(uname)-amd64
@@ -330,13 +321,13 @@ jobs:
- name: Tar coverage files
run: tar -czf test-e2e-hybrid-coverage.tar.gz test-e2e-hybrid-coverage
- name: Upload coverage for test-e2e-hybrid-coverage
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
with:
name: test-e2e-hybrid-coverage
path: test-e2e-hybrid-coverage.tar.gz
retention-days: 30
- name: Codecov
- uses: codecov/codecov-action@v1
+ uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
file: '*.cov.out*'
@@ -347,7 +338,7 @@ jobs:
if: ${{ failure() }}
run: tar -czf log.tar.gz log
- name: Upload test log
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
if: ${{ failure() }}
with:
name: e2e-kind-hybrid.tar.gz
@@ -359,7 +350,7 @@ jobs:
# test uses a Geneve overlay.
test-e2e-encap-no-np:
name: E2e tests on a Kind cluster on Linux with Antrea-native policies disabled
- needs: [build-antrea-coverage-image, build-flow-aggregator-coverage-image]
+ needs: [build-antrea-coverage-image]
runs-on: [ubuntu-latest]
steps:
- name: Free disk space
@@ -368,15 +359,14 @@ jobs:
sudo apt-get clean
df -h
- uses: actions/checkout@v3
- - uses: actions/setup-go@v2
+ - uses: actions/setup-go@v3
with:
go-version: 1.17
- name: Download Antrea images from previous jobs
- uses: actions/download-artifact@v2
+ uses: actions/download-artifact@v3
- name: Load Antrea image
run: |
docker load -i antrea-ubuntu-cov/antrea-ubuntu.tar
- docker load -i flow-aggregator-cov/flow-aggregator.tar
- name: Install Kind
run: |
curl -Lo ./kind https://github.com/kubernetes-sigs/kind/releases/download/${KIND_VERSION}/kind-$(uname)-amd64
@@ -390,13 +380,13 @@ jobs:
- name: Tar coverage files
run: tar -czf test-e2e-encap-no-np-coverage.tar.gz test-e2e-encap-no-np-coverage
- name: Upload coverage for test-e2e-encap-no-np-coverage
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
with:
name: test-e2e-encap-no-np-coverage
path: test-e2e-encap-no-np-coverage.tar.gz
retention-days: 30
- name: Codecov
- uses: codecov/codecov-action@v1
+ uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
file: '*.cov.out*'
@@ -407,13 +397,70 @@ jobs:
if: ${{ failure() }}
run: tar -czf log.tar.gz log
- name: Upload test log
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
if: ${{ failure() }}
with:
name: e2e-kind-encap-no-np.tar.gz
path: log.tar.gz
retention-days: 30
+ test-e2e-flow-visibility:
+ name: E2e tests on a Kind cluster on Linux for Flow Visibility
+ needs: [build-antrea-coverage-image, build-flow-aggregator-coverage-image]
+ runs-on: [ubuntu-latest]
+ steps:
+ - name: Free disk space
+ # https://github.com/actions/virtual-environments/issues/709
+ run: |
+ sudo apt-get clean
+ df -h
+ - uses: actions/checkout@v3
+ - uses: actions/setup-go@v3
+ with:
+ go-version: 1.17
+ - name: Download Antrea images from previous jobs
+ uses: actions/download-artifact@v3
+ - name: Load Antrea image
+ run: |
+ docker load -i antrea-ubuntu-cov/antrea-ubuntu.tar
+ docker load -i flow-aggregator-cov/flow-aggregator.tar
+ - name: Install Kind
+ run: |
+ curl -Lo ./kind https://github.com/kubernetes-sigs/kind/releases/download/${KIND_VERSION}/kind-$(uname)-amd64
+ chmod +x ./kind
+ sudo mv kind /usr/local/bin
+ - name: Run e2e tests
+ run: |
+ mkdir log
+ mkdir test-e2e-fa-coverage
+ ANTREA_LOG_DIR=$PWD/log ANTREA_COV_DIR=$PWD/test-e2e-fa-coverage ./ci/kind/test-e2e-kind.sh --encap-mode encap --coverage --flow-visibility
+ - name: Tar coverage files
+ run: tar -czf test-e2e-fa-coverage.tar.gz test-e2e-fa-coverage
+ - name: Upload coverage for test-e2e-fa-coverage
+ uses: actions/upload-artifact@v3
+ with:
+ name: test-e2e-fa-coverage
+ path: test-e2e-fa-coverage.tar.gz
+ retention-days: 30
+ - name: Codecov
+ uses: codecov/codecov-action@v3
+ with:
+ token: ${{ secrets.CODECOV_TOKEN }}
+ file: '*.cov.out*'
+ flags: kind-e2e-tests
+ name: codecov-test-e2e-fa
+ directory: test-e2e-fa-coverage
+ - name: Tar log files
+ if: ${{ failure() }}
+ run: tar -czf log.tar.gz log
+ - name: Upload test log
+ uses: actions/upload-artifact@v3
+ if: ${{ failure() }}
+ with:
+ name: e2e-kind-fa.tar.gz
+ path: log.tar.gz
+ retention-days: 30
+
test-netpol-tmp:
name: Run experimental network policy tests (netpol) on Kind cluster
needs: build-antrea-coverage-image
@@ -425,13 +472,14 @@ jobs:
sudo apt-get clean
df -h
- uses: actions/checkout@v3
- - uses: actions/setup-go@v2
+ - uses: actions/setup-go@v3
with:
go-version: 1.17
- name: Download Antrea image from previous job
- uses: actions/download-artifact@v1
+ uses: actions/download-artifact@v3
with:
name: antrea-ubuntu-cov
+ path: antrea-ubuntu-cov
- name: Load Antrea image
run: |
docker load -i antrea-ubuntu-cov/antrea-ubuntu.tar
@@ -460,13 +508,14 @@ jobs:
sudo apt-get clean
df -h
- uses: actions/checkout@v3
- - uses: actions/setup-go@v2
+ - uses: actions/setup-go@v3
with:
go-version: 1.17
- name: Download Antrea image from previous job
- uses: actions/download-artifact@v1
+ uses: actions/download-artifact@v3
with:
name: antrea-ubuntu-cov
+ path: antrea-ubuntu-cov
- name: Load Antrea image
run: |
docker load -i antrea-ubuntu-cov/antrea-ubuntu.tar
@@ -487,7 +536,7 @@ jobs:
# yet.
artifact-cleanup:
name: Delete uploaded images
- needs: [build-antrea-coverage-image, build-flow-aggregator-coverage-image, test-e2e-encap, test-e2e-encap-no-proxy, test-e2e-encap-proxy-all, test-e2e-noencap, test-e2e-hybrid, test-e2e-encap-no-np, test-netpol-tmp, validate-prometheus-metrics-doc]
+ needs: [build-antrea-coverage-image, build-flow-aggregator-coverage-image, test-e2e-encap, test-e2e-encap-no-proxy, test-e2e-encap-proxy-all, test-e2e-noencap, test-e2e-hybrid, test-e2e-encap-no-np, test-netpol-tmp, validate-prometheus-metrics-doc, test-e2e-flow-visibility]
if: ${{ always() && (needs.build-antrea-coverage-image.result == 'success' || needs.build-flow-aggregator-coverage-image.result == 'success') }}
runs-on: [ubuntu-latest]
steps:
diff --git a/.github/workflows/kind_upgrade.yml b/.github/workflows/kind_upgrade.yml
index 03bb3df3431..ed6a24065c1 100644
--- a/.github/workflows/kind_upgrade.yml
+++ b/.github/workflows/kind_upgrade.yml
@@ -4,13 +4,15 @@ on:
branches:
- main
- release-*
+ - feature/*
push:
branches:
- main
- release-*
+ - feature/*
env:
- KIND_VERSION: v0.11.1
+ KIND_VERSION: v0.12.0
jobs:
check-changes:
@@ -40,7 +42,7 @@ jobs:
- name: Save Antrea image to tarball
run: docker save -o antrea-ubuntu.tar projects.registry.vmware.com/antrea/antrea-ubuntu:latest
- name: Upload Antrea image for subsequent jobs
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
with:
name: antrea-ubuntu
path: antrea-ubuntu.tar
@@ -59,13 +61,14 @@ jobs:
sudo apt-get clean
df -h
- uses: actions/checkout@v3
- - uses: actions/setup-go@v2
+ - uses: actions/setup-go@v3
with:
go-version: 1.17
- name: Download Antrea image from previous job
- uses: actions/download-artifact@v1
+ uses: actions/download-artifact@v3
with:
name: antrea-ubuntu
+ path: antrea-ubuntu
- name: Load Antrea image
run: docker load -i antrea-ubuntu/antrea-ubuntu.tar
- name: Install Kind
@@ -81,7 +84,7 @@ jobs:
if: ${{ failure() }}
run: tar -czf log.tar.gz log
- name: Upload test log
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
if: ${{ failure() }}
with:
name: upgrade-from-antrea-version-n-1.tar.gz
@@ -99,13 +102,14 @@ jobs:
sudo apt-get clean
df -h
- uses: actions/checkout@v3
- - uses: actions/setup-go@v2
+ - uses: actions/setup-go@v3
with:
go-version: 1.17
- name: Download Antrea image from previous job
- uses: actions/download-artifact@v1
+ uses: actions/download-artifact@v3
with:
name: antrea-ubuntu
+ path: antrea-ubuntu
- name: Load Antrea image
run: docker load -i antrea-ubuntu/antrea-ubuntu.tar
- name: Install Kind
@@ -121,7 +125,7 @@ jobs:
if: ${{ failure() }}
run: tar -czf log.tar.gz log
- name: Upload test log
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
if: ${{ failure() }}
with:
name: upgrade-from-antrea-version-n-2.tar.gz
@@ -139,13 +143,14 @@ jobs:
sudo apt-get clean
df -h
- uses: actions/checkout@v3
- - uses: actions/setup-go@v2
+ - uses: actions/setup-go@v3
with:
go-version: 1.17
- name: Download Antrea image from previous job
- uses: actions/download-artifact@v1
+ uses: actions/download-artifact@v3
with:
name: antrea-ubuntu
+ path: antrea-ubuntu
- name: Load Antrea image
run: docker load -i antrea-ubuntu/antrea-ubuntu.tar
- name: Install Kind
@@ -161,7 +166,7 @@ jobs:
if: ${{ failure() }}
run: tar -czf log.tar.gz log
- name: Upload test log
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
if: ${{ failure() }}
with:
name: api-compatible-with-client-version-n-1.tar.gz
@@ -179,13 +184,14 @@ jobs:
sudo apt-get clean
df -h
- uses: actions/checkout@v3
- - uses: actions/setup-go@v2
+ - uses: actions/setup-go@v3
with:
go-version: 1.17
- name: Download Antrea image from previous job
- uses: actions/download-artifact@v1
+ uses: actions/download-artifact@v3
with:
name: antrea-ubuntu
+ path: antrea-ubuntu
- name: Load Antrea image
run: docker load -i antrea-ubuntu/antrea-ubuntu.tar
- name: Install Kind
@@ -201,7 +207,7 @@ jobs:
if: ${{ failure() }}
run: tar -czf log.tar.gz log
- name: Upload test log
- uses: actions/upload-artifact@v2
+ uses: actions/upload-artifact@v3
if: ${{ failure() }}
with:
name: api-compatible-with-client-version-n-2.tar.gz
diff --git a/.github/workflows/lifecycle_management.yml b/.github/workflows/lifecycle_management.yml
index 36f38596e1c..81685e06fba 100644
--- a/.github/workflows/lifecycle_management.yml
+++ b/.github/workflows/lifecycle_management.yml
@@ -9,7 +9,7 @@ jobs:
if: github.repository == 'antrea-io/antrea'
runs-on: ubuntu-latest
steps:
- - uses: actions/stale@v4
+ - uses: actions/stale@v5
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
stale-issue-message: 'This issue is stale because it has been open 90 days with no activity. Remove stale label or comment, or this will be closed in 90 days'
diff --git a/.github/workflows/netpol_cyclonus.yml b/.github/workflows/netpol_cyclonus.yml
index c3718029c76..a0cad16436c 100644
--- a/.github/workflows/netpol_cyclonus.yml
+++ b/.github/workflows/netpol_cyclonus.yml
@@ -5,7 +5,7 @@ on:
- cron: '0 0 * * *'
env:
- KIND_VERSION: v0.11.1
+ KIND_VERSION: v0.12.0
jobs:
diff --git a/.github/workflows/upload_release_assets.yml b/.github/workflows/upload_release_assets.yml
index 50060dd4c86..722b9b50490 100644
--- a/.github/workflows/upload_release_assets.yml
+++ b/.github/workflows/upload_release_assets.yml
@@ -10,7 +10,7 @@ jobs:
runs-on: [ubuntu-latest]
steps:
- name: Set up Go 1.17
- uses: actions/setup-go@v2
+ uses: actions/setup-go@v3
with:
go-version: 1.17
- uses: actions/checkout@v3
diff --git a/.github/workflows/verify_docs.yml b/.github/workflows/verify_docs.yml
new file mode 100644
index 00000000000..50dbf839cca
--- /dev/null
+++ b/.github/workflows/verify_docs.yml
@@ -0,0 +1,30 @@
+name: Verify docs
+
+on:
+ schedule:
+ # every day at 9am
+ - cron: '0 9 * * *'
+
+jobs:
+ verify:
+ name: Verify docs and spelling
+ runs-on: [ubuntu-latest]
+ steps:
+ - name: Set up Go 1.17
+ uses: actions/setup-go@v3
+ with:
+ go-version: 1.17
+ - name: Check-out code
+ uses: actions/checkout@v3
+ - name: Run verify scripts
+ run: make verify
+ - name: Checking for broken Markdown links for main branch
+ uses: gaurav-nelson/github-action-markdown-link-check@v1
+ with:
+ folder-path: './docs'
+ file-path: './README.md, ./CHANGELOG.md, ./CONTRIBUTING.md, ./GOVERNANCE.md, ./MAINTAINERS.md, ./ROADMAP.md, ./SECURITY.md'
+ config-file: 'hack/.md_links_config.json'
+ - name: Markdownlint
+ run: |
+ sudo npm install -g markdownlint-cli@0.31.1
+ make markdownlint
diff --git a/ADOPTERS.md b/ADOPTERS.md
index 31b95397600..7d306e0412f 100644
--- a/ADOPTERS.md
+++ b/ADOPTERS.md
@@ -4,6 +4,14 @@
+
+
+
+
+
+
## Success Stories
Below is a list of adopters of Antrea that have publicly shared the details
@@ -17,6 +25,33 @@ teams can deploy reliably, prevent failure and assure the customer experience.
We use Antrea's Open vSwitch support to tune how services interact in Kubernetes
clusters. We are @glasnostic on Twitter.
+**[Transwarp](https://www.transwarp.io)**
+
+Transwarp is committed to building enterprise-level big data infrastructure
+software, providing enterprises with infrastructure software and supporting
+around the whole data lifecycle to build a data world of the future.
+
+1. We use Antrea's AntreaClusterNetworkPolicy and AntreaNetworkPolicy to protect
+big data software for every tenant of our kubernetes platform.
+2. We use Antrea's Open vSwitch to support Pod-To-Pod network between flannel and
+antrea clusters, and also between antrea clusters
+3. We use Antrea's Open vSwitch to support Pod-To-Pod network between flannel and
+antrea nodes in one cluster for upgrading.
+4. We use Antrea's Egress feature to keep the original source ip to ensure
+Internal Pods can get the real source IP of the request.
+
+You can contact us with mkt@transwarp.io
+
+**[TeraSky](https://terasky.com)**
+
+TeraSky is a Global Advanced Technology Solutions Provider.
+Antrea is used in our internal Kubernetes clusters as well as by many of our customers.
+Antrea helps us to apply a very strong and flexible security models in Kubernetes.
+We are very heavily utilizing Antrea Cluster Network Policies, Antrea Network Policies,
+and the Egress functionality.
+
+We are @TeraSkycom1 on Twitter.
+
## Adding yourself as an Adopter
It would be great to have your success story and logo on our list of
diff --git a/CHANGELOG/CHANGELOG-1.2.md b/CHANGELOG/CHANGELOG-1.2.md
index 3c2048d9df1..6e5c44624fe 100644
--- a/CHANGELOG/CHANGELOG-1.2.md
+++ b/CHANGELOG/CHANGELOG-1.2.md
@@ -1,5 +1,26 @@
# Changelog 1.2
+## 1.2.4 - 2022-04-29
+
+### Changed
+- Use iptables-wrapper in Antrea container. Now antrea-agent can work with distros that lack the iptables kernel module of "legacy" mode (ip_tables). ([#3276](https://github.com/antrea-io/antrea/pull/3276), [@antoninbas])
+- Reduce permissions of Antrea ServiceAccount for updating annotations. ([#3393](https://github.com/antrea-io/antrea/pull/3393), [@tnqn])
+- [Windows] Use uplink MAC as source MAC when transmitting packets to underlay network from Windows Nodes. Therefore, MAC address spoofing configuration like "Forged transmits" in VMware vSphere doesn't need to be enabled. ([#3516](https://github.com/antrea-io/antrea/pull/3516), [@wenyingd])
+
+### Fixed
+- Fix DNS resolution error of antrea-agent on AKS by using `ClusterFirst` dnsPolicy. ([#3701](https://github.com/antrea-io/antrea/pull/3701), [@tnqn])
+- Fix status report of Antrea-native policies with multiple rules that have different AppliedTo. ([#3074](https://github.com/antrea-io/antrea/pull/3074), [@tnqn])
+- Upgrade Go version to 1.17 to pick up security fix for CVE-2021-44716. ([#3189](https://github.com/antrea-io/antrea/pull/3189), [@antoninbas])
+- Fix NetworkPolicy resources dump for Agent's supportbundle. ([#3083](https://github.com/antrea-io/antrea/pull/3083), [@antoninbas])
+- Fix gateway interface MTU configuration error on Windows. ([#3043](https://github.com/antrea-io/antrea/pull/3043), [@lzhecheng]) [Windows]
+- Fix initialization error of antrea-agent on Windows by specifying hostname explicitly in VMSwitch commands. ([#3169](https://github.com/antrea-io/antrea/pull/3169), [@XinShuYang]) [Windows]
+- Ensure that the Windows Node name obtained from the environment or from hostname is converted to lower-case. ([#2672](https://github.com/antrea-io/antrea/pull/2672), [@shettyg]) [Windows]
+- Fix typos in the example YAML in antrea-network-policy doc. ([#3079](https://github.com/antrea-io/antrea/pull/3079) [#3092](https://github.com/antrea-io/antrea/pull/3092), [@antoninbas] [@Jexf])
+- Fix ipBlock referenced in nested ClusterGroup not processed correctly. ([#3383](https://github.com/antrea-io/antrea/pull/3383), [@Dyanngg])
+- Fix NetworkPolicy may not be enforced correctly after restarting a Node. ([#3467](https://github.com/antrea-io/antrea/pull/3467), [@tnqn])
+- Fix antrea-agent crash caused by interface detection in AKS/EKS with NetworkPolicyOnly mode. ([#3219](https://github.com/antrea-io/antrea/pull/3219), [@wenyingd])
+- Fix locally generated packets from Node net namespace might be SNATed mistakenly when Egress is enabled. ([#3430](https://github.com/antrea-io/antrea/pull/3430), [@tnqn])
+
## 1.2.3 - 2021-09-24
### Changed
@@ -103,20 +124,23 @@ The NetworkPolicyStats feature is graduated from Alpha to Beta and is therefore
[go-ipfix]: https://github.com/vmware/go-ipfix
[whereabouts]: https://github.com/k8snetworkplumbingwg/whereabouts
-[@abhiraut]: https://github.com/abhiraut
-[@antoninbas]: https://github.com/antoninbas
[@Dhruv-J]: https://github.com/Dhruv-J
-[@dreamtalen]: https://github.com/dreamtalen
[@Dyanngg]: https://github.com/Dyanngg
[@GraysonWu]: https://github.com/GraysonWu
+[@Jexf]: https://github.com/Jexf
+[@PeterEltgroth]: https://github.com/PeterEltgroth
+[@XinShuYang]: https://github.com/XinShuYang
+[@abhiraut]: https://github.com/abhiraut
+[@antoninbas]: https://github.com/antoninbas
+[@dreamtalen]: https://github.com/dreamtalen
[@hangyan]: https://github.com/hangyan
[@hongliangl]: https://github.com/hongliangl
[@liu4480]: https://github.com/liu4480
[@luolanzone]: https://github.com/luolanzone
[@lzhecheng]: https://github.com/lzhecheng
[@monotosh-avi]: https://github.com/monotosh-avi
-[@PeterEltgroth]: https://github.com/PeterEltgroth
[@ramay1]: https://github.com/ramay1
+[@shettyg]: https://github.com/shettyg
[@srikartati]: https://github.com/srikartati
[@tnqn]: https://github.com/tnqn
[@wenqiq]: https://github.com/wenqiq
diff --git a/CHANGELOG/CHANGELOG-1.5.md b/CHANGELOG/CHANGELOG-1.5.md
index 163a614a1b4..5f301748ce7 100644
--- a/CHANGELOG/CHANGELOG-1.5.md
+++ b/CHANGELOG/CHANGELOG-1.5.md
@@ -1,5 +1,15 @@
# Changelog 1.5
+## 1.5.3 - 2022-05-12
+
+### Fixed
+
+- Fix export/import of Services with named ports when using the Antrea Multi-cluster feature. ([#3561](https://github.com/antrea-io/antrea/pull/3561), [@luolanzone])
+- Fix handling of the "reject" packets generated by the Antrea Agent to avoid infinite looping. ([#3569](https://github.com/antrea-io/antrea/pull/3569), [@GraysonWu])
+- Fix DNS resolution error of Antrea Agent on AKS by using `ClusterFirst` dnsPolicy. ([#3701](https://github.com/antrea-io/antrea/pull/3701), [@tnqn])
+- Fix tolerations for Pods running on control-plane for Kubernetes >= 1.24. ([#3731](https://github.com/antrea-io/antrea/pull/3731), [@xliuxu])
+- Reduce permissions of Antrea Agent ServiceAccount. ([#3691](https://github.com/antrea-io/antrea/pull/3691), [@xliuxu])
+
## 1.5.2 - 2022-03-21
### Fixed
@@ -117,4 +127,5 @@
[@WenzelZ]: https://github.com/WenzelZ
[@xiaoxiaobaba]: https://github.com/xiaoxiaobaba
[@XinShuYang]: https://github.com/XinShuYang
+[@xliuxu]: https://github.com/xliuxu
[@yanjunz97]: https://github.com/yanjunz97
diff --git a/CHANGELOG/CHANGELOG-1.6.md b/CHANGELOG/CHANGELOG-1.6.md
index 61d14f1b2b6..5ed64b8fad5 100644
--- a/CHANGELOG/CHANGELOG-1.6.md
+++ b/CHANGELOG/CHANGELOG-1.6.md
@@ -1,8 +1,26 @@
# Changelog 1.6
+## 1.6.1 - 2022-05-11
+
+### Added
+
+- Add [documentation](https://github.com/antrea-io/antrea/blob/release-1.6/docs/security.md#protecting-your-cluster-against-privilege-escalations) for the Antrea Agent RBAC permissions and how to restrict them using Gatekeeper/OPA. ([#3694](https://github.com/antrea-io/antrea/pull/3694), [@antoninbas])
+
+### Fixed
+
+- Clean up stale routes installed by AntreaProxy when ProxyAll is disabled. ([#3465](https://github.com/antrea-io/antrea/pull/3465), [@hongliangl])
+- Fix export/import of Services with named ports when using the Antrea Multi-cluster feature. ([#3561](https://github.com/antrea-io/antrea/pull/3561), [@luolanzone])
+- Fix handling of the "reject" packets generated by the Antrea Agent to avoid infinite looping. ([#3569](https://github.com/antrea-io/antrea/pull/3569), [@GraysonWu])
+- Fix DNS resolution error of Antrea Agent on AKS by using `ClusterFirst` dnsPolicy. ([#3701](https://github.com/antrea-io/antrea/pull/3701), [@tnqn])
+- Fix tolerations for Pods running on control-plane for Kubernetes >= 1.24. ([#3731](https://github.com/antrea-io/antrea/pull/3731), [@xliuxu])
+- Reduce permissions of Antrea Agent ServiceAccount. ([#3691](https://github.com/antrea-io/antrea/pull/3691), [@xliuxu])
+- [Windows] Ensure that Service traffic does not bypass NetworkPolicies when ProxyAll is enabled. ([#3510](https://github.com/antrea-io/antrea/pull/3510), [@hongliangl])
+- Fix Antrea wildcard FQDN NetworkPolicies not working when NodeLocal DNSCache is enabled. ([#3510](https://github.com/antrea-io/antrea/pull/3510), [@hongliangl])
+
## 1.6.0 - 2022-03-29
-The Egress feature is graduated from Alpha to Beta and is therefore enabled by default.
+- The Egress feature is graduated from Alpha to Beta and is therefore enabled by default.
+- The support for proxying all Service traffic by Antrea Proxy (enabled by `antreaProxy.proxyAll`) is now Beta.
### Added
@@ -78,7 +96,7 @@ The Egress feature is graduated from Alpha to Beta and is therefore enabled by d
- Fix CT mark matching without range in flow exporter. ([#3348](https://github.com/antrea-io/antrea/pull/3348), [@hongliangl])
- [Windows] Enable IP forwarding of the Windows bridge local interface to fix support for Service of type LoadBalancer. ([#3137](https://github.com/antrea-io/antrea/pull/3137), [@hongliangl])
-[Antrea Multi-cluster]: https://github.com/antrea-io/antrea/blob/v1.6.0/docs/multicluster/getting-started.md
+[Antrea Multi-cluster]: https://github.com/antrea-io/antrea/blob/v1.6.0/docs/multicluster/user-guide.md
[Antrea IPAM]: https://github.com/antrea-io/antrea/blob/v1.6.0/docs/antrea-ipam.md
[AntreaPolicy]: https://github.com/antrea-io/antrea/blob/v1.6.0/docs/antrea-network-policy.md
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 60ce7aca971..f4fa7ce75ee 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -9,6 +9,7 @@ to effectively get it merged upstream.
- [Getting Started](#getting-started)
- [Accounts Setup](#accounts-setup)
- [Contribute](#contribute)
+ - [Pre-Commit Hook](#pre-commit-hook)
- [GitHub Workflow](#github-workflow)
- [Getting reviewers](#getting-reviewers)
- [Getting your PR verified by CI](#getting-your-pr-verified-by-ci)
@@ -33,7 +34,6 @@ contributing to project Antrea:
2. Check out the [Architecture document](docs/design/architecture.md) for the Antrea
architecture and design.
3. Set up necessary [accounts](#accounts-setup).
-4. Set up your [development environment](docs/contributors/manual-installation.md)
Now that you're setup, skip ahead to learn how to [contribute](#contribute).
@@ -58,6 +58,13 @@ In order to help you get your hands "dirty", there is a list of
[starter](https://github.com/antrea-io/antrea/labels/Good%20first%20issue)
issues from which you can choose.
+### Pre-Commit Hook
+
+There is a recommended pre-commit git hook which we advise you use. You can find
+it here:
+[hack/git_client_side_hooks/pre-commit](hack/git_client_side_hooks/pre-commit).
+You can run `make install-hooks` to copy it to your local `.git/hooks/` folder, and remove it via `make uninstall-hooks`
+
### GitHub Workflow
Developers work in their own forked copy of the repository and when ready,
diff --git a/Makefile b/Makefile
index e5e672a1deb..ccd11ff1dc8 100644
--- a/Makefile
+++ b/Makefile
@@ -25,6 +25,16 @@ UNAME_S := $(shell uname -s)
USERID := $(shell id -u)
GRPID := $(shell id -g)
+.PHONY: install-hooks
+install-hooks:
+ @echo "===> Copying Antrea git hooks to local <==="
+ install hack/git_client_side_hooks/pre-commit .git/hooks/
+
+.PHONY: uninstall-hooks
+uninstall-hooks:
+ @echo "===> Removing Antrea git hooks from local <==="
+ rm .git/hooks/pre-commit
+
.PHONY: bin
bin:
@mkdir -p $(BINDIR)
@@ -275,6 +285,11 @@ codegen:
@echo "===> Updating generated code <==="
$(CURDIR)/hack/update-codegen.sh
+.PHONY: mockgen
+mockgen:
+ @echo "===> Updating generated mock code <==="
+ $(CURDIR)/hack/update-codegen.sh mockgen
+
### Docker images ###
.PHONY: ubuntu
@@ -346,11 +361,7 @@ build-scale-simulator:
.PHONY: manifest
manifest:
@echo "===> Generating dev manifest for Antrea <==="
- $(CURDIR)/hack/generate-manifest.sh --mode dev > build/yamls/antrea.yml
- $(CURDIR)/hack/generate-manifest.sh --mode dev --ipsec > build/yamls/antrea-ipsec.yml
- $(CURDIR)/hack/generate-manifest.sh --mode dev --cloud EKS --encap-mode networkPolicyOnly > build/yamls/antrea-eks.yml
- $(CURDIR)/hack/generate-manifest.sh --mode dev --cloud GKE --encap-mode noEncap > build/yamls/antrea-gke.yml
- $(CURDIR)/hack/generate-manifest.sh --mode dev --cloud AKS --encap-mode networkPolicyOnly > build/yamls/antrea-aks.yml
+ $(CURDIR)/hack/generate-standard-manifests.sh --mode dev --out build/yamls
$(CURDIR)/hack/generate-manifest-octant.sh --mode dev > build/yamls/antrea-octant.yml
$(CURDIR)/hack/generate-manifest-windows.sh --mode dev > build/yamls/antrea-windows.yml
$(CURDIR)/hack/generate-manifest-flow-aggregator.sh --mode dev > build/yamls/flow-aggregator.yml
@@ -434,12 +445,12 @@ toc:
.PHONE: markdownlint
markdownlint:
@echo "===> Running markdownlint <==="
- markdownlint -c .markdownlint-config.yml -i CHANGELOG/ -i CHANGELOG.md -i hack/netpol -i CODE_OF_CONDUCT.md .
+ markdownlint -c hack/.markdownlint-config.yml -p hack/.markdownlint-ignore .
.PHONE: markdownlint-fix
markdownlint-fix:
@echo "===> Running markdownlint <==="
- markdownlint --fix -c .markdownlint-config.yml -i CHANGELOG/ -i CHANGELOG.md -i hack/netpol -i CODE_OF_CONDUCT.md .
+ markdownlint --fix -c hack/.markdownlint-config.yml -p hack/.markdownlint-ignore .
.PHONY: spelling-fix
spelling-fix:
diff --git a/README.md b/README.md
index 05f4cd029ab..d1a7ab34283 100644
--- a/README.md
+++ b/README.md
@@ -98,12 +98,14 @@ Also check out [@ProjectAntrea](https://twitter.com/ProjectAntrea) on Twitter!
analysis, flow inspection). It exposes Prometheus metrics and supports
exporting network flow information which can be visualized in Kibana
dashboards.
-* **Encryption**: Encryption of inter-Node Pod traffic with IPsec tunnels when
- using an overlay Pod network.
+* **Encryption**: Encryption of inter-Node Pod traffic with IPsec or WireGuard
+ tunnels.
* **Easy deployment**: Antrea is deployed by applying a single YAML manifest
file.
-Refer to the [Changelogs](CHANGELOG/README.md) for a detailed list of features
+To explore more Antrea features and their usage, check the [Getting started](docs/getting-started.md#features)
+document and user guides in the [Antrea documentation folder](docs/). Refer to
+the [Changelogs](CHANGELOG/README.md) for a detailed list of features
introduced for each version release.
## Adopters
diff --git a/ROADMAP.md b/ROADMAP.md
index 129a2fa1713..f8d2c3efdd8 100644
--- a/ROADMAP.md
+++ b/ROADMAP.md
@@ -39,13 +39,6 @@ enhance existing features and add new features to help diagnose K8s networking
and NetworkPolicy implementation, and to provide good visibility into the Antrea
network.
-* **Flexible IPAM**
-So far Antrea leverages K8s NodeIPAM for IPAM which allocates a single subnet
-for each K8s Node. NodeIPAM can either run as part of the Antrea Controller, or
-run within kube-controller-manager.
-In future, Antrea will implement its own IPAM, and support more IPAM strategies
-besides subnet per Node, like multiple IP pools per Node or per Namespace.
-
* **NFV and Telco use cases**
We plan to explore and provide support for NFV and Telco use cases. We will add
native Pod multi-interface support in Antrea, and support Pod interfaces on
@@ -60,12 +53,17 @@ observability features to get into application level visibility.
* **Multi-cluster networking**
We would extend Antrea from CNI of a single Kubernetes cluster to multi-cluster
networking, and implement multi-cluster features like multi-cluster Services,
-cross-cluster connectivity, multi-cluster NetworkPolicies.
+cross-cluster connectivity, multi-cluster NetworkPolicies. Antrea multi-cluster
+functionalities are under active development. Check the [Antrea Multi-cluster
+user guide](docs/multicluster/user-guide.md) to learn what features are already
+supported.
* **Analytics**
With the network flows exported by Antrea, we plan to further build an analytics
solution that consumes the network flows, and provides traffic analysis,
-NetworkPolicy recommendation, security and network performance monitoring.
+NetworkPolicy recommendation, security and network performance monitoring. We
+already started a sub-project of Antrea - [Theia](https://github.com/antrea-io/theia) -
+for network flow visibility and analytics. Stay tunned!
* **K8s Node security**
So far Antrea focuses on K8s Pod networking and security, but we would like to
diff --git a/VERSION b/VERSION
index b9b03961486..c172a83800b 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-v1.6.0-dev
+v1.7.0-dev
diff --git a/build/charts/Makefile b/build/charts/Makefile
new file mode 100644
index 00000000000..608a7eafa98
--- /dev/null
+++ b/build/charts/Makefile
@@ -0,0 +1,6 @@
+USERID := $(shell id -u)
+GRPID := $(shell id -g)
+
+.PHONY: helm-docs
+helm-docs:
+ docker run --rm --volume "$(CURDIR):/helm-docs" --user=$(USERID):$(GRPID) jnorwood/helm-docs:v1.7.0
diff --git a/build/charts/antrea/.helmignore b/build/charts/antrea/.helmignore
new file mode 100644
index 00000000000..0e8a0eb36f4
--- /dev/null
+++ b/build/charts/antrea/.helmignore
@@ -0,0 +1,23 @@
+# Patterns to ignore when building packages.
+# This supports shell glob matching, relative path matching, and
+# negation (prefixed with !). Only one pattern per line.
+.DS_Store
+# Common VCS dirs
+.git/
+.gitignore
+.bzr/
+.bzrignore
+.hg/
+.hgignore
+.svn/
+# Common backup files
+*.swp
+*.bak
+*.tmp
+*.orig
+*~
+# Various IDEs
+.project
+.idea/
+*.tmproj
+.vscode/
diff --git a/build/charts/antrea/Chart.yaml b/build/charts/antrea/Chart.yaml
new file mode 100644
index 00000000000..d835cf2b082
--- /dev/null
+++ b/build/charts/antrea/Chart.yaml
@@ -0,0 +1,18 @@
+apiVersion: v2
+name: antrea
+type: application
+displayName: Antrea
+home: https://antrea.io/
+version: 1.17.0-dev
+appVersion: 1.17.0-dev
+kubeVersion: ">= 1.16.0-0"
+icon: https://raw.githubusercontent.com/antrea-io/antrea/main/docs/assets/logo/antrea_logo.svg
+description: Kubernetes networking based on Open vSwitch
+keywords:
+ - Kubernetes
+ - CNCF
+ - Networking
+ - CNI
+ - Security
+sources:
+ - https://github.com/antrea-io/antrea
diff --git a/build/charts/antrea/README.md b/build/charts/antrea/README.md
new file mode 100644
index 00000000000..d68c2d0faae
--- /dev/null
+++ b/build/charts/antrea/README.md
@@ -0,0 +1,108 @@
+# antrea
+
+  
+
+Kubernetes networking based on Open vSwitch
+
+**Homepage:**
+
+## Source Code
+
+*
+
+## Requirements
+
+Kubernetes: `>= 1.16.0-0`
+
+## Values
+
+| Key | Type | Default | Description |
+|-----|------|---------|-------------|
+| agent.affinity | object | `{}` | Affinity for the antrea-agent Pods. |
+| agent.antreaAgent.extraArgs | list | `[]` | Extra command-line arguments for antrea-agent. |
+| agent.antreaAgent.extraEnv | object | `{}` | Extra environment variables to be injected into antrea-agent. |
+| agent.antreaAgent.extraVolumeMounts | list | `[]` | Additional volumeMounts for the antrea-agent container. |
+| agent.antreaAgent.logFileMaxNum | int | `4` | Max number of log files. |
+| agent.antreaAgent.logFileMaxSize | int | `100` | Max size in MBs of any single log file. |
+| agent.antreaAgent.resources | object | `{"requests":{"cpu":"200m"}}` | Resource requests and limits for the antrea-agent container. |
+| agent.antreaIPsec.resources | object | `{"requests":{"cpu":"50m"}}` | Resource requests and limits for the antrea-ipsec container (when IPsec is enabled). |
+| agent.antreaOVS.extraArgs | list | `[]` | Extra command-line arguments for antrea-ovs. |
+| agent.antreaOVS.logFileMaxNum | int | `4` | Max number of log files. |
+| agent.antreaOVS.logFileMaxSize | int | `100` | Max size in MBs of any single log file. |
+| agent.antreaOVS.resources | object | `{"requests":{"cpu":"200m"}}` | Resource requests and limits for the antrea-ovs container. |
+| agent.apiPort | int | `10350` | Port for the antrea-agent APIServer to serve on. |
+| agent.dnsPolicy | string | `"ClusterFirstWithHostNet"` | DNS Policy for the antrea-agent Pods. |
+| agent.enablePrometheusMetrics | bool | `true` | Enable metrics exposure via Prometheus. |
+| agent.extraVolumes | list | `[]` | Additional volumes for antrea-agent Pods. |
+| agent.installCNI.resources | object | `{"requests":{"cpu":"100m"}}` | Resource requests and limits for the install-cni initContainer. |
+| agent.nodeSelector | object | `{"kubernetes.io/os":"linux"}` | Node selector for the antrea-agent Pods. |
+| agent.podAnnotations | object | `{}` | Annotations to be added to antrea-agent Pods. |
+| agent.podLabels | object | `{}` | Labels to be added to antrea-agent Pods. |
+| agent.priorityClassName | string | `"system-node-critical"` | Prority class to use for the antrea-agent Pods. |
+| agent.tolerations | list | `[{"key":"CriticalAddonsOnly","operator":"Exists"},{"effect":"NoSchedule","operator":"Exists"},{"effect":"NoExecute","operator":"Exists"}]` | Tolerations for the antrea-agent Pods. |
+| agent.updateStrategy | object | `{"type":"RollingUpdate"}` | Update strategy for the antrea-agent DaemonSet. |
+| antreaProxy.nodePortAddresses | list | `[]` | String array of values which specifies the host IPv4/IPv6 addresses for NodePort. By default, all host addresses are used. |
+| antreaProxy.proxyAll | bool | `false` | Proxy all Service traffic, for all Service types, regardless of where it comes from. |
+| antreaProxy.proxyLoadBalancerIPs | bool | `true` | When set to false, AntreaProxy no longer load-balances traffic destined to the External IPs of LoadBalancer Services. |
+| antreaProxy.skipServices | list | `[]` | |
+| cni.hostBinPath | string | `"/opt/cni/bin"` | Installation path of CNI binaries on the host. |
+| cni.plugins | object | `{"bandwidth":true,"portmap":true}` | Chained plugins to use alongside antrea-cni. |
+| cni.skipBinaries | list | `[]` | CNI binaries shipped with Antrea for which installation should be skipped. |
+| controller.affinity | object | `{}` | Affinity for the antrea-controller Pod. |
+| controller.antreaController.extraArgs | list | `[]` | Extra command-line arguments for antrea-controller. |
+| controller.antreaController.extraEnv | object | `{}` | Extra environment variables to be injected into antrea-controller. |
+| controller.antreaController.logFileMaxNum | int | `4` | Max number of log files. |
+| controller.antreaController.logFileMaxSize | int | `100` | Max size in MBs of any single log file. |
+| controller.antreaController.resources | object | `{"requests":{"cpu":"200m"}}` | Resource requests and limits for the antrea-controller container. |
+| controller.apiPort | int | `10349` | Port for the antrea-controller APIServer to serve on. |
+| controller.enablePrometheusMetrics | bool | `true` | Enable metrics exposure via Prometheus. |
+| controller.nodeSelector | object | `{"kubernetes.io/os":"linux"}` | Node selector for the antrea-controller Pod. |
+| controller.podAnnotations | object | `{}` | Annotations to be added to antrea-controller Pod. |
+| controller.podLabels | object | `{}` | Labels to be added to antrea-controller Pod. |
+| controller.priorityClassName | string | `"system-cluster-critical"` | Prority class to use for the antrea-controller Pod. |
+| controller.selfSignedCert | bool | `true` | Indicates whether to use auto-generated self-signed TLS certificates. If false, a Secret named "antrea-controller-tls" must be provided with the following keys: ca.crt, tls.crt, tls.key. |
+| controller.tolerations | list | `[{"key":"CriticalAddonsOnly","operator":"Exists"},{"effect":"NoSchedule","key":"node-role.kubernetes.io/master"},{"effect":"NoSchedule","key":"node-role.kubernetes.io/control-plane"}]` | Tolerations for the antrea-controller Pod. |
+| defaultMTU | int | `0` | Default MTU to use for the host gateway interface and the network interface of each Pod. By default, antrea-agent will discover the MTU of the Node's primary interface and adjust it to accommodate for tunnel encapsulation overhead if applicable. |
+| disableTXChecksumOffload | bool | `false` | Disable TX checksum offloading for container network interfaces. It's supposed to be set to true when the datapath doesn't support TX checksum offloading, which causes packets to be dropped due to bad checksum. It affects Pods running on Linux Nodes only. |
+| egress.exceptCIDRs | list | `[]` | CIDR ranges to which outbound Pod traffic will not be SNAT'd by Egresses. |
+| enableBridgingMode | bool | `false` | Enable bridging mode of Pod network on Nodes, in which the Node's transport interface is connected to the OVS bridge. |
+| featureGates | object | `{}` | To explicitly enable or disable a FeatureGate and bypass the Antrea defaults, add an entry to the dictionary with the FeatureGate's name as the key and a boolean as the value. |
+| flowCollector.activeFlowExportTimeout | string | `"5s"` | timeout after which a flow record is sent to the collector for active flows. |
+| flowCollector.collectorAddr | string | `"flow-aggregator.flow-aggregator.svc:4739:tls"` | IPFIX collector address as a string with format :[][:]. |
+| flowCollector.flowPollInterval | string | `"5s"` | Determines how often the flow exporter polls for new connections. |
+| flowCollector.idleFlowExportTimeout | string | `"15s"` | timeout after which a flow record is sent to the collector for idle flows. |
+| hostGateway | string | `"antrea-gw0"` | Name of the interface antrea-agent will create and use for host <-> Pod communication. |
+| image | object | `{"pullPolicy":"IfNotPresent","repository":"projects.registry.vmware.com/antrea/antrea-ubuntu","tag":"latest"}` | Container image to use for Antrea components. |
+| ipsec.psk | string | `"changeme"` | Preshared Key (PSK) for IKE authentication. It will be stored in a secret and passed to antrea-agent as an environment variable. |
+| kubeAPIServerOverride | string | `""` | Address of Kubernetes apiserver, to override any value provided in kubeconfig or InClusterConfig. |
+| logVerbosity | int | `0` | |
+| multicast.igmpQueryInterval | string | `"125s"` | The interval at which the antrea-agent sends IGMP queries to Pods. Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h". |
+| multicast.multicastInterfaces | list | `[]` | Names of the interfaces on Nodes that are used to forward multicast traffic. |
+| noSNAT | bool | `false` | Whether or not to SNAT (using the Node IP) the egress traffic from a Pod to the external network. |
+| nodeIPAM.clusterCIDRs | list | `[]` | CIDR ranges to use when allocating Pod IP addresses. |
+| nodeIPAM.enable | bool | `false` | Enable Node IPAM in Antrea |
+| nodeIPAM.nodeCIDRMaskSizeIPv4 | int | `24` | Mask size for IPv4 Node CIDR in IPv4 or dual-stack cluster. |
+| nodeIPAM.nodeCIDRMaskSizeIPv6 | int | `64` | Mask size for IPv6 Node CIDR in IPv6 or dual-stack cluster. |
+| nodeIPAM.serviceCIDR | string | `""` | IPv4 CIDR ranges reserved for Services. |
+| nodeIPAM.serviceCIDRv6 | string | `""` | IPv6 CIDR ranges reserved for Services. |
+| nodePortLocal.enable | bool | `false` | Enable the NodePortLocal feature. |
+| nodePortLocal.portRange | string | `"61000-62000"` | Port range used by NodePortLocal when creating Pod port mappings. |
+| ovs.bridgeName | string | `"br-int"` | Name of the OVS bridge antrea-agent will create and use. |
+| ovs.hwOffload | bool | `false` | Enable hardware offload for the OVS bridge (required additional configuration). |
+| serviceCIDR | string | `""` | IPv4 CIDR range used for Services. Required when AntreaProxy is disabled. |
+| serviceCIDRv6 | string | `""` | IPv6 CIDR range used for Services. Required when AntreaProxy is disabled. |
+| testing.coverage | bool | `false` | |
+| testing.simulator.enable | bool | `false` | |
+| tlsCipherSuites | string | `""` | Comma-separated list of cipher suites that will be used by the Antrea APIservers. If empty, the default Go Cipher Suites will be used. See https://golang.org/pkg/crypto/tls/#pkg-constants. |
+| tlsMinVersion | string | `""` | TLS min version from: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13. |
+| trafficEncapMode | string | `"encap"` | Determines how traffic is encapsulated. It must be one of "encap", "noEncap", "hybrid", or "networkPolicyOnly". |
+| trafficEncryptionMode | string | `"none"` | Determines how tunnel traffic is encrypted. Currently encryption only works with encap mode.It must be one of "none", "ipsec", "wireGuard". |
+| transportInterface | string | `""` | Name of the interface on Node which is used for tunneling or routing the traffic across Nodes. |
+| transportInterfaceCIDRs | list | `[]` | Network CIDRs of the interface on Node which is used for tunneling or routing the traffic across Nodes. |
+| tunnelType | string | `"geneve"` | Tunnel protocol used for encapsulating traffic across Nodes. It must be one of "geneve", "vxlan", "gre", "stt". |
+| webhooks.labelsMutator.enable | bool | `false` | |
+| whereabouts.enable | bool | `false` | |
+| wireGuard.port | int | `51820` | Port for WireGuard to send and receive traffic. |
+
+----------------------------------------------
+Autogenerated from chart metadata using [helm-docs v1.7.0](https://github.com/norwoodj/helm-docs/releases/v1.7.0)
diff --git a/build/yamls/base/conf/antrea-agent.conf b/build/charts/antrea/conf/antrea-agent.conf
similarity index 71%
rename from build/yamls/base/conf/antrea-agent.conf
rename to build/charts/antrea/conf/antrea-agent.conf
index 912cd971bf9..d60c167177e 100644
--- a/build/yamls/base/conf/antrea-agent.conf
+++ b/build/charts/antrea/conf/antrea-agent.conf
@@ -3,64 +3,67 @@ featureGates:
# Enable AntreaProxy which provides ServiceLB for in-cluster Services in antrea-agent.
# It should be enabled on Windows, otherwise NetworkPolicy will not take effect on
# Service traffic.
-# AntreaProxy: true
+{{- include "featureGate" (dict "featureGates" .Values.featureGates "name" "AntreaProxy" "default" true) }}
# Enable EndpointSlice support in AntreaProxy. Don't enable this feature unless that EndpointSlice
# API version v1beta1 is supported and set as enabled in Kubernetes. If AntreaProxy is not enabled,
# this flag will not take effect.
-# EndpointSlice: false
+{{- include "featureGate" (dict "featureGates" .Values.featureGates "name" "EndpointSlice" "default" false) }}
# Enable traceflow which provides packet tracing feature to diagnose network issue.
-# Traceflow: true
+{{- include "featureGate" (dict "featureGates" .Values.featureGates "name" "Traceflow" "default" true) }}
# Enable NodePortLocal feature to make the Pods reachable externally through NodePort
-# NodePortLocal: true
+{{- include "featureGate" (dict "featureGates" .Values.featureGates "name" "NodePortLocal" "default" true) }}
# Enable Antrea ClusterNetworkPolicy feature to complement K8s NetworkPolicy for cluster admins
# to define security policies which apply to the entire cluster, and Antrea NetworkPolicy
# feature that supports priorities, rule actions and externalEntities in the future.
-# AntreaPolicy: true
+{{- include "featureGate" (dict "featureGates" .Values.featureGates "name" "AntreaPolicy" "default" true) }}
# Enable flowexporter which exports polled conntrack connections as IPFIX flow records from each
# agent to a configured collector.
-# FlowExporter: false
+{{- include "featureGate" (dict "featureGates" .Values.featureGates "name" "FlowExporter" "default" false) }}
# Enable collecting and exposing NetworkPolicy statistics.
-# NetworkPolicyStats: true
+{{- include "featureGate" (dict "featureGates" .Values.featureGates "name" "NetworkPolicyStats" "default" true) }}
# Enable controlling SNAT IPs of Pod egress traffic.
-# Egress: true
+{{- include "featureGate" (dict "featureGates" .Values.featureGates "name" "Egress" "default" true) }}
# Enable AntreaIPAM, which can allocate IP addresses from IPPools. AntreaIPAM is required by the
-# bridging mode and allocates IPs to Pods in bridging mode.
-# AntreaIPAM: false
+# bridging mode and allocates IPs to Pods in bridging mode. It is also required to use Antrea for
+# IPAM when configuring secondary network interfaces with Multus.
+{{- include "featureGate" (dict "featureGates" .Values.featureGates "name" "AntreaIPAM" "default" false) }}
# Enable multicast traffic. This feature is supported only with noEncap mode.
-# Multicast: false
+{{- include "featureGate" (dict "featureGates" .Values.featureGates "name" "Multicast" "default" false) }}
# Enable support for provisioning secondary network interfaces for Pods (using
# Pod annotations). At the moment, Antrea can only create secondary network
# interfaces using SR-IOV VFs on baremetal Nodes.
-# SecondaryNetwork: false
+{{- include "featureGate" (dict "featureGates" .Values.featureGates "name" "SecondaryNetwork" "default" false) }}
# Enable managing external IPs of Services of LoadBalancer type.
-# ServiceExternalIP: false
+{{- include "featureGate" (dict "featureGates" .Values.featureGates "name" "ServiceExternalIP" "default" false) }}
+
+# Enable mirroring or redirecting the traffic Pods send or receive.
+{{- include "featureGate" (dict "featureGates" .Values.featureGates "name" "TrafficControl" "default" false) }}
# Name of the OpenVSwitch bridge antrea-agent will create and use.
# Make sure it doesn't conflict with your existing OpenVSwitch bridges.
-#ovsBridge: br-int
+ovsBridge: {{ .Values.ovs.bridgeName | quote }}
# Datapath type to use for the OpenVSwitch bridge created by Antrea. Supported values are:
# - system
# - netdev
# 'system' is the default value and corresponds to the kernel datapath. Use 'netdev' to run
-# OVS in userspace mode (not fully supported yet). Userspace mode requires the tun device driver to
-# be available.
+# OVS in userspace mode. Userspace mode requires the tun device driver to be available.
#ovsDatapathType: system
# Name of the interface antrea-agent will create and use for host <--> pod communication.
# Make sure it doesn't conflict with your existing interfaces.
-#hostGateway: antrea-gw0
+hostGateway: {{ .Values.hostGateway | quote }}
# Determines how traffic is encapsulated. It has the following options:
# encap(default): Inter-node Pod traffic is always encapsulated and Pod to external network
@@ -72,14 +75,14 @@ featureGates:
# networkPolicyOnly: Antrea enforces NetworkPolicy only, and utilizes CNI chaining and delegates Pod
# IPAM and connectivity to the primary CNI.
#
-#trafficEncapMode: encap
+trafficEncapMode: {{ .Values.trafficEncapMode | quote }}
# Whether or not to SNAT (using the Node IP) the egress traffic from a Pod to the external network.
# This option is for the noEncap traffic mode only, and the default value is false. In the noEncap
# mode, if the cluster's Pod CIDR is reachable from the external network, then the Pod traffic to
# the external network needs not be SNAT'd. In the networkPolicyOnly mode, antrea-agent never
# performs SNAT and this option will be ignored; for other modes it must be set to false.
-#noSNAT: false
+noSNAT: {{ .Values.noSNAT }}
# Tunnel protocols used for encapsulating traffic across Nodes. If WireGuard is enabled in trafficEncryptionMode,
# this option will not take effect. Supported values:
@@ -88,7 +91,7 @@ featureGates:
# - gre
# - stt
# Note that "gre" is not supported for IPv6 clusters (IPv6-only or dual-stack clusters).
-#tunnelType: geneve
+tunnelType: {{ .Values.tunnelType | quote }}
# Determines how tunnel traffic is encrypted. Currently encryption only works with encap mode.
# It has the following options:
@@ -98,49 +101,61 @@ featureGates:
# the PSK value must be passed to Antrea Agent through an environment
# variable: ANTREA_IPSEC_PSK.
# - wireGuard: Enable WireGuard for tunnel traffic encryption.
-#trafficEncryptionMode: none
+trafficEncryptionMode: {{ .Values.trafficEncryptionMode | quote }}
# Enable bridging mode of Pod network on Nodes, in which the Node's transport interface is connected
-# to the OVS bridge, and cross-Node/VLAN traffic from AntreaIPAM Pods (Pods whose IP addresses are
-# allocated by AntreaIPAM from IPPools) is sent to the underlay network via the uplink, and
-# forwarded/routed by the underlay network.
+# to the OVS bridge, and cross-Node/VLAN traffic of AntreaIPAM Pods (Pods whose IP addresses are
+# allocated by AntreaIPAM from IPPools) is sent to the underlay network, and forwarded/routed by the
+# underlay network.
# This option requires the `AntreaIPAM` feature gate to be enabled. At this moment, it supports only
# IPv4 and Linux Nodes, and can be enabled only when `ovsDatapathType` is `system`,
# `trafficEncapMode` is `noEncap`, and `noSNAT` is true.
-#enableBridgingMode: false
+enableBridgingMode: {{ .Values.enableBridgingMode }}
+
+# Disable TX checksum offloading for container network interfaces. It's supposed to be set to true when the
+# datapath doesn't support TX checksum offloading, which causes packets to be dropped due to bad checksum.
+# It affects Pods running on Linux Nodes only.
+disableTXChecksumOffload: {{ .Values.disableTXChecksumOffload }}
# Default MTU to use for the host gateway interface and the network interface of each Pod.
# If omitted, antrea-agent will discover the MTU of the Node's primary interface and
# also adjust MTU to accommodate for tunnel encapsulation overhead (if applicable).
-#defaultMTU: 0
+defaultMTU: {{ .Values.defaultMTU }}
# wireGuard specifies WireGuard related configurations.
wireGuard:
-# The port for WireGuard to receive traffic.
-# port: 51820
+{{- with .Values.wireGuard }}
+ # The port for WireGuard to receive traffic.
+ port: {{ .port }}
+{{- end }}
egress:
-# exceptCIDRs is the CIDR ranges to which outbound Pod traffic will not be SNAT'd by Egresses.
-# exceptCIDRs: []
+{{- with .Values.egress }}
+ # exceptCIDRs is the CIDR ranges to which outbound Pod traffic will not be SNAT'd by Egresses.
+ exceptCIDRs:
+ {{- with .exceptCIDRs }}
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+{{- end }}
# ClusterIP CIDR range for Services. It's required when AntreaProxy is not enabled, and should be
# set to the same value as the one specified by --service-cluster-ip-range for kube-apiserver. When
# AntreaProxy is enabled, this parameter is not needed and will be ignored if provided.
-#serviceCIDR: 10.96.0.0/12
+serviceCIDR: {{ .Values.serviceCIDR | quote }}
# ClusterIP CIDR range for IPv6 Services. It's required when using kube-proxy to provide IPv6 Service in a Dual-Stack
# cluster or an IPv6 only cluster. The value should be the same as the configuration for kube-apiserver specified by
# --service-cluster-ip-range. When AntreaProxy is enabled, this parameter is not needed.
# No default value for this field.
-#serviceCIDRv6:
+serviceCIDRv6: {{ .Values.serviceCIDRv6 | quote }}
# The port for the antrea-agent APIServer to serve on.
# Note that if it's set to another value, the `containerPort` of the `api` port of the
# `antrea-agent` container must be set to the same value.
-#apiPort: 10350
+apiPort: {{ .Values.agent.apiPort }}
# Enable metrics exposure via Prometheus. Initializes Prometheus metrics listener.
-#enablePrometheusMetrics: true
+enablePrometheusMetrics: {{ .Values.agent.enablePrometheusMetrics }}
# Provide the IPFIX collector address as a string with format :[][:].
# HOST can either be the DNS name or the IP of the Flow Collector. For example,
@@ -151,50 +166,52 @@ egress:
# If no PROTO is given, we consider "tls" as default. We support "tls", "tcp" and
# "udp" protocols. "tls" is used for securing communication between flow exporter and
# flow aggregator.
-#flowCollectorAddr: "flow-aggregator.flow-aggregator.svc:4739:tls"
+flowCollectorAddr: {{ .Values.flowCollector.collectorAddr | quote }}
# Provide flow poll interval as a duration string. This determines how often the
# flow exporter dumps connections from the conntrack module. Flow poll interval
# should be greater than or equal to 1s (one second).
# Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
-#flowPollInterval: "5s"
+flowPollInterval: {{ .Values.flowCollector.flowPollInterval | quote }}
# Provide the active flow export timeout, which is the timeout after which a flow
# record is sent to the collector for active flows. Thus, for flows with a continuous
# stream of packets, a flow record will be exported to the collector once the elapsed
# time since the last export event is equal to the value of this timeout.
# Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
-#activeFlowExportTimeout: "30s"
+activeFlowExportTimeout: {{ .Values.flowCollector.activeFlowExportTimeout | quote }}
# Provide the idle flow export timeout, which is the timeout after which a flow
# record is sent to the collector for idle flows. A flow is considered idle if no
# packet matching this flow has been observed since the last export event.
# Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
-#idleFlowExportTimeout: "15s"
+idleFlowExportTimeout: {{ .Values.flowCollector.idleFlowExportTimeout | quote }}
nodePortLocal:
+{{- with .Values.nodePortLocal }}
# Enable NodePortLocal, a feature used to make Pods reachable using port forwarding on the host. To
# enable this feature, you need to set "enable" to true, and ensure that the NodePortLocal feature
# gate is also enabled (which is the default).
-# enable: false
+ enable: {{ .enable }}
# Provide the port range used by NodePortLocal. When the NodePortLocal feature is enabled, a port
# from that range will be assigned whenever a Pod's container defines a specific port to be exposed
# (each container can define a list of ports as pod.spec.containers[].ports), and all Node traffic
# directed to that port will be forwarded to the Pod.
-# portRange: 61000-62000
+ portRange: {{ .portRange | quote }}
+{{- end }}
# Provide the address of Kubernetes apiserver, to override any value provided in kubeconfig or InClusterConfig.
# Defaults to "". It must be a host string, a host:port pair, or a URL to the base of the apiserver.
-#kubeAPIServerOverride: ""
+kubeAPIServerOverride: {{ .Values.kubeAPIServerOverride | quote }}
# Comma-separated list of Cipher Suites. If omitted, the default Go Cipher Suites will be used.
# https://golang.org/pkg/crypto/tls/#pkg-constants
# Note that TLS1.3 Cipher Suites cannot be added to the list. But the apiserver will always
# prefer TLS1.3 Cipher Suites whenever possible.
-#tlsCipherSuites:
+tlsCipherSuites: {{ .Values.tlsCipherSuites | quote }}
# TLS min version from: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13.
-#tlsMinVersion:
+tlsMinVersion: {{ .Values.tlsMinVersion | quote }}
# The name of the interface on Node which is used for tunneling or routing the traffic across Nodes.
# If there are multiple IP addresses configured on the interface, the first one is used. The IP
@@ -203,11 +220,21 @@ nodePortLocal:
# 1. transportInterface
# 2. transportInterfaceCIDRs
# 3. The Node IP
-#transportInterface:
+transportInterface: {{ .Values.transportInterface | quote }}
+multicast:
+{{- with .Values.multicast }}
# The names of the interfaces on Nodes that are used to forward multicast traffic.
# Defaults to transport interface if not set.
-#multicastInterfaces: []
+ multicastInterfaces:
+ {{- with .multicastInterfaces }}
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+
+# The interval at which the antrea-agent sends IGMP queries to Pods.
+# Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
+ igmpQueryInterval: {{ .igmpQueryInterval | quote }}
+{{- end}}
# The network CIDRs of the interface on Node which is used for tunneling or routing the traffic across
# Nodes. If there are multiple interfaces configured the same network CIDR, the first one is used. The
@@ -216,28 +243,39 @@ nodePortLocal:
# 1. transportInterface
# 2. transportInterfaceCIDRs
# 3. The Node IP
-#transportInterfaceCIDRs: [,]
+transportInterfaceCIDRs:
+{{- with .Values.transportInterfaceCIDRs }}
+{{- toYaml . | nindent 2 }}
+{{- end }}
# Option antreaProxy contains AntreaProxy related configuration options.
antreaProxy:
+{{- with .Values.antreaProxy }}
# ProxyAll tells antrea-agent to proxy all Service traffic, including NodePort, LoadBalancer, and ClusterIP traffic,
# regardless of where they come from. Therefore, running kube-proxy is no longer required. This requires the AntreaProxy
# feature to be enabled.
# Note that this option is experimental. If kube-proxy is removed, option kubeAPIServerOverride must be used to access
# apiserver directly.
- #proxyAll: false
+ proxyAll: {{ .proxyAll }}
# A string array of values which specifies the host IPv4/IPv6 addresses for NodePort. Values can be valid IP blocks.
# (e.g. 1.2.3.0/24, 1.2.3.4/32). An empty string slice is meant to select all host IPv4/IPv6 addresses.
# Note that the option is only valid when proxyAll is true.
- #nodePortAddresses: []
+ nodePortAddresses:
+ {{- with .nodePortAddresses }}
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
# An array of string values to specify a list of Services which should be ignored by AntreaProxy (traffic to these
# Services will not be load-balanced). Values can be a valid ClusterIP (e.g. 10.11.1.2) or a Service name
# with Namespace (e.g. kube-system/kube-dns)
- #skipServices: []
+ skipServices:
+ {{- with .skipServices }}
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
# When ProxyLoadBalancerIPs is set to false, AntreaProxy no longer load-balances traffic destined to the
# External IPs of LoadBalancer Services. This is useful when the external LoadBalancer provides additional
# capabilities (e.g. TLS termination) and it is desirable for Pod-to-ExternalIP traffic to be sent to the
# external LoadBalancer instead of being load-balanced to an Endpoint directly by AntreaProxy.
# Note that setting ProxyLoadBalancerIPs to false usually only makes sense when ProxyAll is set to true and
# kube-proxy is removed from the cluser, otherwise kube-proxy will still load-balance this traffic.
- #proxyLoadBalancerIPs: true
+ proxyLoadBalancerIPs: {{ .proxyLoadBalancerIPs }}
+{{- end }}
diff --git a/build/yamls/base/conf/antrea-cni.conflist b/build/charts/antrea/conf/antrea-cni.conflist
similarity index 68%
rename from build/yamls/base/conf/antrea-cni.conflist
rename to build/charts/antrea/conf/antrea-cni.conflist
index 14d84678be0..9047fc33409 100644
--- a/build/yamls/base/conf/antrea-cni.conflist
+++ b/build/charts/antrea/conf/antrea-cni.conflist
@@ -7,14 +7,20 @@
"ipam": {
"type": "host-local"
}
- },
+ }
+ {{- if .Values.cni.plugins.portmap }}
+ ,
{
"type": "portmap",
"capabilities": {"portMappings": true}
- },
+ }
+ {{- end }}
+ {{- if .Values.cni.plugins.bandwidth }}
+ ,
{
"type": "bandwidth",
"capabilities": {"bandwidth": true}
}
+ {{- end }}
]
}
diff --git a/build/charts/antrea/conf/antrea-controller.conf b/build/charts/antrea/conf/antrea-controller.conf
new file mode 100644
index 00000000000..f54bf5ce864
--- /dev/null
+++ b/build/charts/antrea/conf/antrea-controller.conf
@@ -0,0 +1,73 @@
+# FeatureGates is a map of feature names to bools that enable or disable experimental features.
+featureGates:
+# Enable traceflow which provides packet tracing feature to diagnose network issue.
+{{- include "featureGate" (dict "featureGates" .Values.featureGates "name" "Traceflow" "default" true) }}
+
+# Enable Antrea ClusterNetworkPolicy feature to complement K8s NetworkPolicy for cluster admins
+# to define security policies which apply to the entire cluster, and Antrea NetworkPolicy
+# feature that supports priorities, rule actions and externalEntities in the future.
+{{- include "featureGate" (dict "featureGates" .Values.featureGates "name" "AntreaPolicy" "default" true) }}
+
+# Enable collecting and exposing NetworkPolicy statistics.
+{{- include "featureGate" (dict "featureGates" .Values.featureGates "name" "NetworkPolicyStats" "default" true) }}
+
+# Enable controlling SNAT IPs of Pod egress traffic.
+{{- include "featureGate" (dict "featureGates" .Values.featureGates "name" "Egress" "default" true) }}
+
+# Run Kubernetes NodeIPAMController with Antrea.
+{{- include "featureGate" (dict "featureGates" .Values.featureGates "name" "NodeIPAM" "default" false) }}
+
+# Enable AntreaIPAM, which can allocate IP addresses from IPPools. AntreaIPAM is required by the
+# bridging mode and allocates IPs to Pods in bridging mode. It is also required to use Antrea for
+# IPAM when configuring secondary network interfaces with Multus.
+{{- include "featureGate" (dict "featureGates" .Values.featureGates "name" "AntreaIPAM" "default" false) }}
+
+# Enable managing external IPs of Services of LoadBalancer type.
+{{- include "featureGate" (dict "featureGates" .Values.featureGates "name" "ServiceExternalIP" "default" false) }}
+
+# The port for the antrea-controller APIServer to serve on.
+# Note that if it's set to another value, the `containerPort` of the `api` port of the
+# `antrea-controller` container must be set to the same value.
+apiPort: {{ .Values.controller.apiPort }}
+
+# Enable metrics exposure via Prometheus. Initializes Prometheus metrics listener.
+enablePrometheusMetrics: {{ .Values.controller.enablePrometheusMetrics }}
+
+# Indicates whether to use auto-generated self-signed TLS certificate.
+# If false, a Secret named "antrea-controller-tls" must be provided with the following keys:
+# ca.crt:
+# tls.crt:
+# tls.key:
+selfSignedCert: {{ .Values.controller.selfSignedCert }}
+
+# Comma-separated list of Cipher Suites. If omitted, the default Go Cipher Suites will be used.
+# https://golang.org/pkg/crypto/tls/#pkg-constants
+# Note that TLS1.3 Cipher Suites cannot be added to the list. But the apiserver will always
+# prefer TLS1.3 Cipher Suites whenever possible.
+tlsCipherSuites: {{ .Values.tlsCipherSuites | quote }}
+
+# TLS min version from: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13.
+tlsMinVersion: {{ .Values.tlsMinVersion | quote }}
+
+nodeIPAM:
+{{- with .Values.nodeIPAM }}
+ # Enable the integrated Node IPAM controller within the Antrea controller.
+ enableNodeIPAM: {{ .enable }}
+ # CIDR ranges for Pods in cluster. String array containing single CIDR range, or multiple ranges.
+ # The CIDRs could be either IPv4 or IPv6. At most one CIDR may be specified for each IP family.
+ # Value ignored when enableNodeIPAM is false.
+ clusterCIDRs:
+ {{- with .clusterCIDRs }}
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
+ # CIDR ranges for Services in cluster. It is not necessary to specify it when there is no overlap with clusterCIDRs.
+ # Value ignored when enableNodeIPAM is false.
+ serviceCIDR: {{ .serviceCIDR | quote }}
+ serviceCIDRv6: {{ .serviceCIDRv6 | quote }}
+ # Mask size for IPv4 Node CIDR in IPv4 or dual-stack cluster. Value ignored when enableNodeIPAM is false
+ # or when IPv4 Pod CIDR is not configured. Valid range is 16 to 30.
+ nodeCIDRMaskSizeIPv4: {{ .nodeCIDRMaskSizeIPv4 }}
+ # Mask size for IPv6 Node CIDR in IPv6 or dual-stack cluster. Value ignored when enableNodeIPAM is false
+ # or when IPv6 Pod CIDR is not configured. Valid range is 64 to 126.
+ nodeCIDRMaskSizeIPv6: {{ .nodeCIDRMaskSizeIPv6 }}
+{{- end }}
diff --git a/build/charts/antrea/templates/NOTES.txt b/build/charts/antrea/templates/NOTES.txt
new file mode 100644
index 00000000000..40e0d249333
--- /dev/null
+++ b/build/charts/antrea/templates/NOTES.txt
@@ -0,0 +1 @@
+The Antrea CNI has been successfully installed.
diff --git a/build/charts/antrea/templates/_helpers.tpl b/build/charts/antrea/templates/_helpers.tpl
new file mode 100644
index 00000000000..0319db13d43
--- /dev/null
+++ b/build/charts/antrea/templates/_helpers.tpl
@@ -0,0 +1,9 @@
+{{- define "featureGate" -}}
+{{- $name := .name }}
+{{- $default := .default }}
+{{- if hasKey .featureGates $name }}
+ {{ $name }}: {{ get .featureGates $name }}
+{{- else }}
+ {{ printf "# %s" $name }}: {{ $default }}
+{{- end }}
+{{- end -}}
diff --git a/build/yamls/base/agent-rbac.yml b/build/charts/antrea/templates/agent/clusterrole.yaml
similarity index 87%
rename from build/yamls/base/agent-rbac.yml
rename to build/charts/antrea/templates/agent/clusterrole.yaml
index a75b5fc7b5d..10e847a669b 100644
--- a/build/yamls/base/agent-rbac.yml
+++ b/build/charts/antrea/templates/agent/clusterrole.yaml
@@ -1,14 +1,9 @@
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- name: antrea-agent
- namespace: kube-system
----
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: antrea-agent
+ labels:
+ app: antrea
rules:
- apiGroups:
- ""
@@ -47,13 +42,7 @@ rules:
verbs:
- get
- watch
- - list
- - apiGroups:
- - ""
- resources:
- - services/status
- verbs:
- - update
+ - list
- apiGroups:
- discovery.k8s.io
resources:
@@ -172,6 +161,7 @@ rules:
resources:
- externalippools
- ippools
+ - trafficcontrols
verbs:
- get
- watch
@@ -190,16 +180,3 @@ rules:
- get
- list
- watch
----
-kind: ClusterRoleBinding
-apiVersion: rbac.authorization.k8s.io/v1
-metadata:
- name: antrea-agent
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: antrea-agent
-subjects:
- - kind: ServiceAccount
- name: antrea-agent
- namespace: kube-system
diff --git a/build/charts/antrea/templates/agent/clusterrolebinding.yaml b/build/charts/antrea/templates/agent/clusterrolebinding.yaml
new file mode 100644
index 00000000000..191035981fb
--- /dev/null
+++ b/build/charts/antrea/templates/agent/clusterrolebinding.yaml
@@ -0,0 +1,14 @@
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antrea-agent
+ labels:
+ app: antrea
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: antrea-agent
+subjects:
+ - kind: ServiceAccount
+ name: antrea-agent
+ namespace: {{ .Release.Namespace }}
diff --git a/build/yamls/base/agent.yml b/build/charts/antrea/templates/agent/daemonset.yaml
similarity index 52%
rename from build/yamls/base/agent.yml
rename to build/charts/antrea/templates/agent/daemonset.yaml
index 8bc007231d3..3d24e44b45f 100644
--- a/build/yamls/base/agent.yml
+++ b/build/charts/antrea/templates/agent/daemonset.yaml
@@ -1,48 +1,79 @@
----
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: antrea-agent
+ namespace: {{ .Release.Namespace }}
labels:
+ app: antrea
component: antrea-agent
spec:
selector:
matchLabels:
+ app: antrea
component: antrea-agent
- updateStrategy:
- type: RollingUpdate
+ {{- with .Values.agent.updateStrategy }}
+ updateStrategy: {{- toYaml . | nindent 4 }}
+ {{- end }}
template:
metadata:
annotations:
# Starting with v1.21, Kubernetes supports default container annotation.
# Using "kubectl logs/exec/attach/cp" doesn't have to specify "-c antrea-agent" when troubleshooting.
kubectl.kubernetes.io/default-container: antrea-agent
+ # Automatically restart Pods with a RollingUpdate if the ConfigMap changes
+ # See https://helm.sh/docs/howto/charts_tips_and_tricks/#automatically-roll-deployments
+ checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
+ {{- if eq .Values.trafficEncryptionMode "ipsec" }}
+ checksum/ipsec-secret: {{ include (print $.Template.BasePath "/agent/ipsec-secret.yaml") . | sha256sum }}
+ {{- end }}
+ {{- with .Values.agent.podAnnotations }}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
labels:
+ app: antrea
component: antrea-agent
+ {{- with .Values.agent.podLabels }}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
spec:
hostNetwork: true
- dnsPolicy: ClusterFirstWithHostNet
- priorityClassName: system-node-critical
- tolerations:
- # Mark it as a critical add-on.
- - key: CriticalAddonsOnly
- operator: Exists
- # Make sure it gets scheduled on all nodes.
- - effect: NoSchedule
- operator: Exists
- # Make sure it doesn't get evicted.
- - effect: NoExecute
- operator: Exists
+ dnsPolicy: {{ .Values.agent.dnsPolicy }}
+ priorityClassName: {{ .Values.agent.priorityClassName }}
+ {{- with .Values.agent.nodeSelector }}
nodeSelector:
- kubernetes.io/os: linux
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ {{- with .Values.agent.tolerations }}
+ tolerations:
+ {{- toYaml . | trim | nindent 8 }}
+ {{- end }}
+ {{- if .Values.testing.simulator.enable }}
+ affinity:
+ nodeAffinity:
+ requiredDuringSchedulingIgnoredDuringExecution:
+ nodeSelectorTerms:
+ - matchExpressions:
+ - key: antrea/instance
+ operator: NotIn
+ values:
+ - simulator
+ {{- else }}
+ {{- with .Values.agent.affinity }}
+ affinity:
+ {{- toYaml . | trim | nindent 8 }}
+ {{- end }}
+ {{- end }}
serviceAccountName: antrea-agent
initContainers:
- name: install-cni
- image: antrea
- resources:
- requests:
- cpu: "100m"
+ image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
+ imagePullPolicy: {{ .Values.image.pullPolicy }}
+ resources: {{- .Values.agent.installCNI.resources | toYaml | nindent 12 }}
+ {{- if eq .Values.trafficEncapMode "networkPolicyOnly" }}
+ command: ["install_cni_chaining"]
+ {{- else }}
command: ["install_cni"]
+ {{- end }}
securityContext:
capabilities:
add:
@@ -52,7 +83,7 @@ spec:
# SKIP_CNI_BINARIES takes in values as a comma separated list of
# binaries that need to be skipped for installation, e.g. "portmap, bandwidth".
- name: SKIP_CNI_BINARIES
- value: ""
+ value: {{ join "," .Values.cni.skipBinaries | quote }}
volumeMounts:
- name: antrea-config
mountPath: /etc/antrea/antrea-cni.conflist
@@ -69,15 +100,43 @@ spec:
# For changing the default permissions of the run directory.
- name: host-var-run-antrea
mountPath: /var/run/antrea
- containers:
- - name: antrea-agent
- image: antrea
+ {{- if .Values.whereabouts.enable }}
+ - name: install-whereabouts-config
+ image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
resources:
requests:
- cpu: "200m"
+ cpu: "100m"
+ command: ["install_whereabouts_config"]
+ volumeMounts:
+ - name: whereabouts-cni-conf
+ mountPath: /host/etc/cni/net.d/whereabouts.d
+ - name: whereabouts-secret
+ mountPath: /var/run/secrets/whereabouts
+ {{- end }}
+ containers:
+ - name: antrea-agent
+ image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
+ imagePullPolicy: {{ .Values.image.pullPolicy }}
+ {{- if ((.Values.testing).coverage) }}
+ command: ["/bin/sh"]
+ args: ["-c", "sleep 2; antrea-agent-coverage -test.run=TestBincoverRunMain -test.coverprofile=antrea-agent.cov.out -args-file=/agent-arg-file; while true; do sleep 5 & wait $!; done"]
+ {{- else}}
command: ["antrea-agent"]
- # Log to both "/var/log/antrea/" and stderr (so "kubectl logs" can work).
- args: ["--config", "/etc/antrea/antrea-agent.conf", "--logtostderr=false", "--log_dir=/var/log/antrea", "--alsologtostderr", "--log_file_max_size=100", "--log_file_max_num=4", "--v=0"]
+ # Log to both "/var/log/antrea/" and stderr (so "kubectl logs" can work).-
+ args:
+ - "--config=/etc/antrea/antrea-agent.conf"
+ - "--logtostderr=false"
+ - "--log_dir=/var/log/antrea"
+ - "--alsologtostderr"
+ - "--log_file_max_size={{ .Values.agent.antreaAgent.logFileMaxSize }}"
+ - "--log_file_max_num={{ .Values.agent.antreaAgent.logFileMaxNum }}"
+ {{- if .Values.logVerbosity }}
+ - "--v={{ .Values.logVerbosity }}"
+ {{- end }}
+ {{- with .Values.agent.antreaAgent.extraArgs }}
+ {{- toYaml . | trim | nindent 12 }}
+ {{- end }}
+ {{- end}}
env:
# Provide pod and node information for clusterinformation CRD.
- name: POD_NAME
@@ -92,6 +151,19 @@ spec:
valueFrom:
fieldRef:
fieldPath: spec.nodeName
+ {{- if eq .Values.trafficEncryptionMode "ipsec" }}
+ # Pre-shared key for IPsec IKE.
+ - name: ANTREA_IPSEC_PSK
+ valueFrom:
+ secretKeyRef:
+ name: antrea-ipsec
+ key: psk
+ {{- end }}
+ {{- range $k, $v := .Values.agent.antreaAgent.extraEnv }}
+ - name: {{ $k | quote }}
+ value: {{ $v | quote }}
+ {{- end }}
+ resources: {{- .Values.agent.antreaAgent.resources | toYaml | nindent 12 }}
ports:
- containerPort: 10350
name: api
@@ -155,13 +227,29 @@ spec:
mountPropagation: HostToContainer
- name: xtables-lock
mountPath: /run/xtables.lock
+ {{- if .Values.whereabouts.enable }}
+ - name: whereabouts-cni-conf
+ mountPath: /host/etc/cni/net.d/whereabouts.d
+ - name: whereabouts-secret
+ mountPath: /var/run/secrets/whereabouts
+ {{- end }}
+ {{- with .Values.agent.antreaAgent.extraVolumeMounts }}
+ {{- toYaml . | trim | nindent 10 }}
+ {{- end }}
- name: antrea-ovs
- image: antrea
- resources:
- requests:
- cpu: "200m"
+ image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
+ imagePullPolicy: {{ .Values.image.pullPolicy }}
+ resources: {{- .Values.agent.antreaOVS.resources | toYaml | nindent 12 }}
command: ["start_ovs"]
- args: ["--log_file_max_size=100", "--log_file_max_num=4"]
+ args:
+ - "--log_file_max_size={{ .Values.agent.antreaOVS.logFileMaxSize }}"
+ - "--log_file_max_num={{ .Values.agent.antreaOVS.logFileMaxNum }}"
+ {{- if .Values.ovs.hwOffload }}
+ - "--hw-offload"
+ {{- end }}
+ {{- with .Values.agent.antreaOVS.extraArgs }}
+ {{- toYaml . | trim | nindent 12 }}
+ {{- end }}
securityContext:
# capabilities required by OVS daemons
capabilities:
@@ -189,6 +277,35 @@ spec:
- name: host-var-log-antrea
mountPath: /var/log/openvswitch
subPath: openvswitch
+ {{- if eq .Values.trafficEncryptionMode "ipsec" }}
+ - name: antrea-ipsec
+ image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
+ imagePullPolicy: {{ .Values.image.pullPolicy }}
+ resources: {{- .Values.agent.antreaIPsec.resources | toYaml | nindent 12 }}
+ command: ["start_ovs_ipsec"]
+ livenessProbe:
+ exec:
+ command:
+ - /bin/sh
+ - -c
+ - timeout 5 container_liveness_probe ovs-ipsec
+ initialDelaySeconds: 5
+ periodSeconds: 5
+ securityContext:
+ capabilities:
+ add:
+ - NET_ADMIN
+ volumeMounts:
+ - name: host-var-run-antrea
+ mountPath: /var/run/openvswitch
+ subPath: openvswitch
+ - name: host-var-log-antrea
+ mountPath: /var/log/openvswitch
+ subPath: openvswitch
+ - name: host-var-log-antrea
+ mountPath: /var/log/strongswan
+ subPath: strongswan
+ {{- end }}
volumes:
- name: antrea-config
configMap:
@@ -198,7 +315,7 @@ spec:
path: /etc/cni/net.d
- name: host-cni-bin
hostPath:
- path: /opt/cni/bin
+ path: {{ .Values.cni.hostBinPath }}
- name: host-proc
hostPath:
path: /proc
@@ -223,3 +340,14 @@ spec:
hostPath:
path: /run/xtables.lock
type: FileOrCreate
+ {{- with .Values.agent.extraVolumes }}
+ {{- toYaml . | trim | nindent 8 }}
+ {{- end }}
+ {{- if .Values.whereabouts.enable }}
+ - hostPath:
+ path: /host/etc/cni/net.d/whereabouts.d
+ name: whereabouts-cni-conf
+ - name: whereabouts-secret
+ secret:
+ secretName: whereabouts-cni-secret
+ {{- end }}
diff --git a/build/charts/antrea/templates/agent/ipsec-secret.yaml b/build/charts/antrea/templates/agent/ipsec-secret.yaml
new file mode 100644
index 00000000000..a49848233aa
--- /dev/null
+++ b/build/charts/antrea/templates/agent/ipsec-secret.yaml
@@ -0,0 +1,13 @@
+{{- if eq .Values.trafficEncryptionMode "ipsec" }}
+apiVersion: v1
+kind: Secret
+metadata:
+ name: antrea-ipsec
+ namespace: {{ .Release.Namespace }}
+ labels:
+ app: antrea
+type: Opaque
+stringData:
+ # Preshared Key used by IKE for authentication with peers.
+ psk: {{ .Values.ipsec.psk | quote }}
+{{- end }}
diff --git a/build/charts/antrea/templates/agent/secret.yaml b/build/charts/antrea/templates/agent/secret.yaml
new file mode 100644
index 00000000000..90053e02734
--- /dev/null
+++ b/build/charts/antrea/templates/agent/secret.yaml
@@ -0,0 +1,8 @@
+apiVersion: v1
+kind: Secret
+metadata:
+ name: antrea-agent-service-account-token
+ namespace: {{ .Release.Namespace }}
+ annotations:
+ kubernetes.io/service-account.name: antrea-agent
+type: kubernetes.io/service-account-token
diff --git a/build/charts/antrea/templates/agent/serviceaccount.yaml b/build/charts/antrea/templates/agent/serviceaccount.yaml
new file mode 100644
index 00000000000..659b91c8c67
--- /dev/null
+++ b/build/charts/antrea/templates/agent/serviceaccount.yaml
@@ -0,0 +1,7 @@
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: antrea-agent
+ namespace: {{ .Release.Namespace }}
+ labels:
+ app: antrea
diff --git a/build/yamls/base/antctl.yml b/build/charts/antrea/templates/antctl/clusterrole.yaml
similarity index 73%
rename from build/yamls/base/antctl.yml
rename to build/charts/antrea/templates/antctl/clusterrole.yaml
index 6a3764ae560..4a6a7420b64 100644
--- a/build/yamls/base/antctl.yml
+++ b/build/charts/antrea/templates/antctl/clusterrole.yaml
@@ -1,14 +1,9 @@
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- name: antctl
- namespace: kube-system
----
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: antctl
+ labels:
+ app: antrea
rules:
- apiGroups:
- controlplane.antrea.io
@@ -58,21 +53,6 @@ rules:
- /ovstracing
- /podinterfaces
- /featuregates
+ - /serviceexternalip
verbs:
- get
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- labels:
- app: antrea
- name: antctl
- namespace: kube-system
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: antctl
-subjects:
- - kind: ServiceAccount
- name: antctl
- namespace: kube-system
diff --git a/build/charts/antrea/templates/antctl/clusterrolebinding.yaml b/build/charts/antrea/templates/antctl/clusterrolebinding.yaml
new file mode 100644
index 00000000000..3f0a9713920
--- /dev/null
+++ b/build/charts/antrea/templates/antctl/clusterrolebinding.yaml
@@ -0,0 +1,14 @@
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ labels:
+ app: antrea
+ name: antctl
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: antctl
+subjects:
+ - kind: ServiceAccount
+ name: antctl
+ namespace: {{ .Release.Namespace }}
diff --git a/build/charts/antrea/templates/antctl/secret.yaml b/build/charts/antrea/templates/antctl/secret.yaml
new file mode 100644
index 00000000000..c964bc87f59
--- /dev/null
+++ b/build/charts/antrea/templates/antctl/secret.yaml
@@ -0,0 +1,8 @@
+apiVersion: v1
+kind: Secret
+metadata:
+ name: antctl-service-account-token
+ namespace: {{ .Release.Namespace }}
+ annotations:
+ kubernetes.io/service-account.name: antctl
+type: kubernetes.io/service-account-token
diff --git a/build/charts/antrea/templates/antctl/serviceaccount.yaml b/build/charts/antrea/templates/antctl/serviceaccount.yaml
new file mode 100644
index 00000000000..64e57a4b318
--- /dev/null
+++ b/build/charts/antrea/templates/antctl/serviceaccount.yaml
@@ -0,0 +1,7 @@
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: antctl
+ namespace: {{ .Release.Namespace }}
+ labels:
+ app: antrea
diff --git a/build/yamls/base/cluster-identity-reader.yml b/build/charts/antrea/templates/cluster-identity-reader/clusterrolebinding.yaml
similarity index 90%
rename from build/yamls/base/cluster-identity-reader.yml
rename to build/charts/antrea/templates/cluster-identity-reader/clusterrolebinding.yaml
index d2d93f54859..6b0db36d256 100644
--- a/build/yamls/base/cluster-identity-reader.yml
+++ b/build/charts/antrea/templates/cluster-identity-reader/clusterrolebinding.yaml
@@ -2,6 +2,8 @@ kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: antrea-cluster-identity-reader
+ labels:
+ app: antrea
rules:
- apiGroups:
- ""
diff --git a/build/charts/antrea/templates/configmap.yaml b/build/charts/antrea/templates/configmap.yaml
new file mode 100644
index 00000000000..4d749dec75d
--- /dev/null
+++ b/build/charts/antrea/templates/configmap.yaml
@@ -0,0 +1,9 @@
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: antrea-config
+ namespace: {{ .Release.Namespace }}
+ labels:
+ app: antrea
+data:
+{{ tpl (.Files.Glob "conf/*").AsConfig . | indent 2 | replace " \n" "\n" }}
diff --git a/build/charts/antrea/templates/controller/apiservices.yaml b/build/charts/antrea/templates/controller/apiservices.yaml
new file mode 100644
index 00000000000..c6b0a531edc
--- /dev/null
+++ b/build/charts/antrea/templates/controller/apiservices.yaml
@@ -0,0 +1,44 @@
+apiVersion: apiregistration.k8s.io/v1
+kind: APIService
+metadata:
+ name: v1beta2.controlplane.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: controlplane.antrea.io
+ groupPriorityMinimum: 100
+ version: v1beta2
+ versionPriority: 100
+ service:
+ name: antrea
+ namespace: {{ .Release.Namespace }}
+---
+apiVersion: apiregistration.k8s.io/v1
+kind: APIService
+metadata:
+ name: v1beta1.system.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: system.antrea.io
+ groupPriorityMinimum: 100
+ version: v1beta1
+ versionPriority: 100
+ service:
+ name: antrea
+ namespace: {{ .Release.Namespace }}
+---
+apiVersion: apiregistration.k8s.io/v1
+kind: APIService
+metadata:
+ name: v1alpha1.stats.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: stats.antrea.io
+ groupPriorityMinimum: 100
+ version: v1alpha1
+ versionPriority: 100
+ service:
+ name: antrea
+ namespace: {{ .Release.Namespace }}
diff --git a/build/yamls/base/controller-rbac.yml b/build/charts/antrea/templates/controller/clusterrole.yaml
similarity index 92%
rename from build/yamls/base/controller-rbac.yml
rename to build/charts/antrea/templates/controller/clusterrole.yaml
index 1952ea3bc6d..2a5f043af35 100644
--- a/build/yamls/base/controller-rbac.yml
+++ b/build/charts/antrea/templates/controller/clusterrole.yaml
@@ -1,14 +1,9 @@
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- name: antrea-controller
- namespace: kube-system
----
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: antrea-controller
+ labels:
+ app: antrea
rules:
- apiGroups:
- ""
@@ -124,6 +119,9 @@ rules:
- mutatingwebhookconfigurations
- validatingwebhookconfigurations
resourceNames:
+ # always give permissions for labelsmutator.antrea.io, even when the
+ # feature is disabled, to avoid errors in antrea-controller when updating
+ # the CA cert.
- labelsmutator.antrea.io
- crdmutator.antrea.io
- crdvalidator.antrea.io
@@ -244,16 +242,3 @@ rules:
- get
- list
- watch
----
-kind: ClusterRoleBinding
-apiVersion: rbac.authorization.k8s.io/v1
-metadata:
- name: antrea-controller
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: antrea-controller
-subjects:
- - kind: ServiceAccount
- name: antrea-controller
- namespace: kube-system
diff --git a/build/charts/antrea/templates/controller/clusterrolebinding.yaml b/build/charts/antrea/templates/controller/clusterrolebinding.yaml
new file mode 100644
index 00000000000..010461d471e
--- /dev/null
+++ b/build/charts/antrea/templates/controller/clusterrolebinding.yaml
@@ -0,0 +1,14 @@
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antrea-controller
+ labels:
+ app: antrea
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: antrea-controller
+subjects:
+ - kind: ServiceAccount
+ name: antrea-controller
+ namespace: {{ .Release.Namespace }}
diff --git a/build/charts/antrea/templates/controller/deployment.yaml b/build/charts/antrea/templates/controller/deployment.yaml
new file mode 100644
index 00000000000..8f00801da97
--- /dev/null
+++ b/build/charts/antrea/templates/controller/deployment.yaml
@@ -0,0 +1,156 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: antrea-controller
+ namespace: {{ .Release.Namespace }}
+ labels:
+ app: antrea
+ component: antrea-controller
+spec:
+ strategy:
+ # Ensure the existing Pod is stopped before the new one is created.
+ type: Recreate
+ selector:
+ matchLabels:
+ app: antrea
+ component: antrea-controller
+ replicas: 1
+ template:
+ metadata:
+ annotations:
+ # Automatically restart Pod if the ConfigMap changes
+ # See https://helm.sh/docs/howto/charts_tips_and_tricks/#automatically-roll-deployments
+ checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}
+ {{- with .Values.controller.podAnnotations }}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ labels:
+ app: antrea
+ component: antrea-controller
+ {{- with .Values.controller.podLabels }}
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ spec:
+ {{- with .Values.controller.nodeSelector }}
+ nodeSelector:
+ {{- toYaml . | nindent 8 }}
+ {{- end }}
+ hostNetwork: true
+ priorityClassName: {{ .Values.controller.priorityClassName }}
+ {{- with .Values.controller.tolerations }}
+ tolerations:
+ {{- toYaml . | trim | nindent 8 }}
+ {{- end }}
+ {{- if .Values.testing.simulator.enable }}
+ affinity:
+ nodeAffinity:
+ requiredDuringSchedulingIgnoredDuringExecution:
+ nodeSelectorTerms:
+ - matchExpressions:
+ - key: antrea/instance
+ operator: NotIn
+ values:
+ - simulator
+ {{- else }}
+ {{- with .Values.controller.affinity }}
+ affinity:
+ {{- toYaml . | trim | nindent 8 }}
+ {{- end }}
+ {{- end }}
+ serviceAccountName: antrea-controller
+ containers:
+ - name: antrea-controller
+ image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
+ imagePullPolicy: {{ .Values.image.pullPolicy }}
+ resources: {{- .Values.controller.antreaController.resources | toYaml | nindent 12 }}
+ {{- if ((.Values.testing).coverage) }}
+ command: ["/bin/sh"]
+ args: ["-c", "antrea-controller-coverage -test.run=TestBincoverRunMain -test.coverprofile=antrea-controller.cov.out -args-file=/controller-arg-file; while true; do sleep 5 & wait $!; done"]
+ {{- else }}
+ command: ["antrea-controller"]
+ # Log to both "/var/log/antrea/" and stderr (so "kubectl logs" can work).
+ args:
+ - "--config=/etc/antrea/antrea-controller.conf"
+ - "--logtostderr=false"
+ - "--log_dir=/var/log/antrea"
+ - "--alsologtostderr"
+ - "--log_file_max_size={{ .Values.controller.antreaController.logFileMaxSize }}"
+ - "--log_file_max_num={{ .Values.controller.antreaController.logFileMaxNum }}"
+ {{- if .Values.logVerbosity }}
+ - "--v={{ .Values.logVerbosity }}"
+ {{- end }}
+ {{- with .Values.controller.antreaController.extraArgs }}
+ {{- toYaml . | trim | nindent 12 }}
+ {{- end }}
+ {{- end }}
+ env:
+ # Provide pod and node information for clusterinformation CRD.
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ # Provide ServiceAccount name for validation webhook.
+ - name: SERVICEACCOUNT_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.serviceAccountName
+ - name: ANTREA_CONFIG_MAP_NAME
+ value: antrea-config
+ {{- range $k, $v := .Values.controller.antreaController.extraEnv }}
+ - name: {{ $k | quote }}
+ value: {{ $v | quote }}
+ {{- end }}
+ ports:
+ - containerPort: 10349
+ name: api
+ protocol: TCP
+ readinessProbe:
+ httpGet:
+ host: localhost
+ path: /readyz
+ port: api
+ scheme: HTTPS
+ initialDelaySeconds: 5
+ timeoutSeconds: 5
+ periodSeconds: 10
+ failureThreshold: 5
+ livenessProbe:
+ httpGet:
+ host: localhost
+ path: /livez
+ port: api
+ scheme: HTTPS
+ timeoutSeconds: 5
+ periodSeconds: 10
+ failureThreshold: 5
+ volumeMounts:
+ - name: antrea-config
+ mountPath: /etc/antrea/antrea-controller.conf
+ subPath: antrea-controller.conf
+ readOnly: true
+ - name: antrea-controller-tls
+ mountPath: /var/run/antrea/antrea-controller-tls
+ - name: host-var-log-antrea
+ mountPath: /var/log/antrea
+ volumes:
+ - name: antrea-config
+ configMap:
+ name: antrea-config
+ # Make it optional as we only read it when selfSignedCert=false.
+ - name: antrea-controller-tls
+ secret:
+ secretName: antrea-controller-tls
+ defaultMode: 0400
+ optional: true
+ - name: host-var-log-antrea
+ hostPath:
+ path: /var/log/antrea
+ type: DirectoryOrCreate
diff --git a/build/charts/antrea/templates/controller/service.yaml b/build/charts/antrea/templates/controller/service.yaml
new file mode 100644
index 00000000000..118f183f488
--- /dev/null
+++ b/build/charts/antrea/templates/controller/service.yaml
@@ -0,0 +1,15 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: antrea
+ namespace: {{ .Release.Namespace }}
+ labels:
+ app: antrea
+spec:
+ ports:
+ - port: 443
+ protocol: TCP
+ targetPort: api
+ selector:
+ app: antrea
+ component: antrea-controller
diff --git a/build/charts/antrea/templates/controller/serviceaccount.yaml b/build/charts/antrea/templates/controller/serviceaccount.yaml
new file mode 100644
index 00000000000..94046c25030
--- /dev/null
+++ b/build/charts/antrea/templates/controller/serviceaccount.yaml
@@ -0,0 +1,7 @@
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: antrea-controller
+ namespace: {{ .Release.Namespace }}
+ labels:
+ app: antrea
diff --git a/build/yamls/base/crds-rbac.yml b/build/charts/antrea/templates/crds-rbac/clusterroles.yaml
similarity index 96%
rename from build/yamls/base/crds-rbac.yml
rename to build/charts/antrea/templates/crds-rbac/clusterroles.yaml
index 3ddc3ac9167..e076228450b 100644
--- a/build/yamls/base/crds-rbac.yml
+++ b/build/charts/antrea/templates/crds-rbac/clusterroles.yaml
@@ -1,9 +1,9 @@
----
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: aggregate-antrea-policies-edit
labels:
+ app: antrea
# Add these permissions to the "admin" and "edit" default roles.
rbac.authorization.k8s.io/aggregate-to-admin: "true"
rbac.authorization.k8s.io/aggregate-to-edit: "true"
@@ -17,6 +17,7 @@ apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: aggregate-antrea-policies-view
labels:
+ app: antrea
# Add these permissions to the "view" default role.
rbac.authorization.k8s.io/aggregate-to-view: "true"
rules:
@@ -29,6 +30,7 @@ kind: ClusterRole
metadata:
name: aggregate-traceflows-edit
labels:
+ app: antrea
# Add these permissions to the "admin" and "edit" default roles.
rbac.authorization.k8s.io/aggregate-to-admin: "true"
rbac.authorization.k8s.io/aggregate-to-edit: "true"
@@ -42,6 +44,7 @@ apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: aggregate-traceflows-view
labels:
+ app: antrea
# Add these permissions to the "view" default role.
rbac.authorization.k8s.io/aggregate-to-view: "true"
rules:
@@ -54,6 +57,7 @@ kind: ClusterRole
metadata:
name: aggregate-antrea-clustergroups-edit
labels:
+ app: antrea
# Add these permissions to the "admin" and "edit" default roles.
rbac.authorization.k8s.io/aggregate-to-admin: "true"
rbac.authorization.k8s.io/aggregate-to-edit: "true"
@@ -67,10 +71,10 @@ apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: aggregate-antrea-clustergroups-view
labels:
+ app: antrea
# Add these permissions to the "view" default role.
rbac.authorization.k8s.io/aggregate-to-view: "true"
rules:
- apiGroups: ["crd.antrea.io"]
resources: ["clustergroups"]
verbs: ["get", "list", "watch"]
----
diff --git a/build/charts/antrea/templates/crds/antreaagentinfo.yaml b/build/charts/antrea/templates/crds/antreaagentinfo.yaml
new file mode 100644
index 00000000000..e81509d2ce1
--- /dev/null
+++ b/build/charts/antrea/templates/crds/antreaagentinfo.yaml
@@ -0,0 +1,52 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: antreaagentinfos.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1beta1
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ additionalPrinterColumns:
+ - description: Health status of this Agent
+ jsonPath: ".agentConditions[?(@.type=='AgentHealthy')].status"
+ name: Healthy
+ type: string
+ - description: Last time the Healthy Condition was updated
+ jsonPath: ".agentConditions[?(@.type=='AgentHealthy')].lastHeartbeatTime"
+ name: Last Heartbeat
+ type: date
+ - description: Version of this Agent
+ jsonPath: ".version"
+ name: Version
+ type: string
+ priority: 1
+ - description: Node on which this Agent is running
+ jsonPath: ".nodeRef.name"
+ name: Node
+ type: string
+ priority: 1
+ - description: Number of local Pods managed by this Agent
+ jsonPath: ".localPodNum"
+ name: Num Pods
+ type: integer
+ priority: 2
+ - description: Subnets used by this Agent for Pod IPAM
+ jsonPath: ".nodeSubnets"
+ name: Subnets
+ type: string
+ priority: 2
+ scope: Cluster
+ names:
+ plural: antreaagentinfos
+ singular: antreaagentinfo
+ kind: AntreaAgentInfo
+ shortNames:
+ - aai
diff --git a/build/charts/antrea/templates/crds/antreacontrollerinfo.yaml b/build/charts/antrea/templates/crds/antreacontrollerinfo.yaml
new file mode 100644
index 00000000000..d3cc473c5f2
--- /dev/null
+++ b/build/charts/antrea/templates/crds/antreacontrollerinfo.yaml
@@ -0,0 +1,52 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: antreacontrollerinfos.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1beta1
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ additionalPrinterColumns:
+ - description: Health status of the Controller
+ jsonPath: ".controllerConditions[?(@.type=='ControllerHealthy')].status"
+ name: Healthy
+ type: string
+ - description: Last time the Healthy Condition was updated
+ jsonPath: ".controllerConditions[?(@.type=='ControllerHealthy')].lastHeartbeatTime"
+ name: Last Heartbeat
+ type: date
+ - description: Version of the Controller
+ jsonPath: ".version"
+ name: Version
+ type: string
+ priority: 1
+ - description: Number of Agents connected to the Controller
+ jsonPath: ".connectedAgentNum"
+ name: Connected Agents
+ type: integer
+ priority: 1
+ - description: Node on which the Controller is running
+ jsonPath: ".nodeRef.name"
+ name: Node
+ type: string
+ priority: 1
+ - description: Number of Network Policies computed by Controller
+ jsonPath: ".networkPolicyControllerInfo.networkPolicyNum"
+ name: Num Network Policies
+ type: integer
+ priority: 2
+ scope: Cluster
+ names:
+ plural: antreacontrollerinfos
+ singular: antreacontrollerinfo
+ kind: AntreaControllerInfo
+ shortNames:
+ - aci
diff --git a/build/charts/antrea/templates/crds/clustergroup.yaml b/build/charts/antrea/templates/crds/clustergroup.yaml
new file mode 100644
index 00000000000..8989b1ce9b0
--- /dev/null
+++ b/build/charts/antrea/templates/crds/clustergroup.yaml
@@ -0,0 +1,263 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: clustergroups.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: false
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ properties:
+ childGroups:
+ type: array
+ items:
+ type: string
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ externalEntitySelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ ipBlocks:
+ type: array
+ items:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ serviceReference:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ status:
+ type: object
+ properties:
+ conditions:
+ type: array
+ items:
+ type: object
+ properties:
+ type:
+ type: string
+ status:
+ type: string
+ lastTransitionTime:
+ type: string
+ - name: v1alpha3
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ properties:
+ childGroups:
+ type: array
+ items:
+ type: string
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ externalEntitySelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ipBlocks:
+ type: array
+ items:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ serviceReference:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ status:
+ type: object
+ properties:
+ conditions:
+ type: array
+ items:
+ type: object
+ properties:
+ type:
+ type: string
+ status:
+ type: string
+ lastTransitionTime:
+ type: string
+ subresources:
+ status: {}
+ conversion:
+ strategy: Webhook
+ webhook:
+ conversionReviewVersions: ["v1", "v1beta1"]
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: "kube-system"
+ path: "/convert/clustergroup"
+ scope: Cluster
+ names:
+ plural: clustergroups
+ singular: clustergroup
+ kind: ClusterGroup
+ shortNames:
+ - cg
diff --git a/build/charts/antrea/templates/crds/clusternetworkpolicy.yaml b/build/charts/antrea/templates/crds/clusternetworkpolicy.yaml
new file mode 100644
index 00000000000..a2a90da43c9
--- /dev/null
+++ b/build/charts/antrea/templates/crds/clusternetworkpolicy.yaml
@@ -0,0 +1,579 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: clusternetworkpolicies.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha1
+ served: true
+ storage: true
+ additionalPrinterColumns:
+ - name: Tier
+ type: string
+ description: The Tier to which this ClusterNetworkPolicy belongs to.
+ jsonPath: .spec.tier
+ - name: Priority
+ type: number
+ format: float
+ description: The Priority of this ClusterNetworkPolicy relative to other policies.
+ jsonPath: .spec.priority
+ - name: Desired Nodes
+ type: number
+ format: int32
+ description: The total number of Nodes that should realize the NetworkPolicy.
+ jsonPath: .status.desiredNodesRealized
+ - name: Current Nodes
+ type: number
+ format: int32
+ description: The number of Nodes that have realized the NetworkPolicy.
+ jsonPath: .status.currentNodesRealized
+ - name: Age
+ type: date
+ jsonPath: .metadata.creationTimestamp
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ # Ensure that Spec.Priority field is set
+ required:
+ - priority
+ type: object
+ properties:
+ tier:
+ type: string
+ priority:
+ type: number
+ format: float
+ # Ensure that Spec.Priority field is between 1 and 10000
+ minimum: 1.0
+ maximum: 10000.0
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that Spec.AppliedTo does not allow IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ group:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ ingress:
+ type: array
+ items:
+ type: object
+ required:
+ - action
+ properties:
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that rule AppliedTo does not allow IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ group:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ # Ensure that Action field allows only ALLOW, DROP, REJECT and PASS values
+ action:
+ type: string
+ enum: ['Allow', 'Drop', 'Reject', 'Pass']
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ endPort:
+ type: integer
+ protocols:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required: [icmp]
+ properties:
+ icmp:
+ type: object
+ properties:
+ icmpType:
+ type: integer
+ minimum: 0
+ maximum: 255
+ icmpCode:
+ type: integer
+ minimum: 0
+ maximum: 255
+ from:
+ type: array
+ items:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaces:
+ type: object
+ properties:
+ match:
+ enum:
+ - Self
+ type: string
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ group:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ name:
+ type: string
+ enableLogging:
+ type: boolean
+ egress:
+ type: array
+ items:
+ type: object
+ required:
+ - action
+ properties:
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that rule AppliedTo does not allow IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ group:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ # Ensure that Action field allows only ALLOW, DROP, REJECT and PASS values
+ action:
+ type: string
+ enum: ['Allow', 'Drop', 'Reject', 'Pass']
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ endPort:
+ type: integer
+ protocols:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required: [icmp]
+ properties:
+ icmp:
+ type: object
+ properties:
+ icmpType:
+ type: integer
+ minimum: 0
+ maximum: 255
+ icmpCode:
+ type: integer
+ minimum: 0
+ maximum: 255
+ to:
+ type: array
+ items:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaces:
+ type: object
+ properties:
+ match:
+ enum:
+ - Self
+ type: string
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ group:
+ type: string
+ fqdn:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ toServices:
+ type: array
+ items:
+ type: object
+ required:
+ - name
+ - namespace
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ name:
+ type: string
+ enableLogging:
+ type: boolean
+ status:
+ type: object
+ properties:
+ phase:
+ type: string
+ observedGeneration:
+ type: integer
+ currentNodesRealized:
+ type: integer
+ desiredNodesRealized:
+ type: integer
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: clusternetworkpolicies
+ singular: clusternetworkpolicy
+ kind: ClusterNetworkPolicy
+ shortNames:
+ - acnp
diff --git a/build/charts/antrea/templates/crds/egress.yaml b/build/charts/antrea/templates/crds/egress.yaml
new file mode 100644
index 00000000000..bcdfea97652
--- /dev/null
+++ b/build/charts/antrea/templates/crds/egress.yaml
@@ -0,0 +1,112 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: egresses.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ type: object
+ required:
+ - appliedTo
+ anyOf:
+ - required:
+ - egressIP
+ - required:
+ - externalIPPool
+ properties:
+ appliedTo:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ egressIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ externalIPPool:
+ type: string
+ status:
+ type: object
+ properties:
+ egressNode:
+ type: string
+ additionalPrinterColumns:
+ - description: Specifies the SNAT IP address for the selected workloads.
+ jsonPath: .spec.egressIP
+ name: EgressIP
+ type: string
+ - jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ - description: The Owner Node of egress IP
+ jsonPath: .status.egressNode
+ name: Node
+ type: string
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: egresses
+ singular: egress
+ kind: Egress
+ shortNames:
+ - eg
diff --git a/build/charts/antrea/templates/crds/externalentity.yaml b/build/charts/antrea/templates/crds/externalentity.yaml
new file mode 100644
index 00000000000..bfa251ebe57
--- /dev/null
+++ b/build/charts/antrea/templates/crds/externalentity.yaml
@@ -0,0 +1,58 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: externalentities.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ properties:
+ endpoints:
+ type: array
+ items:
+ type: object
+ properties:
+ ip:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ name:
+ type: string
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ name:
+ type: string
+ externalNode:
+ type: string
+ - name: v1alpha1
+ served: false
+ storage: false
+ schema:
+ openAPIV3Schema:
+ type: object
+ scope: Namespaced
+ names:
+ plural: externalentities
+ singular: externalentity
+ kind: ExternalEntity
+ shortNames:
+ - ee
diff --git a/build/charts/antrea/templates/crds/externalippool.yaml b/build/charts/antrea/templates/crds/externalippool.yaml
new file mode 100644
index 00000000000..080c0c620c0
--- /dev/null
+++ b/build/charts/antrea/templates/crds/externalippool.yaml
@@ -0,0 +1,103 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: externalippools.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ type: object
+ required:
+ - ipRanges
+ - nodeSelector
+ properties:
+ ipRanges:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required:
+ - cidr
+ - required:
+ - start
+ - end
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ start:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ end:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ status:
+ type: object
+ properties:
+ usage:
+ type: object
+ properties:
+ total:
+ type: integer
+ used:
+ type: integer
+ additionalPrinterColumns:
+ - description: The number of total IPs
+ jsonPath: .status.usage.total
+ name: Total
+ type: integer
+ - description: The number of allocated IPs
+ jsonPath: .status.usage.used
+ name: Used
+ type: integer
+ - jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: externalippools
+ singular: externalippool
+ kind: ExternalIPPool
+ shortNames:
+ - eip
diff --git a/build/charts/antrea/templates/crds/ippool.yaml b/build/charts/antrea/templates/crds/ippool.yaml
new file mode 100644
index 00000000000..32529c81e51
--- /dev/null
+++ b/build/charts/antrea/templates/crds/ippool.yaml
@@ -0,0 +1,109 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: ippools.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ required:
+ - ipVersion
+ - ipRanges
+ type: object
+ properties:
+ ipVersion:
+ type: integer
+ ipRanges:
+ items:
+ oneOf:
+ - required:
+ - cidr
+ - gateway
+ - prefixLength
+ - required:
+ - start
+ - end
+ - gateway
+ - prefixLength
+ properties:
+ cidr:
+ format: cidr
+ type: string
+ start:
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ type: string
+ end:
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ type: string
+ gateway:
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ type: string
+ prefixLength:
+ type: integer
+ vlan:
+ type: integer
+ minimum: 0
+ maximum: 4094
+ type: object
+ type: array
+ status:
+ properties:
+ ipAddresses:
+ items:
+ properties:
+ ipAddress:
+ type: string
+ owner:
+ properties:
+ pod:
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ containerID:
+ type: string
+ ifName:
+ type: string
+ type: object
+ statefulSet:
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ index:
+ type: integer
+ type: object
+ type: object
+ phase:
+ type: string
+ type: object
+ type: array
+ type: object
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: ippools
+ singular: ippool
+ kind: IPPool
+ shortNames:
+ - ipp
diff --git a/build/charts/antrea/templates/crds/networkpolicy.yaml b/build/charts/antrea/templates/crds/networkpolicy.yaml
new file mode 100644
index 00000000000..7eb31cd2190
--- /dev/null
+++ b/build/charts/antrea/templates/crds/networkpolicy.yaml
@@ -0,0 +1,480 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: networkpolicies.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha1
+ served: true
+ storage: true
+ additionalPrinterColumns:
+ - name: Tier
+ type: string
+ description: The Tier to which this Antrea NetworkPolicy belongs to.
+ jsonPath: .spec.tier
+ - name: Priority
+ type: number
+ format: float
+ description: The Priority of this Antrea NetworkPolicy relative to other policies.
+ jsonPath: .spec.priority
+ - name: Desired Nodes
+ type: number
+ format: int32
+ description: The total number of Nodes that should realize the NetworkPolicy.
+ jsonPath: .status.desiredNodesRealized
+ - name: Current Nodes
+ type: number
+ format: int32
+ description: The number of Nodes that have realized the NetworkPolicy.
+ jsonPath: .status.currentNodesRealized
+ - name: Age
+ type: date
+ jsonPath: .metadata.creationTimestamp
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ # Ensure that Spec.Priority field is set
+ required:
+ - priority
+ type: object
+ properties:
+ tier:
+ type: string
+ priority:
+ type: number
+ format: float
+ # Ensure that Spec.Priority field is between 1 and 10000
+ minimum: 1.0
+ maximum: 10000.0
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that Spec.AppliedTo does not allow NamespaceSelector/IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ingress:
+ type: array
+ items:
+ type: object
+ required:
+ - action
+ properties:
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that rule AppliedTo does not allow NamespaceSelector/IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ # Ensure that Action field allows only ALLOW, DROP, REJECT and PASS values
+ action:
+ type: string
+ enum: ['Allow', 'Drop', 'Reject', 'Pass']
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ endPort:
+ type: integer
+ protocols:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required: [icmp]
+ properties:
+ icmp:
+ type: object
+ properties:
+ icmpType:
+ type: integer
+ minimum: 0
+ maximum: 255
+ icmpCode:
+ type: integer
+ minimum: 0
+ maximum: 255
+ from:
+ type: array
+ items:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ externalEntitySelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ name:
+ type: string
+ enableLogging:
+ type: boolean
+ egress:
+ type: array
+ items:
+ type: object
+ required:
+ - action
+ properties:
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that rule AppliedTo does not allow NamespaceSelector/IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ # Ensure that Action field allows only ALLOW, DROP, REJECT and PASS values
+ action:
+ type: string
+ enum: ['Allow', 'Drop', 'Reject', 'Pass']
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ endPort:
+ type: integer
+ protocols:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required: [icmp]
+ properties:
+ icmp:
+ type: object
+ properties:
+ icmpType:
+ type: integer
+ minimum: 0
+ maximum: 255
+ icmpCode:
+ type: integer
+ minimum: 0
+ maximum: 255
+ to:
+ type: array
+ items:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ externalEntitySelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ fqdn:
+ type: string
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ toServices:
+ type: array
+ items:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ name:
+ type: string
+ enableLogging:
+ type: boolean
+ status:
+ type: object
+ properties:
+ phase:
+ type: string
+ observedGeneration:
+ type: integer
+ currentNodesRealized:
+ type: integer
+ desiredNodesRealized:
+ type: integer
+ subresources:
+ status: {}
+ scope: Namespaced
+ names:
+ plural: networkpolicies
+ singular: networkpolicy
+ kind: NetworkPolicy
+ shortNames:
+ - anp
diff --git a/build/charts/antrea/templates/crds/tier.yaml b/build/charts/antrea/templates/crds/tier.yaml
new file mode 100644
index 00000000000..1ee1a1ce5fe
--- /dev/null
+++ b/build/charts/antrea/templates/crds/tier.yaml
@@ -0,0 +1,42 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: tiers.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha1
+ served: true
+ storage: true
+ additionalPrinterColumns:
+ - name: Priority
+ type: integer
+ description: The Priority of this Tier relative to other Tiers.
+ jsonPath: .spec.priority
+ - name: Age
+ type: date
+ jsonPath: .metadata.creationTimestamp
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ required:
+ - priority
+ type: object
+ properties:
+ priority:
+ type: integer
+ minimum: 0
+ maximum: 255
+ description:
+ type: string
+ scope: Cluster
+ names:
+ plural: tiers
+ singular: tier
+ kind: Tier
+ shortNames:
+ - tr
diff --git a/build/charts/antrea/templates/crds/traceflow.yaml b/build/charts/antrea/templates/crds/traceflow.yaml
new file mode 100644
index 00000000000..45d00fbb275
--- /dev/null
+++ b/build/charts/antrea/templates/crds/traceflow.yaml
@@ -0,0 +1,251 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: traceflows.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha1
+ served: true
+ storage: true
+ additionalPrinterColumns:
+ - jsonPath: .status.phase
+ description: The phase of the Traceflow.
+ name: Phase
+ type: string
+ - jsonPath: .spec.source.pod
+ description: The name of the source Pod.
+ name: Source-Pod
+ type: string
+ priority: 10
+ - jsonPath: .spec.destination.pod
+ description: The name of the destination Pod.
+ name: Destination-Pod
+ type: string
+ priority: 10
+ - jsonPath: .spec.destination.ip
+ description: The IP address of the destination.
+ name: Destination-IP
+ type: string
+ priority: 10
+ - jsonPath: .spec.liveTraffic
+ description: Trace live traffic.
+ name: Live-Traffic
+ type: boolean
+ priority: 10
+ - jsonPath: .spec.droppedOnly
+ description: Capture only the dropped packet.
+ name: Dropped-Only
+ type: boolean
+ priority: 10
+ - jsonPath: .spec.timeout
+ description: Timeout in seconds.
+ name: Timeout
+ type: integer
+ priority: 10
+ - jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ type: object
+ properties:
+ source:
+ type: object
+ properties:
+ pod:
+ type: string
+ namespace:
+ type: string
+ ip:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ destination:
+ type: object
+ properties:
+ pod:
+ type: string
+ service:
+ type: string
+ namespace:
+ type: string
+ ip:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ packet:
+ type: object
+ properties:
+ ipHeader:
+ type: object
+ properties:
+ srcIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ protocol:
+ type: integer
+ ttl:
+ type: integer
+ flags:
+ type: integer
+ ipv6Header:
+ type: object
+ properties:
+ srcIP:
+ type: string
+ format: ipv6
+ nextHeader:
+ type: integer
+ hopLimit:
+ type: integer
+ transportHeader:
+ type: object
+ properties:
+ icmp:
+ type: object
+ properties:
+ id:
+ type: integer
+ sequence:
+ type: integer
+ udp:
+ type: object
+ properties:
+ srcPort:
+ type: integer
+ dstPort:
+ type: integer
+ tcp:
+ type: object
+ properties:
+ srcPort:
+ type: integer
+ dstPort:
+ type: integer
+ flags:
+ type: integer
+ liveTraffic:
+ type: boolean
+ droppedOnly:
+ type: boolean
+ timeout:
+ type: integer
+ status:
+ type: object
+ properties:
+ reason:
+ type: string
+ dataplaneTag:
+ type: integer
+ phase:
+ type: string
+ startTime:
+ type: string
+ results:
+ type: array
+ items:
+ type: object
+ properties:
+ node:
+ type: string
+ role:
+ type: string
+ timestamp:
+ type: integer
+ observations:
+ type: array
+ items:
+ type: object
+ properties:
+ component:
+ type: string
+ componentInfo:
+ type: string
+ action:
+ type: string
+ pod:
+ type: string
+ dstMAC:
+ type: string
+ networkPolicy:
+ type: string
+ ttl:
+ type: integer
+ translatedSrcIP:
+ type: string
+ translatedDstIP:
+ type: string
+ tunnelDstIP:
+ type: string
+ capturedPacket:
+ properties:
+ srcIP:
+ type: string
+ dstIP:
+ type: string
+ length:
+ type: integer
+ ipHeader:
+ properties:
+ flags:
+ type: integer
+ protocol:
+ type: integer
+ ttl:
+ type: integer
+ type: object
+ ipv6Header:
+ properties:
+ hopLimit:
+ type: integer
+ nextHeader:
+ type: integer
+ type: object
+ transportHeader:
+ properties:
+ tcp:
+ properties:
+ dstPort:
+ type: integer
+ srcPort:
+ type: integer
+ flags:
+ type: integer
+ type: object
+ udp:
+ properties:
+ dstPort:
+ type: integer
+ srcPort:
+ type: integer
+ type: object
+ icmp:
+ properties:
+ id:
+ type: integer
+ sequence:
+ type: integer
+ type: object
+ type: object
+ type: object
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: traceflows
+ singular: traceflow
+ kind: Traceflow
+ shortNames:
+ - tf
diff --git a/build/charts/antrea/templates/crds/trafficcontrol.yaml b/build/charts/antrea/templates/crds/trafficcontrol.yaml
new file mode 100644
index 00000000000..0f2ffdb457c
--- /dev/null
+++ b/build/charts/antrea/templates/crds/trafficcontrol.yaml
@@ -0,0 +1,283 @@
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: trafficcontrols.crd.antrea.io
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ type: object
+ required:
+ - appliedTo
+ - direction
+ - action
+ - targetPort
+ properties:
+ appliedTo:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ direction:
+ type: string
+ enum:
+ - Ingress
+ - Egress
+ - Both
+ action:
+ type: string
+ enum:
+ - Mirror
+ - Redirect
+ targetPort:
+ type: object
+ oneOf:
+ - required: [ovsInternal]
+ - required: [device]
+ - required: [geneve]
+ - required: [vxlan]
+ - required: [gre]
+ - required: [erspan]
+ properties:
+ ovsInternal:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ device:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ geneve:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ vni:
+ type: integer
+ minimum: 0
+ maximum: 16777215
+ destinationPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ vxlan:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ vni:
+ type: integer
+ minimum: 0
+ maximum: 16777215
+ destinationPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ gre:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ key:
+ type: integer
+ minimum: 0
+ maximum: 4294967295
+ erspan:
+ type: object
+ required:
+ - remoteIP
+ - version
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ sessionID:
+ type: integer
+ minimum: 0
+ maximum: 1023
+ version:
+ type: integer
+ enum:
+ - 1
+ - 2
+ index:
+ type: integer
+ dir:
+ type: integer
+ enum:
+ - 0
+ - 1
+ hardwareID:
+ type: integer
+ returnPort:
+ type: object
+ oneOf:
+ - required: [ovsInternal]
+ - required: [device]
+ - required: [geneve]
+ - required: [vxlan]
+ - required: [gre]
+ properties:
+ ovsInternal:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ device:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ geneve:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ vni:
+ type: integer
+ minimum: 0
+ maximum: 16777215
+ destinationPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ vxlan:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ vni:
+ type: integer
+ minimum: 0
+ maximum: 16777215
+ destinationPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ gre:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ key:
+ type: integer
+ minimum: 0
+ maximum: 4294967295
+ additionalPrinterColumns:
+ - description: Specifies the direction of traffic that should be matched.
+ jsonPath: .spec.direction
+ name: Direction
+ type: string
+ - description: Specifies the action that should be taken for the traffic.
+ jsonPath: .spec.action
+ name: Action
+ type: string
+ - jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: trafficcontrols
+ singular: trafficcontrol
+ kind: TrafficControl
+ shortNames:
+ - tc
diff --git a/build/charts/antrea/templates/simulator/configmap.yaml b/build/charts/antrea/templates/simulator/configmap.yaml
new file mode 100644
index 00000000000..b4f4010ea83
--- /dev/null
+++ b/build/charts/antrea/templates/simulator/configmap.yaml
@@ -0,0 +1,11 @@
+{{- if .Values.testing.simulator.enable }}
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: node-configmap
+ namespace: {{ .Release.Namespace }}
+ labels:
+ app: antrea
+data:
+ content.type: test-cluster
+{{- end }}
diff --git a/build/yamls/patches/simulator/antrea-agent-simulator.yml b/build/charts/antrea/templates/simulator/statefulset.yaml
similarity index 96%
rename from build/yamls/patches/simulator/antrea-agent-simulator.yml
rename to build/charts/antrea/templates/simulator/statefulset.yaml
index d66b83f904c..3b88accb1bb 100644
--- a/build/yamls/patches/simulator/antrea-agent-simulator.yml
+++ b/build/charts/antrea/templates/simulator/statefulset.yaml
@@ -1,17 +1,11 @@
----
-apiVersion: v1
-data:
- content.type: test-cluster
-kind: ConfigMap
-metadata:
- name: node-configmap
- namespace: kube-system
----
+{{- if .Values.testing.simulator.enable }}
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: antrea-agent-simulator
- namespace: kube-system
+ namespace: {{ .Release.Namespace }}
+ labels:
+ app: antrea
spec:
podManagementPolicy: Parallel
replicas: 1
@@ -151,3 +145,4 @@ spec:
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
+{{- end }}
diff --git a/build/charts/antrea/templates/webhooks/mutating/crdmutator.yaml b/build/charts/antrea/templates/webhooks/mutating/crdmutator.yaml
new file mode 100644
index 00000000000..f87e33111de
--- /dev/null
+++ b/build/charts/antrea/templates/webhooks/mutating/crdmutator.yaml
@@ -0,0 +1,37 @@
+apiVersion: admissionregistration.k8s.io/v1
+kind: MutatingWebhookConfiguration
+metadata:
+ name: "crdmutator.antrea.io"
+ labels:
+ app: antrea
+webhooks:
+ - name: "acnpmutator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: {{ .Release.Namespace }}
+ path: "/mutate/acnp"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["clusternetworkpolicies"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "anpmutator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: {{ .Release.Namespace }}
+ path: "/mutate/anp"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["networkpolicies"]
+ scope: "Namespaced"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
diff --git a/build/yamls/patches/admissioncontroller/webhook.yml b/build/charts/antrea/templates/webhooks/mutating/labelsmutator.yaml
similarity index 86%
rename from build/yamls/patches/admissioncontroller/webhook.yml
rename to build/charts/antrea/templates/webhooks/mutating/labelsmutator.yaml
index b36ac0edeb1..f87a49e30db 100644
--- a/build/yamls/patches/admissioncontroller/webhook.yml
+++ b/build/charts/antrea/templates/webhooks/mutating/labelsmutator.yaml
@@ -1,7 +1,10 @@
+{{- if .Values.webhooks.labelsMutator.enable }}
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata:
name: "labelsmutator.antrea.io"
+ labels:
+ app: antrea
webhooks:
- name: "namelabelmutator.antrea.io"
clientConfig:
@@ -18,3 +21,4 @@ webhooks:
admissionReviewVersions: ["v1", "v1beta1"]
sideEffects: None
timeoutSeconds: 5
+{{- end }}
diff --git a/build/charts/antrea/templates/webhooks/validating/crdvalidator.yaml b/build/charts/antrea/templates/webhooks/validating/crdvalidator.yaml
new file mode 100644
index 00000000000..6cd661c3eeb
--- /dev/null
+++ b/build/charts/antrea/templates/webhooks/validating/crdvalidator.yaml
@@ -0,0 +1,112 @@
+apiVersion: admissionregistration.k8s.io/v1
+kind: ValidatingWebhookConfiguration
+metadata:
+ name: "crdvalidator.antrea.io"
+ labels:
+ app: antrea
+webhooks:
+ - name: "tiervalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: {{ .Release.Namespace }}
+ path: "/validate/tier"
+ rules:
+ - operations: ["CREATE", "UPDATE", "DELETE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["tiers"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "acnpvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: {{ .Release.Namespace }}
+ path: "/validate/acnp"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["clusternetworkpolicies"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "anpvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: {{ .Release.Namespace }}
+ path: "/validate/anp"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["networkpolicies"]
+ scope: "Namespaced"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "clustergroupvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: {{ .Release.Namespace }}
+ path: "/validate/clustergroup"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha3", "v1alpha2"]
+ resources: ["clustergroups"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "externalippoolvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: {{ .Release.Namespace }}
+ path: "/validate/externalippool"
+ rules:
+ - operations: ["UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha2"]
+ resources: ["externalippools"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "egressvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: {{ .Release.Namespace }}
+ path: "/validate/egress"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha2"]
+ resources: ["egresses"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "ippoolvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: {{ .Release.Namespace }}
+ path: "/validate/ippool"
+ rules:
+ - operations: ["CREATE", "UPDATE", "DELETE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha2"]
+ resources: ["ippools"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
diff --git a/build/charts/antrea/templates/whereabouts/clusterrole.yaml b/build/charts/antrea/templates/whereabouts/clusterrole.yaml
new file mode 100644
index 00000000000..c7af5821866
--- /dev/null
+++ b/build/charts/antrea/templates/whereabouts/clusterrole.yaml
@@ -0,0 +1,22 @@
+{{- if .Values.whereabouts.enable }}
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antrea-agent-whereabouts
+ labels:
+ app: antrea
+rules:
+ - apiGroups:
+ - whereabouts.cni.cncf.io
+ resources:
+ - ippools
+ verbs:
+ - get
+ - put
+ - watch
+ - list
+ - update
+ - patch
+ - create
+ - delete
+{{- end }}
diff --git a/build/charts/antrea/templates/whereabouts/clusterrolebinding.yaml b/build/charts/antrea/templates/whereabouts/clusterrolebinding.yaml
new file mode 100644
index 00000000000..5961902f8ff
--- /dev/null
+++ b/build/charts/antrea/templates/whereabouts/clusterrolebinding.yaml
@@ -0,0 +1,16 @@
+{{- if .Values.whereabouts.enable }}
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antrea-agent-whereabouts
+ labels:
+ app: antrea
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: antrea-agent-whereabouts
+subjects:
+ - kind: ServiceAccount
+ name: antrea-agent-whereabouts
+ namespace: {{ .Release.Namespace }}
+{{- end }}
diff --git a/build/charts/antrea/templates/whereabouts/secret.yaml b/build/charts/antrea/templates/whereabouts/secret.yaml
new file mode 100644
index 00000000000..fba1efd9058
--- /dev/null
+++ b/build/charts/antrea/templates/whereabouts/secret.yaml
@@ -0,0 +1,12 @@
+{{- if .Values.whereabouts.enable }}
+apiVersion: v1
+kind: Secret
+metadata:
+ name: whereabouts-cni-secret
+ namespace: {{ .Release.Namespace }}
+ annotations:
+ kubernetes.io/service-account.name: antrea-agent-whereabouts
+ labels:
+ app: antrea
+type: kubernetes.io/service-account-token
+{{- end }}
diff --git a/build/charts/antrea/templates/whereabouts/serviceaccount.yaml b/build/charts/antrea/templates/whereabouts/serviceaccount.yaml
new file mode 100644
index 00000000000..9129cf25470
--- /dev/null
+++ b/build/charts/antrea/templates/whereabouts/serviceaccount.yaml
@@ -0,0 +1,9 @@
+{{- if .Values.whereabouts.enable }}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+ name: antrea-agent-whereabouts
+ namespace: {{ .Release.Namespace }}
+ labels:
+ app: antrea
+{{- end }}
diff --git a/build/charts/antrea/values.yaml b/build/charts/antrea/values.yaml
new file mode 100644
index 00000000000..f7212eb3289
--- /dev/null
+++ b/build/charts/antrea/values.yaml
@@ -0,0 +1,280 @@
+# -- Container image to use for Antrea components.
+image:
+ repository: "projects.registry.vmware.com/antrea/antrea-ubuntu"
+ pullPolicy: "IfNotPresent"
+ tag: "latest"
+
+# -- Determines how traffic is encapsulated. It must be one of "encap",
+# "noEncap", "hybrid", or "networkPolicyOnly".
+trafficEncapMode: "encap"
+# -- Tunnel protocol used for encapsulating traffic across Nodes. It must be one
+# of "geneve", "vxlan", "gre", "stt".
+tunnelType: "geneve"
+# -- Determines how tunnel traffic is encrypted. Currently encryption only works
+# with encap mode.It must be one of "none", "ipsec", "wireGuard".
+trafficEncryptionMode: "none"
+# -- Enable bridging mode of Pod network on Nodes, in which the Node's transport
+# interface is connected to the OVS bridge.
+enableBridgingMode: false
+# -- Disable TX checksum offloading for container network interfaces. It's
+# supposed to be set to true when the datapath doesn't support TX checksum
+# offloading, which causes packets to be dropped due to bad checksum. It affects
+# Pods running on Linux Nodes only.
+disableTXChecksumOffload: false
+# -- Whether or not to SNAT (using the Node IP) the egress traffic from a Pod to
+# the external network.
+noSNAT: false
+# -- Name of the interface antrea-agent will create and use for host <-> Pod
+# communication.
+hostGateway: "antrea-gw0"
+# -- Name of the interface on Node which is used for tunneling or routing the
+# traffic across Nodes.
+transportInterface: ""
+# -- Network CIDRs of the interface on Node which is used for tunneling or
+# routing the traffic across Nodes.
+transportInterfaceCIDRs: []
+
+multicast:
+ # -- Names of the interfaces on Nodes that are used to forward multicast traffic.
+ multicastInterfaces: []
+ # -- The interval at which the antrea-agent sends IGMP queries to Pods.
+ # Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
+ igmpQueryInterval: "125s"
+
+# -- Default MTU to use for the host gateway interface and the network interface
+# of each Pod. By default, antrea-agent will discover the MTU of the Node's
+# primary interface and adjust it to accommodate for tunnel encapsulation
+# overhead if applicable.
+defaultMTU: 0
+
+ovs:
+ # -- Name of the OVS bridge antrea-agent will create and use.
+ bridgeName: "br-int"
+ # -- Enable hardware offload for the OVS bridge (required additional
+ # configuration).
+ hwOffload: false
+
+wireGuard:
+ # -- Port for WireGuard to send and receive traffic.
+ port: 51820
+
+ipsec:
+ # -- Preshared Key (PSK) for IKE authentication. It will be stored in a secret
+ # and passed to antrea-agent as an environment variable.
+ psk: "changeme"
+
+egress:
+ # -- CIDR ranges to which outbound Pod traffic will not be SNAT'd by Egresses.
+ exceptCIDRs: []
+
+nodePortLocal:
+ # -- Enable the NodePortLocal feature.
+ enable: false
+ # -- Port range used by NodePortLocal when creating Pod port mappings.
+ portRange: "61000-62000"
+
+antreaProxy:
+ # -- Proxy all Service traffic, for all Service types, regardless of where it
+ # comes from.
+ proxyAll: false
+ # -- String array of values which specifies the host IPv4/IPv6 addresses for
+ # NodePort. By default, all host addresses are used.
+ nodePortAddresses: []
+ ## -- List of Services which should be ignored by AntreaProxy.
+ skipServices: []
+ # -- When set to false, AntreaProxy no longer load-balances traffic destined
+ # to the External IPs of LoadBalancer Services.
+ proxyLoadBalancerIPs: true
+
+nodeIPAM:
+ # -- Enable Node IPAM in Antrea
+ enable: false
+ # -- CIDR ranges to use when allocating Pod IP addresses.
+ clusterCIDRs: []
+ # -- IPv4 CIDR ranges reserved for Services.
+ serviceCIDR: ""
+ # -- IPv6 CIDR ranges reserved for Services.
+ serviceCIDRv6: ""
+ # -- Mask size for IPv4 Node CIDR in IPv4 or dual-stack cluster.
+ nodeCIDRMaskSizeIPv4: 24
+ # -- Mask size for IPv6 Node CIDR in IPv6 or dual-stack cluster.
+ nodeCIDRMaskSizeIPv6: 64
+
+# -- Address of Kubernetes apiserver, to override any value provided in
+# kubeconfig or InClusterConfig.
+kubeAPIServerOverride: ""
+# -- IPv4 CIDR range used for Services. Required when AntreaProxy is disabled.
+serviceCIDR: ""
+# -- IPv6 CIDR range used for Services. Required when AntreaProxy is disabled.
+serviceCIDRv6: ""
+
+# -- Comma-separated list of cipher suites that will be used by the Antrea
+# APIservers. If empty, the default Go Cipher Suites will be used. See
+# https://golang.org/pkg/crypto/tls/#pkg-constants.
+tlsCipherSuites: ""
+# -- TLS min version from: VersionTLS10, VersionTLS11, VersionTLS12,
+# VersionTLS13.
+tlsMinVersion: ""
+
+# -- To explicitly enable or disable a FeatureGate and bypass the Antrea
+# defaults, add an entry to the dictionary with the FeatureGate's name as the
+# key and a boolean as the value.
+featureGates: {}
+
+agent:
+ # -- Port for the antrea-agent APIServer to serve on.
+ apiPort: 10350
+ # -- Enable metrics exposure via Prometheus.
+ enablePrometheusMetrics: true
+ # -- Annotations to be added to antrea-agent Pods.
+ podAnnotations: {}
+ # -- Labels to be added to antrea-agent Pods.
+ podLabels: {}
+ # -- Tolerations for the antrea-agent Pods.
+ tolerations:
+ # Mark it as a critical add-on.
+ - key: CriticalAddonsOnly
+ operator: Exists
+ # Make sure it gets scheduled on all Nodes.
+ - effect: NoSchedule
+ operator: Exists
+ # Make sure it doesn't get evicted.
+ - effect: NoExecute
+ operator: Exists
+ # -- Node selector for the antrea-agent Pods.
+ nodeSelector:
+ kubernetes.io/os: linux
+ # -- Prority class to use for the antrea-agent Pods.
+ priorityClassName: "system-node-critical"
+ # -- Affinity for the antrea-agent Pods.
+ affinity: {}
+ # -- DNS Policy for the antrea-agent Pods.
+ dnsPolicy: "ClusterFirstWithHostNet"
+ # -- Update strategy for the antrea-agent DaemonSet.
+ updateStrategy:
+ type: RollingUpdate
+ # -- Additional volumes for antrea-agent Pods.
+ extraVolumes: []
+ installCNI:
+ # -- Resource requests and limits for the install-cni initContainer.
+ resources:
+ requests:
+ cpu: "100m"
+ antreaAgent:
+ # -- Extra environment variables to be injected into antrea-agent.
+ extraEnv: {}
+ # -- Max size in MBs of any single log file.
+ logFileMaxSize: 100
+ # -- Max number of log files.
+ logFileMaxNum: 4
+ # -- Extra command-line arguments for antrea-agent.
+ extraArgs: []
+ # -- Additional volumeMounts for the antrea-agent container.
+ extraVolumeMounts: []
+ # -- Resource requests and limits for the antrea-agent container.
+ resources:
+ requests:
+ cpu: "200m"
+ antreaOVS:
+ # -- Max size in MBs of any single log file.
+ logFileMaxSize: 100
+ # -- Max number of log files.
+ logFileMaxNum: 4
+ # -- Extra command-line arguments for antrea-ovs.
+ extraArgs: []
+ # -- Resource requests and limits for the antrea-ovs container.
+ resources:
+ requests:
+ cpu: "200m"
+ antreaIPsec:
+ # -- Resource requests and limits for the antrea-ipsec container (when IPsec
+ # is enabled).
+ resources:
+ requests:
+ cpu: "50m"
+
+controller:
+ # -- Port for the antrea-controller APIServer to serve on.
+ apiPort: 10349
+ # -- Enable metrics exposure via Prometheus.
+ enablePrometheusMetrics: true
+ # -- Annotations to be added to antrea-controller Pod.
+ podAnnotations: {}
+ # -- Labels to be added to antrea-controller Pod.
+ podLabels: {}
+ # -- Indicates whether to use auto-generated self-signed TLS certificates. If
+ # false, a Secret named "antrea-controller-tls" must be provided with the
+ # following keys: ca.crt, tls.crt, tls.key.
+ selfSignedCert: true
+ # -- Tolerations for the antrea-controller Pod.
+ tolerations:
+ # Mark it as a critical add-on.
+ - key: CriticalAddonsOnly
+ operator: Exists
+ # Allow it to schedule onto master nodes.
+ - key: node-role.kubernetes.io/master
+ effect: NoSchedule
+ # Control-plane taint for Kubernetes >= 1.24.
+ - key: node-role.kubernetes.io/control-plane
+ effect: NoSchedule
+ # -- Node selector for the antrea-controller Pod.
+ nodeSelector:
+ kubernetes.io/os: linux
+ # -- Prority class to use for the antrea-controller Pod.
+ priorityClassName: "system-cluster-critical"
+ # -- Affinity for the antrea-controller Pod.
+ affinity: {}
+ antreaController:
+ # -- Extra environment variables to be injected into antrea-controller.
+ extraEnv: {}
+ # -- Max size in MBs of any single log file.
+ logFileMaxSize: 100
+ # -- Max number of log files.
+ logFileMaxNum: 4
+ # -- Extra command-line arguments for antrea-controller.
+ extraArgs: []
+ # -- Resource requests and limits for the antrea-controller container.
+ resources:
+ requests:
+ cpu: "200m"
+
+flowCollector:
+ # -- IPFIX collector address as a string with format :[][:].
+ collectorAddr: "flow-aggregator.flow-aggregator.svc:4739:tls"
+ # -- Determines how often the flow exporter polls for new connections.
+ flowPollInterval: "5s"
+ # -- timeout after which a flow record is sent to the collector for active
+ # flows.
+ activeFlowExportTimeout: "5s"
+ # -- timeout after which a flow record is sent to the collector for idle
+ # flows.
+ idleFlowExportTimeout: "15s"
+
+cni:
+ # -- Chained plugins to use alongside antrea-cni.
+ plugins:
+ portmap: true
+ bandwidth: true
+ # -- Installation path of CNI binaries on the host.
+ hostBinPath: "/opt/cni/bin"
+ # -- CNI binaries shipped with Antrea for which installation should be
+ # skipped.
+ skipBinaries: []
+
+webhooks:
+ labelsMutator:
+ ## -- Mutate all namespaces to add the "antrea.io/metadata.name" label.
+ enable: false
+
+## -- Global log verbosity switch for all Antrea components.
+logVerbosity: 0
+
+## -- Install and configure Whereabouts, for use by the antrea-agent.
+whereabouts:
+ enable: false
+
+testing:
+ ## -- enable code coverage measurement (used when testing Antrea only).
+ coverage: false
+ simulator:
+ enable: false
diff --git a/build/images/codegen/Dockerfile b/build/images/codegen/Dockerfile
index 810a8a513ed..c472be6de24 100644
--- a/build/images/codegen/Dockerfile
+++ b/build/images/codegen/Dockerfile
@@ -18,9 +18,11 @@ LABEL description="A Docker image based on the golang image, which includes code
ENV GO111MODULE=on
-ARG K8S_VERSION=1.21.0
+ARG K8S_VERSION=1.24.0
# The k8s.io/kube-openapi repo does not have tag, using a workable commit hash.
-ARG KUBEOPENAPI_VERSION=v0.0.0-20210305164622-f622666832c1
+# We use the version that is referenced in the Kubernetes go.mod (for the
+# correct K8s version).
+ARG KUBEOPENAPI_VERSION=v0.0.0-20220328201542-3ee0da9b0b42
RUN go get k8s.io/code-generator/cmd/client-gen@kubernetes-$K8S_VERSION && \
go get k8s.io/code-generator/cmd/deepcopy-gen@kubernetes-$K8S_VERSION && \
diff --git a/build/images/codegen/README.md b/build/images/codegen/README.md
index cfe9b380910..8bf29fd3002 100644
--- a/build/images/codegen/README.md
+++ b/build/images/codegen/README.md
@@ -20,6 +20,7 @@ Here is the table of codegen images that have been uploaded:
| Tag | Change |
| :----------------------------- | --------------------------------------- |
+| kubernetes-1.24.0 | Upgraded K8s libraries to v1.24.0 |
| kubernetes-1.21.0-build.1 | Upgraded protoc-gen-go to v1.5.2 |
| kubernetes-1.21.0-build.0 | Upgraded Go to v1.17 |
| kubernetes-1.21.0 | Upgraded K8s libraries to v1.21.0 |
diff --git a/build/images/deps/ovs-version b/build/images/deps/ovs-version
index 3b1fc7950fa..d76bd2ba3ef 100644
--- a/build/images/deps/ovs-version
+++ b/build/images/deps/ovs-version
@@ -1 +1 @@
-2.15.1
+2.17.0
diff --git a/build/images/ovs/apply-patches.sh b/build/images/ovs/apply-patches.sh
index 67fdd4faaca..3d3bead5078 100755
--- a/build/images/ovs/apply-patches.sh
+++ b/build/images/ovs/apply-patches.sh
@@ -35,8 +35,15 @@ function version_let() { test "$(printf '%s\n' "$@" | sort -V | head -n 1)" == "
# greater than or equal to
function version_get() { test "$(printf '%s\n' "$@" | sort -rV | head -n 1)" == "$1"; }
-if version_lt "$OVS_VERSION" "2.13.0" || version_gt "$OVS_VERSION" "2.15.1"; then
- echoerr "OVS_VERSION $OVS_VERSION is not supported (must be >= 2.13.0 and <= 2.15.1)"
+function apply_patch() {
+ commit_sha="$1"
+ shift
+ curl -s "https://github.com/openvswitch/ovs/commit/$commit_sha.patch" | \
+ git apply "$@"
+}
+
+if version_lt "$OVS_VERSION" "2.13.0" || version_gt "$OVS_VERSION" "2.17.0"; then
+ echoerr "OVS_VERSION $OVS_VERSION is not supported (must be >= 2.13.0 and <= 2.17.0)"
exit 1
fi
@@ -46,8 +53,7 @@ fi
# This patch (post 2.13.0) ensures that ct_nw_src/ct_nw_dst supports IP Mask.
if version_let "$OVS_VERSION" "2.13.0"; then
- curl https://github.com/openvswitch/ovs/commit/1740aaf49dad6f533705dc3dce8d955a1840052a.patch | \
- git apply
+ apply_patch "1740aaf49dad6f533705dc3dce8d955a1840052a"
fi
if version_get "$OVS_VERSION" "2.13.0" && version_lt "$OVS_VERSION" "2.14.0" ; then
@@ -55,43 +61,43 @@ if version_get "$OVS_VERSION" "2.13.0" && version_lt "$OVS_VERSION" "2.14.0" ; t
# ovs-vswitchd exit by default. Antrea relies on this to support hitless upgrade
# of the Agent DaemonSet.
# The second patch depends on the first one.
- curl https://github.com/openvswitch/ovs/commit/586cd3101e7fda54d14fb5bf12d847f35d968627.patch | \
- git apply
+ apply_patch "586cd3101e7fda54d14fb5bf12d847f35d968627"
# We exclude 2 files which are likely to cause conflicts.
- curl https://github.com/openvswitch/ovs/commit/79eadafeb1b47a3871cb792aa972f6e4d89d1a0b.patch | \
- git apply --exclude NEWS --exclude vswitchd/ovs-vswitchd.8.in
+ apply_patch "586cd3101e7fda54d14fb5bf12d847f35d968627" "--exclude NEWS" "--exclude vswitchd/ovs-vswitchd.8.in"
# This patch (post 2.13.x) ensures that ovs-vswitchd does not delete datapath
# ports on exit.
- curl https://github.com/openvswitch/ovs/commit/7cc77b301f80a63cd4893198d82be0eef303f731.patch | \
- git apply
+ apply_patch "7cc77b301f80a63cd4893198d82be0eef303f731"
# These patches (post 2.13.x) are needed to fix the debian build on Ubuntu 20.04.
- curl https://github.com/openvswitch/ovs/commit/c101cd4171cfe04e214f858b4bbe089e56f13f9b.patch | \
- git apply
- curl https://github.com/openvswitch/ovs/commit/3c18bb0fe9f23308061217f72e2245f0e311b20b.patch | \
- git apply
- curl https://github.com/openvswitch/ovs/commit/fe175ac17352ceb2dbc9958112b4b1bc114d82f0.patch | \
- git apply
+ apply_patch "c101cd4171cfe04e214f858b4bbe089e56f13f9b"
+ apply_patch "3c18bb0fe9f23308061217f72e2245f0e311b20b"
+ apply_patch "fe175ac17352ceb2dbc9958112b4b1bc114d82f0"
# The OVS ovs-monitor-ipsec script has a Python3 shebang but still includes some Python2-specific code.
# Until the patch which fixes the script is merged upstream, we apply it here, or Antrea IPsec support will be broken.
- curl https://github.com/openvswitch/ovs/commit/8a09c2590ef2ea0edc250ec46e3d41bd5874b4ab.patch | \
- git apply
+ apply_patch "8a09c2590ef2ea0edc250ec46e3d41bd5874b4ab"
fi
# Starting from version 5.7.0, strongSwan no longer supports specifying a configuration parameter
# with the path delimited by dots in a configuration file. This patch fixes the strongSwan
# configuration parameters that ovs-monitor-ipsec writes, to comply with the new strongSwan format.
if version_lt "$OVS_VERSION" "2.14.1" ; then
- curl https://github.com/openvswitch/ovs/commit/b424becaac58d8cb08fb19ea839be6807d3ed57f.patch | \
- git apply
+ apply_patch "b424becaac58d8cb08fb19ea839be6807d3ed57f"
fi
# This patch is necessary to ensure that ovs-monitor-ipsec generates a correct IPsec configuration
# for strongSwan when using IPv6.
-curl https://github.com/openvswitch/ovs/commit/e59194b606078d90b73f86092f9b76385afa73f0.patch | \
- git apply
+if version_lt "$OVS_VERSION" "2.15.4" || (version_get "$OVS_VERSION" "2.16.0" && version_lt "$OVS_VERSION" "2.16.3") ; then
+ apply_patch "e59194b606078d90b73f86092f9b76385afa73f0"
+fi
+
+# This patch fixes a log file leak in OVS.
+# See https://github.com/antrea-io/antrea/issues/2003
+# It is fixed in the OVS master branch and will be included starting with OVS 2.18.
+if version_lt "$OVS_VERSION" "2.18.0" ; then
+ apply_patch "78ff3961ca9fb012eaaca3d3af1e8186fe1827e7"
+fi
# OVS hardcodes the installation path to /usr/lib/python3.7/dist-packages/ but this location
# does not seem to be in the Python path in Ubuntu 20.04. There may be a better way to do this,
diff --git a/build/images/scripts/Install-WindowsCNI.ps1 b/build/images/scripts/Install-WindowsCNI.ps1
index e85ba3b2bab..282f5e3975c 100644
--- a/build/images/scripts/Install-WindowsCNI.ps1
+++ b/build/images/scripts/Install-WindowsCNI.ps1
@@ -3,7 +3,6 @@ $ErrorActionPreference = "Stop";
mkdir -force /host/var/run/secrets/kubernetes.io/serviceaccount
cp -force /var/run/secrets/kubernetes.io/serviceaccount/* /host/var/run/secrets/kubernetes.io/serviceaccount/
mkdir -force /host/k/antrea/etc/
-mkdir -force /host/k/antrea/logs/
cp /k/antrea/cni/* /host/opt/cni/bin/
cp /etc/antrea/antrea-agent.conf /host/k/antrea/etc/
diff --git a/build/images/scripts/install_cni b/build/images/scripts/install_cni
index 62bac9aed8f..0c6d2a54492 100755
--- a/build/images/scripts/install_cni
+++ b/build/images/scripts/install_cni
@@ -3,7 +3,7 @@
set -euo pipefail
# Fetching the list of the binaries that user wants to skip installing.
-IFS=',' read -r -a binaries <<< "$SKIP_CNI_BINARIES"
+IFS=',' read -r -a binaries <<< "${SKIP_CNI_BINARIES:-}"
# Todo: check version and continue installation only for a newer version
# Install Antrea binary file
diff --git a/build/yamls/antrea-aks.yml b/build/yamls/antrea-aks.yml
index eee762e7e45..d29d3f36159 100644
--- a/build/yamls/antrea-aks.yml
+++ b/build/yamls/antrea-aks.yml
@@ -1,2740 +1,59 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
+---
+# Source: antrea/templates/agent/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
metadata:
+ name: antrea-agent
+ namespace: kube-system
labels:
app: antrea
- name: antreaagentinfos.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: AntreaAgentInfo
- plural: antreaagentinfos
- shortNames:
- - aai
- singular: antreaagentinfo
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: Health status of this Agent
- jsonPath: .agentConditions[?(@.type=='AgentHealthy')].status
- name: Healthy
- type: string
- - description: Last time the Healthy Condition was updated
- jsonPath: .agentConditions[?(@.type=='AgentHealthy')].lastHeartbeatTime
- name: Last Heartbeat
- type: date
- - description: Version of this Agent
- jsonPath: .version
- name: Version
- priority: 1
- type: string
- - description: Node on which this Agent is running
- jsonPath: .nodeRef.name
- name: Node
- priority: 1
- type: string
- - description: Number of local Pods managed by this Agent
- jsonPath: .localPodNum
- name: Num Pods
- priority: 2
- type: integer
- - description: Subnets used by this Agent for Pod IPAM
- jsonPath: .nodeSubnets
- name: Subnets
- priority: 2
- type: string
- name: v1beta1
- schema:
- openAPIV3Schema:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- served: true
- storage: true
---
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
+# Source: antrea/templates/antctl/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
metadata:
+ name: antctl
+ namespace: kube-system
labels:
app: antrea
- name: antreacontrollerinfos.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: AntreaControllerInfo
- plural: antreacontrollerinfos
- shortNames:
- - aci
- singular: antreacontrollerinfo
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: Health status of the Controller
- jsonPath: .controllerConditions[?(@.type=='ControllerHealthy')].status
- name: Healthy
- type: string
- - description: Last time the Healthy Condition was updated
- jsonPath: .controllerConditions[?(@.type=='ControllerHealthy')].lastHeartbeatTime
- name: Last Heartbeat
- type: date
- - description: Version of the Controller
- jsonPath: .version
- name: Version
- priority: 1
- type: string
- - description: Number of Agents connected to the Controller
- jsonPath: .connectedAgentNum
- name: Connected Agents
- priority: 1
- type: integer
- - description: Node on which the Controller is running
- jsonPath: .nodeRef.name
- name: Node
- priority: 1
- type: string
- - description: Number of Network Policies computed by Controller
- jsonPath: .networkPolicyControllerInfo.networkPolicyNum
- name: Num Network Policies
- priority: 2
- type: integer
- name: v1beta1
- schema:
- openAPIV3Schema:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- served: true
- storage: true
---
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
+# Source: antrea/templates/controller/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
metadata:
+ name: antrea-controller
+ namespace: kube-system
labels:
app: antrea
- name: clustergroups.crd.antrea.io
-spec:
- conversion:
- strategy: Webhook
- webhook:
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /convert/clustergroup
- conversionReviewVersions:
- - v1
- - v1beta1
- group: crd.antrea.io
- names:
- kind: ClusterGroup
- plural: clustergroups
- shortNames:
- - cg
- singular: clustergroup
- scope: Cluster
- versions:
- - name: v1alpha2
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- childGroups:
- items:
- type: string
- type: array
- externalEntitySelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- ipBlock:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- ipBlocks:
- items:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- type: array
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceReference:
- properties:
- name:
- type: string
- namespace:
- type: string
- type: object
- type: object
- status:
- properties:
- conditions:
- items:
- properties:
- lastTransitionTime:
- type: string
- status:
- type: string
- type:
- type: string
- type: object
- type: array
- type: object
- type: object
- served: true
- storage: false
- - name: v1alpha3
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- childGroups:
- items:
- type: string
- type: array
- externalEntitySelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- ipBlocks:
- items:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- type: array
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceReference:
- properties:
- name:
- type: string
- namespace:
- type: string
- type: object
- type: object
- status:
- properties:
- conditions:
- items:
- properties:
- lastTransitionTime:
- type: string
- status:
- type: string
- type:
- type: string
- type: object
- type: array
- type: object
- type: object
- served: true
- storage: true
- subresources:
- status: {}
---
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
+# Source: antrea/templates/agent/secret.yaml
+apiVersion: v1
+kind: Secret
+metadata:
+ name: antrea-agent-service-account-token
+ namespace: kube-system
+ annotations:
+ kubernetes.io/service-account.name: antrea-agent
+type: kubernetes.io/service-account-token
+---
+# Source: antrea/templates/antctl/secret.yaml
+apiVersion: v1
+kind: Secret
+metadata:
+ name: antctl-service-account-token
+ namespace: kube-system
+ annotations:
+ kubernetes.io/service-account.name: antctl
+type: kubernetes.io/service-account-token
+---
+# Source: antrea/templates/configmap.yaml
+apiVersion: v1
+kind: ConfigMap
metadata:
+ name: antrea-config
+ namespace: kube-system
labels:
app: antrea
- name: clusternetworkpolicies.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: ClusterNetworkPolicy
- plural: clusternetworkpolicies
- shortNames:
- - acnp
- singular: clusternetworkpolicy
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: The Tier to which this ClusterNetworkPolicy belongs to.
- jsonPath: .spec.tier
- name: Tier
- type: string
- - description: The Priority of this ClusterNetworkPolicy relative to other policies.
- format: float
- jsonPath: .spec.priority
- name: Priority
- type: number
- - description: The total number of Nodes that should realize the NetworkPolicy.
- format: int32
- jsonPath: .status.desiredNodesRealized
- name: Desired Nodes
- type: number
- - description: The number of Nodes that have realized the NetworkPolicy.
- format: int32
- jsonPath: .status.currentNodesRealized
- name: Current Nodes
- type: number
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- appliedTo:
- items:
- properties:
- group:
- type: string
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceAccount:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: object
- type: array
- egress:
- items:
- properties:
- action:
- enum:
- - Allow
- - Drop
- - Reject
- - Pass
- type: string
- appliedTo:
- items:
- properties:
- group:
- type: string
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceAccount:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: object
- type: array
- enableLogging:
- type: boolean
- name:
- type: string
- ports:
- items:
- properties:
- endPort:
- type: integer
- port:
- x-kubernetes-int-or-string: true
- protocol:
- enum:
- - TCP
- - UDP
- - SCTP
- type: string
- type: object
- type: array
- to:
- items:
- properties:
- fqdn:
- type: string
- group:
- type: string
- ipBlock:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- namespaces:
- properties:
- match:
- type: string
- type: object
- nodeSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceAccount:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: object
- type: array
- toServices:
- items:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: array
- required:
- - action
- type: object
- type: array
- ingress:
- items:
- properties:
- action:
- enum:
- - Allow
- - Drop
- - Reject
- - Pass
- type: string
- appliedTo:
- items:
- properties:
- group:
- type: string
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceAccount:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: object
- type: array
- enableLogging:
- type: boolean
- from:
- items:
- properties:
- group:
- type: string
- ipBlock:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- namespaces:
- properties:
- match:
- enum:
- - Self
- type: string
- type: object
- nodeSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceAccount:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: object
- type: array
- name:
- type: string
- ports:
- items:
- properties:
- endPort:
- type: integer
- port:
- x-kubernetes-int-or-string: true
- protocol:
- enum:
- - TCP
- - UDP
- - SCTP
- type: string
- type: object
- type: array
- required:
- - action
- type: object
- type: array
- priority:
- format: float
- maximum: 10000
- minimum: 1
- type: number
- tier:
- type: string
- required:
- - priority
- type: object
- status:
- properties:
- currentNodesRealized:
- type: integer
- desiredNodesRealized:
- type: integer
- observedGeneration:
- type: integer
- phase:
- type: string
- type: object
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: egresses.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: Egress
- plural: egresses
- shortNames:
- - eg
- singular: egress
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: Specifies the SNAT IP address for the selected workloads.
- jsonPath: .spec.egressIP
- name: EgressIP
- type: string
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- - description: The Owner Node of egress IP
- jsonPath: .status.egressNode
- name: Node
- type: string
- name: v1alpha2
- schema:
- openAPIV3Schema:
- properties:
- spec:
- anyOf:
- - required:
- - egressIP
- - required:
- - externalIPPool
- properties:
- appliedTo:
- properties:
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- egressIP:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- externalIPPool:
- type: string
- required:
- - appliedTo
- type: object
- status:
- properties:
- egressNode:
- type: string
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: externalentities.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: ExternalEntity
- plural: externalentities
- shortNames:
- - ee
- singular: externalentity
- scope: Namespaced
- versions:
- - name: v1alpha2
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- endpoints:
- items:
- properties:
- ip:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- name:
- type: string
- type: object
- type: array
- externalNode:
- type: string
- ports:
- items:
- properties:
- name:
- type: string
- port:
- x-kubernetes-int-or-string: true
- protocol:
- enum:
- - TCP
- - UDP
- - SCTP
- type: string
- type: object
- type: array
- type: object
- type: object
- served: true
- storage: true
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- type: object
- served: false
- storage: false
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: externalippools.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: ExternalIPPool
- plural: externalippools
- shortNames:
- - eip
- singular: externalippool
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: The number of total IPs
- jsonPath: .status.usage.total
- name: Total
- type: integer
- - description: The number of allocated IPs
- jsonPath: .status.usage.used
- name: Used
- type: integer
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha2
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- ipRanges:
- items:
- oneOf:
- - required:
- - cidr
- - required:
- - start
- - end
- properties:
- cidr:
- format: cidr
- type: string
- end:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- start:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- type: object
- type: array
- nodeSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- required:
- - ipRanges
- - nodeSelector
- type: object
- status:
- properties:
- usage:
- properties:
- total:
- type: integer
- used:
- type: integer
- type: object
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: ippools.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: IPPool
- plural: ippools
- shortNames:
- - ipp
- singular: ippool
- scope: Cluster
- versions:
- - name: v1alpha2
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- ipRanges:
- items:
- oneOf:
- - required:
- - cidr
- - gateway
- - prefixLength
- - required:
- - start
- - end
- - gateway
- - prefixLength
- properties:
- cidr:
- format: cidr
- type: string
- end:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- gateway:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- prefixLength:
- type: integer
- start:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- vlan:
- maximum: 4094
- minimum: 0
- type: integer
- type: object
- type: array
- ipVersion:
- type: integer
- required:
- - ipVersion
- - ipRanges
- type: object
- status:
- properties:
- ipAddresses:
- items:
- properties:
- ipAddress:
- type: string
- owner:
- properties:
- pod:
- properties:
- containerID:
- type: string
- name:
- type: string
- namespace:
- type: string
- type: object
- statefulSet:
- properties:
- index:
- type: integer
- name:
- type: string
- namespace:
- type: string
- type: object
- type: object
- phase:
- type: string
- type: object
- type: array
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: networkpolicies.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: NetworkPolicy
- plural: networkpolicies
- shortNames:
- - anp
- singular: networkpolicy
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - description: The Tier to which this Antrea NetworkPolicy belongs to.
- jsonPath: .spec.tier
- name: Tier
- type: string
- - description: The Priority of this Antrea NetworkPolicy relative to other policies.
- format: float
- jsonPath: .spec.priority
- name: Priority
- type: number
- - description: The total number of Nodes that should realize the NetworkPolicy.
- format: int32
- jsonPath: .status.desiredNodesRealized
- name: Desired Nodes
- type: number
- - description: The number of Nodes that have realized the NetworkPolicy.
- format: int32
- jsonPath: .status.currentNodesRealized
- name: Current Nodes
- type: number
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- appliedTo:
- items:
- properties:
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: array
- egress:
- items:
- properties:
- action:
- enum:
- - Allow
- - Drop
- - Reject
- - Pass
- type: string
- appliedTo:
- items:
- properties:
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: array
- enableLogging:
- type: boolean
- name:
- type: string
- ports:
- items:
- properties:
- endPort:
- type: integer
- port:
- x-kubernetes-int-or-string: true
- protocol:
- enum:
- - TCP
- - UDP
- - SCTP
- type: string
- type: object
- type: array
- to:
- items:
- properties:
- externalEntitySelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- fqdn:
- type: string
- ipBlock:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- nodeSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: array
- toServices:
- items:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- type: object
- type: array
- required:
- - action
- type: object
- type: array
- ingress:
- items:
- properties:
- action:
- enum:
- - Allow
- - Drop
- - Reject
- - Pass
- type: string
- appliedTo:
- items:
- properties:
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: array
- enableLogging:
- type: boolean
- from:
- items:
- properties:
- externalEntitySelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- ipBlock:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- nodeSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: array
- name:
- type: string
- ports:
- items:
- properties:
- endPort:
- type: integer
- port:
- x-kubernetes-int-or-string: true
- protocol:
- enum:
- - TCP
- - UDP
- - SCTP
- type: string
- type: object
- type: array
- required:
- - action
- type: object
- type: array
- priority:
- format: float
- maximum: 10000
- minimum: 1
- type: number
- tier:
- type: string
- required:
- - priority
- type: object
- status:
- properties:
- currentNodesRealized:
- type: integer
- desiredNodesRealized:
- type: integer
- observedGeneration:
- type: integer
- phase:
- type: string
- type: object
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: tiers.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: Tier
- plural: tiers
- shortNames:
- - tr
- singular: tier
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: The Priority of this Tier relative to other Tiers.
- jsonPath: .spec.priority
- name: Priority
- type: integer
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- description:
- type: string
- priority:
- maximum: 255
- minimum: 0
- type: integer
- required:
- - priority
- type: object
- type: object
- served: true
- storage: true
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: traceflows.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: Traceflow
- plural: traceflows
- shortNames:
- - tf
- singular: traceflow
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: The phase of the Traceflow.
- jsonPath: .status.phase
- name: Phase
- type: string
- - description: The name of the source Pod.
- jsonPath: .spec.source.pod
- name: Source-Pod
- priority: 10
- type: string
- - description: The name of the destination Pod.
- jsonPath: .spec.destination.pod
- name: Destination-Pod
- priority: 10
- type: string
- - description: The IP address of the destination.
- jsonPath: .spec.destination.ip
- name: Destination-IP
- priority: 10
- type: string
- - description: Trace live traffic.
- jsonPath: .spec.liveTraffic
- name: Live-Traffic
- priority: 10
- type: boolean
- - description: Capture only the dropped packet.
- jsonPath: .spec.droppedOnly
- name: Dropped-Only
- priority: 10
- type: boolean
- - description: Timeout in seconds.
- jsonPath: .spec.timeout
- name: Timeout
- priority: 10
- type: integer
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- destination:
- properties:
- ip:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- namespace:
- type: string
- pod:
- type: string
- service:
- type: string
- type: object
- droppedOnly:
- type: boolean
- liveTraffic:
- type: boolean
- packet:
- properties:
- ipHeader:
- properties:
- flags:
- type: integer
- protocol:
- type: integer
- srcIP:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- ttl:
- type: integer
- type: object
- ipv6Header:
- properties:
- hopLimit:
- type: integer
- nextHeader:
- type: integer
- srcIP:
- format: ipv6
- type: string
- type: object
- transportHeader:
- properties:
- icmp:
- properties:
- id:
- type: integer
- sequence:
- type: integer
- type: object
- tcp:
- properties:
- dstPort:
- type: integer
- flags:
- type: integer
- srcPort:
- type: integer
- type: object
- udp:
- properties:
- dstPort:
- type: integer
- srcPort:
- type: integer
- type: object
- type: object
- type: object
- source:
- properties:
- ip:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- namespace:
- type: string
- pod:
- type: string
- type: object
- timeout:
- type: integer
- type: object
- status:
- properties:
- capturedPacket:
- properties:
- dstIP:
- type: string
- ipHeader:
- properties:
- flags:
- type: integer
- protocol:
- type: integer
- ttl:
- type: integer
- type: object
- ipv6Header:
- properties:
- hopLimit:
- type: integer
- nextHeader:
- type: integer
- type: object
- length:
- type: integer
- srcIP:
- type: string
- transportHeader:
- properties:
- icmp:
- properties:
- id:
- type: integer
- sequence:
- type: integer
- type: object
- tcp:
- properties:
- dstPort:
- type: integer
- flags:
- type: integer
- srcPort:
- type: integer
- type: object
- udp:
- properties:
- dstPort:
- type: integer
- srcPort:
- type: integer
- type: object
- type: object
- type: object
- dataplaneTag:
- type: integer
- phase:
- type: string
- reason:
- type: string
- results:
- items:
- properties:
- node:
- type: string
- observations:
- items:
- properties:
- action:
- type: string
- component:
- type: string
- componentInfo:
- type: string
- dstMAC:
- type: string
- networkPolicy:
- type: string
- pod:
- type: string
- translatedDstIP:
- type: string
- translatedSrcIP:
- type: string
- ttl:
- type: integer
- tunnelDstIP:
- type: string
- type: object
- type: array
- role:
- type: string
- timestamp:
- type: integer
- type: object
- type: array
- startTime:
- type: string
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- labels:
- app: antrea
- name: antctl
- namespace: kube-system
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- labels:
- app: antrea
- name: antrea-agent
- namespace: kube-system
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- labels:
- app: antrea
- name: antrea-controller
- namespace: kube-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-admin: "true"
- rbac.authorization.k8s.io/aggregate-to-edit: "true"
- name: aggregate-antrea-clustergroups-edit
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - clustergroups
- verbs:
- - get
- - list
- - watch
- - create
- - update
- - patch
- - delete
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-view: "true"
- name: aggregate-antrea-clustergroups-view
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - clustergroups
- verbs:
- - get
- - list
- - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-admin: "true"
- rbac.authorization.k8s.io/aggregate-to-edit: "true"
- name: aggregate-antrea-policies-edit
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - clusternetworkpolicies
- - networkpolicies
- verbs:
- - get
- - list
- - watch
- - create
- - update
- - patch
- - delete
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-view: "true"
- name: aggregate-antrea-policies-view
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - clusternetworkpolicies
- - networkpolicies
- verbs:
- - get
- - list
- - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-admin: "true"
- rbac.authorization.k8s.io/aggregate-to-edit: "true"
- name: aggregate-traceflows-edit
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - traceflows
- verbs:
- - get
- - list
- - watch
- - create
- - update
- - patch
- - delete
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-view: "true"
- name: aggregate-traceflows-view
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - traceflows
- verbs:
- - get
- - list
- - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- name: antctl
-rules:
-- apiGroups:
- - controlplane.antrea.io
- resources:
- - networkpolicies
- - appliedtogroups
- - addressgroups
- verbs:
- - get
- - list
-- apiGroups:
- - stats.antrea.io
- resources:
- - networkpolicystats
- - antreaclusternetworkpolicystats
- - antreanetworkpolicystats
- verbs:
- - get
- - list
-- apiGroups:
- - system.antrea.io
- resources:
- - controllerinfos
- - agentinfos
- verbs:
- - get
-- apiGroups:
- - system.antrea.io
- resources:
- - supportbundles
- verbs:
- - get
- - post
-- apiGroups:
- - system.antrea.io
- resources:
- - supportbundles/download
- verbs:
- - get
-- nonResourceURLs:
- - /agentinfo
- - /addressgroups
- - /appliedtogroups
- - /loglevel
- - /networkpolicies
- - /ovsflows
- - /ovstracing
- - /podinterfaces
- - /featuregates
- verbs:
- - get
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- name: antrea-agent
-rules:
-- apiGroups:
- - ""
- resources:
- - nodes
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - ""
- resources:
- - nodes/status
- verbs:
- - patch
-- apiGroups:
- - ""
- resources:
- - pods
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - ""
- resources:
- - pods/status
- verbs:
- - patch
-- apiGroups:
- - ""
- resources:
- - endpoints
- - services
- - namespaces
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - ""
- resources:
- - services/status
- verbs:
- - update
-- apiGroups:
- - discovery.k8s.io
- resources:
- - endpointslices
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - crd.antrea.io
- resources:
- - antreaagentinfos
- verbs:
- - get
- - create
- - update
- - delete
-- apiGroups:
- - controlplane.antrea.io
- resources:
- - networkpolicies
- - appliedtogroups
- - addressgroups
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - controlplane.antrea.io
- resources:
- - egressgroups
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - controlplane.antrea.io
- resources:
- - nodestatssummaries
- verbs:
- - create
-- apiGroups:
- - controlplane.antrea.io
- resources:
- - networkpolicies/status
- verbs:
- - create
- - get
-- apiGroups:
- - authentication.k8s.io
- resources:
- - tokenreviews
- verbs:
- - create
-- apiGroups:
- - authorization.k8s.io
- resources:
- - subjectaccessreviews
- verbs:
- - create
-- apiGroups:
- - ""
- resourceNames:
- - extension-apiserver-authentication
- resources:
- - configmaps
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - ""
- resourceNames:
- - antrea-ca
- resources:
- - configmaps
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - crd.antrea.io
- resources:
- - traceflows
- - traceflows/status
- verbs:
- - get
- - watch
- - list
- - update
- - patch
- - create
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - egresses
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - crd.antrea.io
- resources:
- - egresses/status
- verbs:
- - update
-- apiGroups:
- - crd.antrea.io
- resources:
- - externalippools
- - ippools
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - crd.antrea.io
- resources:
- - ippools/status
- verbs:
- - update
-- apiGroups:
- - k8s.cni.cncf.io
- resources:
- - network-attachment-definitions
- verbs:
- - get
- - list
- - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- name: antrea-cluster-identity-reader
-rules:
-- apiGroups:
- - ""
- resourceNames:
- - antrea-cluster-identity
- resources:
- - configmaps
- verbs:
- - get
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- name: antrea-controller
-rules:
-- apiGroups:
- - ""
- resources:
- - pods
- - services
- - namespaces
- - configmaps
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - ""
- resources:
- - nodes
- verbs:
- - get
- - watch
- - list
- - patch
-- apiGroups:
- - ""
- resources:
- - services/status
- verbs:
- - update
-- apiGroups:
- - networking.k8s.io
- resources:
- - networkpolicies
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - authentication.k8s.io
- resources:
- - tokenreviews
- verbs:
- - create
-- apiGroups:
- - authorization.k8s.io
- resources:
- - subjectaccessreviews
- verbs:
- - create
-- apiGroups:
- - apiextensions.k8s.io
- resources:
- - customresourcedefinitions
- verbs:
- - get
- - update
-- apiGroups:
- - ""
- resourceNames:
- - extension-apiserver-authentication
- resources:
- - configmaps
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - ""
- resourceNames:
- - antrea-ca
- - antrea-cluster-identity
- resources:
- - configmaps
- verbs:
- - get
- - update
-- apiGroups:
- - ""
- resources:
- - configmaps
- verbs:
- - create
-- apiGroups:
- - apiregistration.k8s.io
- resourceNames:
- - v1alpha1.stats.antrea.io
- - v1beta1.system.antrea.io
- - v1beta2.controlplane.antrea.io
- resources:
- - apiservices
- verbs:
- - get
- - update
-- apiGroups:
- - apiregistration.k8s.io
- resourceNames:
- - v1beta1.networking.antrea.tanzu.vmware.com
- - v1beta1.controlplane.antrea.tanzu.vmware.com
- - v1alpha1.stats.antrea.tanzu.vmware.com
- - v1beta1.system.antrea.tanzu.vmware.com
- - v1beta2.controlplane.antrea.tanzu.vmware.com
- resources:
- - apiservices
- verbs:
- - delete
-- apiGroups:
- - admissionregistration.k8s.io
- resourceNames:
- - labelsmutator.antrea.io
- - crdmutator.antrea.io
- - crdvalidator.antrea.io
- resources:
- - mutatingwebhookconfigurations
- - validatingwebhookconfigurations
- verbs:
- - get
- - update
-- apiGroups:
- - crd.antrea.io
- resources:
- - antreacontrollerinfos
- verbs:
- - get
- - create
- - update
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - antreaagentinfos
- verbs:
- - list
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - clusternetworkpolicies
- - networkpolicies
- verbs:
- - get
- - watch
- - list
- - update
- - patch
- - create
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - clusternetworkpolicies/status
- - networkpolicies/status
- verbs:
- - update
-- apiGroups:
- - crd.antrea.io
- resources:
- - tiers
- verbs:
- - get
- - watch
- - list
- - update
- - patch
- - create
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - traceflows
- - traceflows/status
- verbs:
- - get
- - watch
- - list
- - update
- - patch
- - create
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - externalentities
- - clustergroups
- verbs:
- - get
- - watch
- - list
- - update
- - patch
- - create
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - clustergroups/status
- verbs:
- - update
-- apiGroups:
- - crd.antrea.io
- resources:
- - egresses
- verbs:
- - get
- - watch
- - list
- - update
- - patch
-- apiGroups:
- - crd.antrea.io
- resources:
- - externalippools
- - ippools
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - crd.antrea.io
- resources:
- - externalippools/status
- - ippools/status
- verbs:
- - update
-- apiGroups:
- - apps
- resources:
- - statefulsets
- verbs:
- - get
- - list
- - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- labels:
- app: antrea
- name: antctl
- namespace: kube-system
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: antctl
-subjects:
-- kind: ServiceAccount
- name: antctl
- namespace: kube-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- labels:
- app: antrea
- name: antrea-agent
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: antrea-agent
-subjects:
-- kind: ServiceAccount
- name: antrea-agent
- namespace: kube-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- labels:
- app: antrea
- name: antrea-controller
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: antrea-controller
-subjects:
-- kind: ServiceAccount
- name: antrea-controller
- namespace: kube-system
----
-apiVersion: v1
data:
antrea-agent.conf: |
# FeatureGates is a map of feature names to bools that enable or disable experimental features.
@@ -2771,7 +90,8 @@ data:
# Egress: true
# Enable AntreaIPAM, which can allocate IP addresses from IPPools. AntreaIPAM is required by the
- # bridging mode and allocates IPs to Pods in bridging mode.
+ # bridging mode and allocates IPs to Pods in bridging mode. It is also required to use Antrea for
+ # IPAM when configuring secondary network interfaces with Multus.
# AntreaIPAM: false
# Enable multicast traffic. This feature is supported only with noEncap mode.
@@ -2785,21 +105,23 @@ data:
# Enable managing external IPs of Services of LoadBalancer type.
# ServiceExternalIP: false
+ # Enable mirroring or redirecting the traffic Pods send or receive.
+ # TrafficControl: false
+
# Name of the OpenVSwitch bridge antrea-agent will create and use.
# Make sure it doesn't conflict with your existing OpenVSwitch bridges.
- #ovsBridge: br-int
+ ovsBridge: "br-int"
# Datapath type to use for the OpenVSwitch bridge created by Antrea. Supported values are:
# - system
# - netdev
# 'system' is the default value and corresponds to the kernel datapath. Use 'netdev' to run
- # OVS in userspace mode (not fully supported yet). Userspace mode requires the tun device driver to
- # be available.
+ # OVS in userspace mode. Userspace mode requires the tun device driver to be available.
#ovsDatapathType: system
# Name of the interface antrea-agent will create and use for host <--> pod communication.
# Make sure it doesn't conflict with your existing interfaces.
- #hostGateway: antrea-gw0
+ hostGateway: "antrea-gw0"
# Determines how traffic is encapsulated. It has the following options:
# encap(default): Inter-node Pod traffic is always encapsulated and Pod to external network
@@ -2811,14 +133,14 @@ data:
# networkPolicyOnly: Antrea enforces NetworkPolicy only, and utilizes CNI chaining and delegates Pod
# IPAM and connectivity to the primary CNI.
#
- trafficEncapMode: networkPolicyOnly
+ trafficEncapMode: "networkPolicyOnly"
# Whether or not to SNAT (using the Node IP) the egress traffic from a Pod to the external network.
# This option is for the noEncap traffic mode only, and the default value is false. In the noEncap
# mode, if the cluster's Pod CIDR is reachable from the external network, then the Pod traffic to
# the external network needs not be SNAT'd. In the networkPolicyOnly mode, antrea-agent never
# performs SNAT and this option will be ignored; for other modes it must be set to false.
- #noSNAT: false
+ noSNAT: false
# Tunnel protocols used for encapsulating traffic across Nodes. If WireGuard is enabled in trafficEncryptionMode,
# this option will not take effect. Supported values:
@@ -2827,7 +149,7 @@ data:
# - gre
# - stt
# Note that "gre" is not supported for IPv6 clusters (IPv6-only or dual-stack clusters).
- #tunnelType: geneve
+ tunnelType: "geneve"
# Determines how tunnel traffic is encrypted. Currently encryption only works with encap mode.
# It has the following options:
@@ -2837,44 +159,54 @@ data:
# the PSK value must be passed to Antrea Agent through an environment
# variable: ANTREA_IPSEC_PSK.
# - wireGuard: Enable WireGuard for tunnel traffic encryption.
- #trafficEncryptionMode: none
+ trafficEncryptionMode: "none"
# Enable bridging mode of Pod network on Nodes, in which the Node's transport interface is connected
- # to the OVS bridge, and cross-Node/VLAN traffic from AntreaIPAM Pods (Pods whose IP addresses are
- # allocated by AntreaIPAM from IPPools) is sent to the underlay network via the uplink, and
- # forwarded/routed by the underlay network.
+ # to the OVS bridge, and cross-Node/VLAN traffic of AntreaIPAM Pods (Pods whose IP addresses are
+ # allocated by AntreaIPAM from IPPools) is sent to the underlay network, and forwarded/routed by the
+ # underlay network.
# This option requires the `AntreaIPAM` feature gate to be enabled. At this moment, it supports only
# IPv4 and Linux Nodes, and can be enabled only when `ovsDatapathType` is `system`,
# `trafficEncapMode` is `noEncap`, and `noSNAT` is true.
- #enableBridgingMode: false
+ enableBridgingMode: false
+
+ # Disable TX checksum offloading for container network interfaces. It's supposed to be set to true when the
+ # datapath doesn't support TX checksum offloading, which causes packets to be dropped due to bad checksum.
+ # It affects Pods running on Linux Nodes only.
+ disableTXChecksumOffload: false
# Default MTU to use for the host gateway interface and the network interface of each Pod.
# If omitted, antrea-agent will discover the MTU of the Node's primary interface and
# also adjust MTU to accommodate for tunnel encapsulation overhead (if applicable).
- #defaultMTU: 0
+ defaultMTU: 0
# wireGuard specifies WireGuard related configurations.
wireGuard:
- # The port for WireGuard to receive traffic.
- # port: 51820
+ # The port for WireGuard to receive traffic.
+ port: 51820
egress:
- # exceptCIDRs is the CIDR ranges to which outbound Pod traffic will not be SNAT'd by Egresses.
- # exceptCIDRs: []
+ # exceptCIDRs is the CIDR ranges to which outbound Pod traffic will not be SNAT'd by Egresses.
+ exceptCIDRs:
+
+ # ClusterIP CIDR range for Services. It's required when AntreaProxy is not enabled, and should be
+ # set to the same value as the one specified by --service-cluster-ip-range for kube-apiserver. When
+ # AntreaProxy is enabled, this parameter is not needed and will be ignored if provided.
+ serviceCIDR: ""
# ClusterIP CIDR range for IPv6 Services. It's required when using kube-proxy to provide IPv6 Service in a Dual-Stack
# cluster or an IPv6 only cluster. The value should be the same as the configuration for kube-apiserver specified by
# --service-cluster-ip-range. When AntreaProxy is enabled, this parameter is not needed.
# No default value for this field.
- #serviceCIDRv6:
+ serviceCIDRv6: ""
# The port for the antrea-agent APIServer to serve on.
# Note that if it's set to another value, the `containerPort` of the `api` port of the
# `antrea-agent` container must be set to the same value.
- #apiPort: 10350
+ apiPort: 10350
# Enable metrics exposure via Prometheus. Initializes Prometheus metrics listener.
- #enablePrometheusMetrics: true
+ enablePrometheusMetrics: true
# Provide the IPFIX collector address as a string with format :[][:].
# HOST can either be the DNS name or the IP of the Flow Collector. For example,
@@ -2885,50 +217,50 @@ data:
# If no PROTO is given, we consider "tls" as default. We support "tls", "tcp" and
# "udp" protocols. "tls" is used for securing communication between flow exporter and
# flow aggregator.
- #flowCollectorAddr: "flow-aggregator.flow-aggregator.svc:4739:tls"
+ flowCollectorAddr: "flow-aggregator.flow-aggregator.svc:4739:tls"
# Provide flow poll interval as a duration string. This determines how often the
# flow exporter dumps connections from the conntrack module. Flow poll interval
# should be greater than or equal to 1s (one second).
# Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
- #flowPollInterval: "5s"
+ flowPollInterval: "5s"
# Provide the active flow export timeout, which is the timeout after which a flow
# record is sent to the collector for active flows. Thus, for flows with a continuous
# stream of packets, a flow record will be exported to the collector once the elapsed
# time since the last export event is equal to the value of this timeout.
# Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
- #activeFlowExportTimeout: "30s"
+ activeFlowExportTimeout: "5s"
# Provide the idle flow export timeout, which is the timeout after which a flow
# record is sent to the collector for idle flows. A flow is considered idle if no
# packet matching this flow has been observed since the last export event.
# Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
- #idleFlowExportTimeout: "15s"
+ idleFlowExportTimeout: "15s"
nodePortLocal:
# Enable NodePortLocal, a feature used to make Pods reachable using port forwarding on the host. To
# enable this feature, you need to set "enable" to true, and ensure that the NodePortLocal feature
# gate is also enabled (which is the default).
- # enable: false
+ enable: false
# Provide the port range used by NodePortLocal. When the NodePortLocal feature is enabled, a port
# from that range will be assigned whenever a Pod's container defines a specific port to be exposed
# (each container can define a list of ports as pod.spec.containers[].ports), and all Node traffic
# directed to that port will be forwarded to the Pod.
- # portRange: 61000-62000
+ portRange: "61000-62000"
# Provide the address of Kubernetes apiserver, to override any value provided in kubeconfig or InClusterConfig.
# Defaults to "". It must be a host string, a host:port pair, or a URL to the base of the apiserver.
- #kubeAPIServerOverride: ""
+ kubeAPIServerOverride: ""
# Comma-separated list of Cipher Suites. If omitted, the default Go Cipher Suites will be used.
# https://golang.org/pkg/crypto/tls/#pkg-constants
# Note that TLS1.3 Cipher Suites cannot be added to the list. But the apiserver will always
# prefer TLS1.3 Cipher Suites whenever possible.
- #tlsCipherSuites:
+ tlsCipherSuites: ""
# TLS min version from: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13.
- #tlsMinVersion:
+ tlsMinVersion: ""
# The name of the interface on Node which is used for tunneling or routing the traffic across Nodes.
# If there are multiple IP addresses configured on the interface, the first one is used. The IP
@@ -2937,11 +269,16 @@ data:
# 1. transportInterface
# 2. transportInterfaceCIDRs
# 3. The Node IP
- #transportInterface:
+ transportInterface: ""
+ multicast:
# The names of the interfaces on Nodes that are used to forward multicast traffic.
# Defaults to transport interface if not set.
- #multicastInterfaces: []
+ multicastInterfaces:
+
+ # The interval at which the antrea-agent sends IGMP queries to Pods.
+ # Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
+ igmpQueryInterval: "125s"
# The network CIDRs of the interface on Node which is used for tunneling or routing the traffic across
# Nodes. If there are multiple interfaces configured the same network CIDR, the first one is used. The
@@ -2950,7 +287,7 @@ data:
# 1. transportInterface
# 2. transportInterfaceCIDRs
# 3. The Node IP
- #transportInterfaceCIDRs: [,]
+ transportInterfaceCIDRs:
# Option antreaProxy contains AntreaProxy related configuration options.
antreaProxy:
@@ -2959,22 +296,22 @@ data:
# feature to be enabled.
# Note that this option is experimental. If kube-proxy is removed, option kubeAPIServerOverride must be used to access
# apiserver directly.
- #proxyAll: false
+ proxyAll: false
# A string array of values which specifies the host IPv4/IPv6 addresses for NodePort. Values can be valid IP blocks.
# (e.g. 1.2.3.0/24, 1.2.3.4/32). An empty string slice is meant to select all host IPv4/IPv6 addresses.
# Note that the option is only valid when proxyAll is true.
- #nodePortAddresses: []
+ nodePortAddresses:
# An array of string values to specify a list of Services which should be ignored by AntreaProxy (traffic to these
# Services will not be load-balanced). Values can be a valid ClusterIP (e.g. 10.11.1.2) or a Service name
# with Namespace (e.g. kube-system/kube-dns)
- #skipServices: []
+ skipServices:
# When ProxyLoadBalancerIPs is set to false, AntreaProxy no longer load-balances traffic destined to the
# External IPs of LoadBalancer Services. This is useful when the external LoadBalancer provides additional
# capabilities (e.g. TLS termination) and it is desirable for Pod-to-ExternalIP traffic to be sent to the
# external LoadBalancer instead of being load-balanced to an Endpoint directly by AntreaProxy.
# Note that setting ProxyLoadBalancerIPs to false usually only makes sense when ProxyAll is set to true and
# kube-proxy is removed from the cluser, otherwise kube-proxy will still load-balance this traffic.
- #proxyLoadBalancerIPs: true
+ proxyLoadBalancerIPs: true
antrea-cni.conflist: |
{
"cniVersion":"0.3.0",
@@ -2985,11 +322,13 @@ data:
"ipam": {
"type": "host-local"
}
- },
+ }
+ ,
{
"type": "portmap",
"capabilities": {"portMappings": true}
- },
+ }
+ ,
{
"type": "bandwidth",
"capabilities": {"bandwidth": true}
@@ -3016,8 +355,9 @@ data:
# Run Kubernetes NodeIPAMController with Antrea.
# NodeIPAM: false
- # Enable flexible IPAM mode for Antrea. This mode allows to assign IP Ranges to Namespaces,
- # Deployments and StatefulSets via IP Pool annotation.
+ # Enable AntreaIPAM, which can allocate IP addresses from IPPools. AntreaIPAM is required by the
+ # bridging mode and allocates IPs to Pods in bridging mode. It is also required to use Antrea for
+ # IPAM when configuring secondary network interfaces with Multus.
# AntreaIPAM: false
# Enable managing external IPs of Services of LoadBalancer type.
@@ -3026,659 +366,3674 @@ data:
# The port for the antrea-controller APIServer to serve on.
# Note that if it's set to another value, the `containerPort` of the `api` port of the
# `antrea-controller` container must be set to the same value.
- #apiPort: 10349
+ apiPort: 10349
# Enable metrics exposure via Prometheus. Initializes Prometheus metrics listener.
- #enablePrometheusMetrics: true
+ enablePrometheusMetrics: true
# Indicates whether to use auto-generated self-signed TLS certificate.
- # If false, A Secret named "antrea-controller-tls" must be provided with the following keys:
+ # If false, a Secret named "antrea-controller-tls" must be provided with the following keys:
# ca.crt:
# tls.crt:
# tls.key:
- # And the Secret must be mounted to directory "/var/run/antrea/antrea-controller-tls" of the
- # antrea-controller container.
- #selfSignedCert: true
+ selfSignedCert: true
# Comma-separated list of Cipher Suites. If omitted, the default Go Cipher Suites will be used.
# https://golang.org/pkg/crypto/tls/#pkg-constants
# Note that TLS1.3 Cipher Suites cannot be added to the list. But the apiserver will always
# prefer TLS1.3 Cipher Suites whenever possible.
- #tlsCipherSuites:
+ tlsCipherSuites: ""
# TLS min version from: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13.
- #tlsMinVersion:
+ tlsMinVersion: ""
nodeIPAM:
- # Enable the integrated Node IPAM controller within the Antrea controller.
- # enableNodeIPAM: false
-
- # CIDR ranges for Pods in cluster. String array containing single CIDR range, or multiple ranges.
- # The CIDRs could be either IPv4 or IPv6. At most one CIDR may be specified for each IP family.
- # Value ignored when enableNodeIPAM is false.
- # clusterCIDRs: []
-
- # CIDR ranges for Services in cluster. It is not necessary to specify it when there is no overlap with clusterCIDRs.
- # Value ignored when enableNodeIPAM is false.
- # serviceCIDR:
- # serviceCIDRv6:
-
- # Mask size for IPv4 Node CIDR in IPv4 or dual-stack cluster. Value ignored when enableNodeIPAM is false
- # or when IPv4 Pod CIDR is not configured. Valid range is 16 to 30.
- # nodeCIDRMaskSizeIPv4: 24
-
- # Mask size for IPv6 Node CIDR in IPv6 or dual-stack cluster. Value ignored when enableNodeIPAM is false
- # or when IPv6 Pod CIDR is not configured. Valid range is 64 to 126.
- # nodeCIDRMaskSizeIPv6: 64
-kind: ConfigMap
+ # Enable the integrated Node IPAM controller within the Antrea controller.
+ enableNodeIPAM: false
+ # CIDR ranges for Pods in cluster. String array containing single CIDR range, or multiple ranges.
+ # The CIDRs could be either IPv4 or IPv6. At most one CIDR may be specified for each IP family.
+ # Value ignored when enableNodeIPAM is false.
+ clusterCIDRs:
+ # CIDR ranges for Services in cluster. It is not necessary to specify it when there is no overlap with clusterCIDRs.
+ # Value ignored when enableNodeIPAM is false.
+ serviceCIDR: ""
+ serviceCIDRv6: ""
+ # Mask size for IPv4 Node CIDR in IPv4 or dual-stack cluster. Value ignored when enableNodeIPAM is false
+ # or when IPv4 Pod CIDR is not configured. Valid range is 16 to 30.
+ nodeCIDRMaskSizeIPv4: 24
+ # Mask size for IPv6 Node CIDR in IPv6 or dual-stack cluster. Value ignored when enableNodeIPAM is false
+ # or when IPv6 Pod CIDR is not configured. Valid range is 64 to 126.
+ nodeCIDRMaskSizeIPv6: 64
+---
+# Source: antrea/templates/crds/antreaagentinfo.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: antreaagentinfos.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1beta1
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ additionalPrinterColumns:
+ - description: Health status of this Agent
+ jsonPath: ".agentConditions[?(@.type=='AgentHealthy')].status"
+ name: Healthy
+ type: string
+ - description: Last time the Healthy Condition was updated
+ jsonPath: ".agentConditions[?(@.type=='AgentHealthy')].lastHeartbeatTime"
+ name: Last Heartbeat
+ type: date
+ - description: Version of this Agent
+ jsonPath: ".version"
+ name: Version
+ type: string
+ priority: 1
+ - description: Node on which this Agent is running
+ jsonPath: ".nodeRef.name"
+ name: Node
+ type: string
+ priority: 1
+ - description: Number of local Pods managed by this Agent
+ jsonPath: ".localPodNum"
+ name: Num Pods
+ type: integer
+ priority: 2
+ - description: Subnets used by this Agent for Pod IPAM
+ jsonPath: ".nodeSubnets"
+ name: Subnets
+ type: string
+ priority: 2
+ scope: Cluster
+ names:
+ plural: antreaagentinfos
+ singular: antreaagentinfo
+ kind: AntreaAgentInfo
+ shortNames:
+ - aai
+---
+# Source: antrea/templates/crds/antreacontrollerinfo.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: antreacontrollerinfos.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1beta1
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ additionalPrinterColumns:
+ - description: Health status of the Controller
+ jsonPath: ".controllerConditions[?(@.type=='ControllerHealthy')].status"
+ name: Healthy
+ type: string
+ - description: Last time the Healthy Condition was updated
+ jsonPath: ".controllerConditions[?(@.type=='ControllerHealthy')].lastHeartbeatTime"
+ name: Last Heartbeat
+ type: date
+ - description: Version of the Controller
+ jsonPath: ".version"
+ name: Version
+ type: string
+ priority: 1
+ - description: Number of Agents connected to the Controller
+ jsonPath: ".connectedAgentNum"
+ name: Connected Agents
+ type: integer
+ priority: 1
+ - description: Node on which the Controller is running
+ jsonPath: ".nodeRef.name"
+ name: Node
+ type: string
+ priority: 1
+ - description: Number of Network Policies computed by Controller
+ jsonPath: ".networkPolicyControllerInfo.networkPolicyNum"
+ name: Num Network Policies
+ type: integer
+ priority: 2
+ scope: Cluster
+ names:
+ plural: antreacontrollerinfos
+ singular: antreacontrollerinfo
+ kind: AntreaControllerInfo
+ shortNames:
+ - aci
+---
+# Source: antrea/templates/crds/clustergroup.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: clustergroups.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: false
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ properties:
+ childGroups:
+ type: array
+ items:
+ type: string
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ externalEntitySelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ ipBlocks:
+ type: array
+ items:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ serviceReference:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ status:
+ type: object
+ properties:
+ conditions:
+ type: array
+ items:
+ type: object
+ properties:
+ type:
+ type: string
+ status:
+ type: string
+ lastTransitionTime:
+ type: string
+ - name: v1alpha3
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ properties:
+ childGroups:
+ type: array
+ items:
+ type: string
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ externalEntitySelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ipBlocks:
+ type: array
+ items:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ serviceReference:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ status:
+ type: object
+ properties:
+ conditions:
+ type: array
+ items:
+ type: object
+ properties:
+ type:
+ type: string
+ status:
+ type: string
+ lastTransitionTime:
+ type: string
+ subresources:
+ status: {}
+ conversion:
+ strategy: Webhook
+ webhook:
+ conversionReviewVersions: ["v1", "v1beta1"]
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: "kube-system"
+ path: "/convert/clustergroup"
+ scope: Cluster
+ names:
+ plural: clustergroups
+ singular: clustergroup
+ kind: ClusterGroup
+ shortNames:
+ - cg
+---
+# Source: antrea/templates/crds/clusternetworkpolicy.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: clusternetworkpolicies.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha1
+ served: true
+ storage: true
+ additionalPrinterColumns:
+ - name: Tier
+ type: string
+ description: The Tier to which this ClusterNetworkPolicy belongs to.
+ jsonPath: .spec.tier
+ - name: Priority
+ type: number
+ format: float
+ description: The Priority of this ClusterNetworkPolicy relative to other policies.
+ jsonPath: .spec.priority
+ - name: Desired Nodes
+ type: number
+ format: int32
+ description: The total number of Nodes that should realize the NetworkPolicy.
+ jsonPath: .status.desiredNodesRealized
+ - name: Current Nodes
+ type: number
+ format: int32
+ description: The number of Nodes that have realized the NetworkPolicy.
+ jsonPath: .status.currentNodesRealized
+ - name: Age
+ type: date
+ jsonPath: .metadata.creationTimestamp
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ # Ensure that Spec.Priority field is set
+ required:
+ - priority
+ type: object
+ properties:
+ tier:
+ type: string
+ priority:
+ type: number
+ format: float
+ # Ensure that Spec.Priority field is between 1 and 10000
+ minimum: 1.0
+ maximum: 10000.0
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that Spec.AppliedTo does not allow IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ group:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ ingress:
+ type: array
+ items:
+ type: object
+ required:
+ - action
+ properties:
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that rule AppliedTo does not allow IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ group:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ # Ensure that Action field allows only ALLOW, DROP, REJECT and PASS values
+ action:
+ type: string
+ enum: ['Allow', 'Drop', 'Reject', 'Pass']
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ endPort:
+ type: integer
+ protocols:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required: [icmp]
+ properties:
+ icmp:
+ type: object
+ properties:
+ icmpType:
+ type: integer
+ minimum: 0
+ maximum: 255
+ icmpCode:
+ type: integer
+ minimum: 0
+ maximum: 255
+ from:
+ type: array
+ items:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaces:
+ type: object
+ properties:
+ match:
+ enum:
+ - Self
+ type: string
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ group:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ name:
+ type: string
+ enableLogging:
+ type: boolean
+ egress:
+ type: array
+ items:
+ type: object
+ required:
+ - action
+ properties:
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that rule AppliedTo does not allow IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ group:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ # Ensure that Action field allows only ALLOW, DROP, REJECT and PASS values
+ action:
+ type: string
+ enum: ['Allow', 'Drop', 'Reject', 'Pass']
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ endPort:
+ type: integer
+ protocols:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required: [icmp]
+ properties:
+ icmp:
+ type: object
+ properties:
+ icmpType:
+ type: integer
+ minimum: 0
+ maximum: 255
+ icmpCode:
+ type: integer
+ minimum: 0
+ maximum: 255
+ to:
+ type: array
+ items:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaces:
+ type: object
+ properties:
+ match:
+ enum:
+ - Self
+ type: string
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ group:
+ type: string
+ fqdn:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ toServices:
+ type: array
+ items:
+ type: object
+ required:
+ - name
+ - namespace
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ name:
+ type: string
+ enableLogging:
+ type: boolean
+ status:
+ type: object
+ properties:
+ phase:
+ type: string
+ observedGeneration:
+ type: integer
+ currentNodesRealized:
+ type: integer
+ desiredNodesRealized:
+ type: integer
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: clusternetworkpolicies
+ singular: clusternetworkpolicy
+ kind: ClusterNetworkPolicy
+ shortNames:
+ - acnp
+---
+# Source: antrea/templates/crds/egress.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: egresses.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ type: object
+ required:
+ - appliedTo
+ anyOf:
+ - required:
+ - egressIP
+ - required:
+ - externalIPPool
+ properties:
+ appliedTo:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ egressIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ externalIPPool:
+ type: string
+ status:
+ type: object
+ properties:
+ egressNode:
+ type: string
+ additionalPrinterColumns:
+ - description: Specifies the SNAT IP address for the selected workloads.
+ jsonPath: .spec.egressIP
+ name: EgressIP
+ type: string
+ - jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ - description: The Owner Node of egress IP
+ jsonPath: .status.egressNode
+ name: Node
+ type: string
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: egresses
+ singular: egress
+ kind: Egress
+ shortNames:
+ - eg
+---
+# Source: antrea/templates/crds/externalentity.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: externalentities.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ properties:
+ endpoints:
+ type: array
+ items:
+ type: object
+ properties:
+ ip:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ name:
+ type: string
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ name:
+ type: string
+ externalNode:
+ type: string
+ - name: v1alpha1
+ served: false
+ storage: false
+ schema:
+ openAPIV3Schema:
+ type: object
+ scope: Namespaced
+ names:
+ plural: externalentities
+ singular: externalentity
+ kind: ExternalEntity
+ shortNames:
+ - ee
+---
+# Source: antrea/templates/crds/externalippool.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: externalippools.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ type: object
+ required:
+ - ipRanges
+ - nodeSelector
+ properties:
+ ipRanges:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required:
+ - cidr
+ - required:
+ - start
+ - end
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ start:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ end:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ status:
+ type: object
+ properties:
+ usage:
+ type: object
+ properties:
+ total:
+ type: integer
+ used:
+ type: integer
+ additionalPrinterColumns:
+ - description: The number of total IPs
+ jsonPath: .status.usage.total
+ name: Total
+ type: integer
+ - description: The number of allocated IPs
+ jsonPath: .status.usage.used
+ name: Used
+ type: integer
+ - jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: externalippools
+ singular: externalippool
+ kind: ExternalIPPool
+ shortNames:
+ - eip
+---
+# Source: antrea/templates/crds/ippool.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: ippools.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ required:
+ - ipVersion
+ - ipRanges
+ type: object
+ properties:
+ ipVersion:
+ type: integer
+ ipRanges:
+ items:
+ oneOf:
+ - required:
+ - cidr
+ - gateway
+ - prefixLength
+ - required:
+ - start
+ - end
+ - gateway
+ - prefixLength
+ properties:
+ cidr:
+ format: cidr
+ type: string
+ start:
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ type: string
+ end:
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ type: string
+ gateway:
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ type: string
+ prefixLength:
+ type: integer
+ vlan:
+ type: integer
+ minimum: 0
+ maximum: 4094
+ type: object
+ type: array
+ status:
+ properties:
+ ipAddresses:
+ items:
+ properties:
+ ipAddress:
+ type: string
+ owner:
+ properties:
+ pod:
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ containerID:
+ type: string
+ ifName:
+ type: string
+ type: object
+ statefulSet:
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ index:
+ type: integer
+ type: object
+ type: object
+ phase:
+ type: string
+ type: object
+ type: array
+ type: object
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: ippools
+ singular: ippool
+ kind: IPPool
+ shortNames:
+ - ipp
+---
+# Source: antrea/templates/crds/networkpolicy.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: networkpolicies.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha1
+ served: true
+ storage: true
+ additionalPrinterColumns:
+ - name: Tier
+ type: string
+ description: The Tier to which this Antrea NetworkPolicy belongs to.
+ jsonPath: .spec.tier
+ - name: Priority
+ type: number
+ format: float
+ description: The Priority of this Antrea NetworkPolicy relative to other policies.
+ jsonPath: .spec.priority
+ - name: Desired Nodes
+ type: number
+ format: int32
+ description: The total number of Nodes that should realize the NetworkPolicy.
+ jsonPath: .status.desiredNodesRealized
+ - name: Current Nodes
+ type: number
+ format: int32
+ description: The number of Nodes that have realized the NetworkPolicy.
+ jsonPath: .status.currentNodesRealized
+ - name: Age
+ type: date
+ jsonPath: .metadata.creationTimestamp
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ # Ensure that Spec.Priority field is set
+ required:
+ - priority
+ type: object
+ properties:
+ tier:
+ type: string
+ priority:
+ type: number
+ format: float
+ # Ensure that Spec.Priority field is between 1 and 10000
+ minimum: 1.0
+ maximum: 10000.0
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that Spec.AppliedTo does not allow NamespaceSelector/IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ingress:
+ type: array
+ items:
+ type: object
+ required:
+ - action
+ properties:
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that rule AppliedTo does not allow NamespaceSelector/IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ # Ensure that Action field allows only ALLOW, DROP, REJECT and PASS values
+ action:
+ type: string
+ enum: ['Allow', 'Drop', 'Reject', 'Pass']
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ endPort:
+ type: integer
+ protocols:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required: [icmp]
+ properties:
+ icmp:
+ type: object
+ properties:
+ icmpType:
+ type: integer
+ minimum: 0
+ maximum: 255
+ icmpCode:
+ type: integer
+ minimum: 0
+ maximum: 255
+ from:
+ type: array
+ items:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ externalEntitySelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ name:
+ type: string
+ enableLogging:
+ type: boolean
+ egress:
+ type: array
+ items:
+ type: object
+ required:
+ - action
+ properties:
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that rule AppliedTo does not allow NamespaceSelector/IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ # Ensure that Action field allows only ALLOW, DROP, REJECT and PASS values
+ action:
+ type: string
+ enum: ['Allow', 'Drop', 'Reject', 'Pass']
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ endPort:
+ type: integer
+ protocols:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required: [icmp]
+ properties:
+ icmp:
+ type: object
+ properties:
+ icmpType:
+ type: integer
+ minimum: 0
+ maximum: 255
+ icmpCode:
+ type: integer
+ minimum: 0
+ maximum: 255
+ to:
+ type: array
+ items:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ externalEntitySelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ fqdn:
+ type: string
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ toServices:
+ type: array
+ items:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ name:
+ type: string
+ enableLogging:
+ type: boolean
+ status:
+ type: object
+ properties:
+ phase:
+ type: string
+ observedGeneration:
+ type: integer
+ currentNodesRealized:
+ type: integer
+ desiredNodesRealized:
+ type: integer
+ subresources:
+ status: {}
+ scope: Namespaced
+ names:
+ plural: networkpolicies
+ singular: networkpolicy
+ kind: NetworkPolicy
+ shortNames:
+ - anp
+---
+# Source: antrea/templates/crds/tier.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: tiers.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha1
+ served: true
+ storage: true
+ additionalPrinterColumns:
+ - name: Priority
+ type: integer
+ description: The Priority of this Tier relative to other Tiers.
+ jsonPath: .spec.priority
+ - name: Age
+ type: date
+ jsonPath: .metadata.creationTimestamp
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ required:
+ - priority
+ type: object
+ properties:
+ priority:
+ type: integer
+ minimum: 0
+ maximum: 255
+ description:
+ type: string
+ scope: Cluster
+ names:
+ plural: tiers
+ singular: tier
+ kind: Tier
+ shortNames:
+ - tr
+---
+# Source: antrea/templates/crds/traceflow.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: traceflows.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha1
+ served: true
+ storage: true
+ additionalPrinterColumns:
+ - jsonPath: .status.phase
+ description: The phase of the Traceflow.
+ name: Phase
+ type: string
+ - jsonPath: .spec.source.pod
+ description: The name of the source Pod.
+ name: Source-Pod
+ type: string
+ priority: 10
+ - jsonPath: .spec.destination.pod
+ description: The name of the destination Pod.
+ name: Destination-Pod
+ type: string
+ priority: 10
+ - jsonPath: .spec.destination.ip
+ description: The IP address of the destination.
+ name: Destination-IP
+ type: string
+ priority: 10
+ - jsonPath: .spec.liveTraffic
+ description: Trace live traffic.
+ name: Live-Traffic
+ type: boolean
+ priority: 10
+ - jsonPath: .spec.droppedOnly
+ description: Capture only the dropped packet.
+ name: Dropped-Only
+ type: boolean
+ priority: 10
+ - jsonPath: .spec.timeout
+ description: Timeout in seconds.
+ name: Timeout
+ type: integer
+ priority: 10
+ - jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ type: object
+ properties:
+ source:
+ type: object
+ properties:
+ pod:
+ type: string
+ namespace:
+ type: string
+ ip:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ destination:
+ type: object
+ properties:
+ pod:
+ type: string
+ service:
+ type: string
+ namespace:
+ type: string
+ ip:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ packet:
+ type: object
+ properties:
+ ipHeader:
+ type: object
+ properties:
+ srcIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ protocol:
+ type: integer
+ ttl:
+ type: integer
+ flags:
+ type: integer
+ ipv6Header:
+ type: object
+ properties:
+ srcIP:
+ type: string
+ format: ipv6
+ nextHeader:
+ type: integer
+ hopLimit:
+ type: integer
+ transportHeader:
+ type: object
+ properties:
+ icmp:
+ type: object
+ properties:
+ id:
+ type: integer
+ sequence:
+ type: integer
+ udp:
+ type: object
+ properties:
+ srcPort:
+ type: integer
+ dstPort:
+ type: integer
+ tcp:
+ type: object
+ properties:
+ srcPort:
+ type: integer
+ dstPort:
+ type: integer
+ flags:
+ type: integer
+ liveTraffic:
+ type: boolean
+ droppedOnly:
+ type: boolean
+ timeout:
+ type: integer
+ status:
+ type: object
+ properties:
+ reason:
+ type: string
+ dataplaneTag:
+ type: integer
+ phase:
+ type: string
+ startTime:
+ type: string
+ results:
+ type: array
+ items:
+ type: object
+ properties:
+ node:
+ type: string
+ role:
+ type: string
+ timestamp:
+ type: integer
+ observations:
+ type: array
+ items:
+ type: object
+ properties:
+ component:
+ type: string
+ componentInfo:
+ type: string
+ action:
+ type: string
+ pod:
+ type: string
+ dstMAC:
+ type: string
+ networkPolicy:
+ type: string
+ ttl:
+ type: integer
+ translatedSrcIP:
+ type: string
+ translatedDstIP:
+ type: string
+ tunnelDstIP:
+ type: string
+ capturedPacket:
+ properties:
+ srcIP:
+ type: string
+ dstIP:
+ type: string
+ length:
+ type: integer
+ ipHeader:
+ properties:
+ flags:
+ type: integer
+ protocol:
+ type: integer
+ ttl:
+ type: integer
+ type: object
+ ipv6Header:
+ properties:
+ hopLimit:
+ type: integer
+ nextHeader:
+ type: integer
+ type: object
+ transportHeader:
+ properties:
+ tcp:
+ properties:
+ dstPort:
+ type: integer
+ srcPort:
+ type: integer
+ flags:
+ type: integer
+ type: object
+ udp:
+ properties:
+ dstPort:
+ type: integer
+ srcPort:
+ type: integer
+ type: object
+ icmp:
+ properties:
+ id:
+ type: integer
+ sequence:
+ type: integer
+ type: object
+ type: object
+ type: object
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: traceflows
+ singular: traceflow
+ kind: Traceflow
+ shortNames:
+ - tf
+---
+# Source: antrea/templates/crds/trafficcontrol.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: trafficcontrols.crd.antrea.io
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ type: object
+ required:
+ - appliedTo
+ - direction
+ - action
+ - targetPort
+ properties:
+ appliedTo:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ direction:
+ type: string
+ enum:
+ - Ingress
+ - Egress
+ - Both
+ action:
+ type: string
+ enum:
+ - Mirror
+ - Redirect
+ targetPort:
+ type: object
+ oneOf:
+ - required: [ovsInternal]
+ - required: [device]
+ - required: [geneve]
+ - required: [vxlan]
+ - required: [gre]
+ - required: [erspan]
+ properties:
+ ovsInternal:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ device:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ geneve:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ vni:
+ type: integer
+ minimum: 0
+ maximum: 16777215
+ destinationPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ vxlan:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ vni:
+ type: integer
+ minimum: 0
+ maximum: 16777215
+ destinationPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ gre:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ key:
+ type: integer
+ minimum: 0
+ maximum: 4294967295
+ erspan:
+ type: object
+ required:
+ - remoteIP
+ - version
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ sessionID:
+ type: integer
+ minimum: 0
+ maximum: 1023
+ version:
+ type: integer
+ enum:
+ - 1
+ - 2
+ index:
+ type: integer
+ dir:
+ type: integer
+ enum:
+ - 0
+ - 1
+ hardwareID:
+ type: integer
+ returnPort:
+ type: object
+ oneOf:
+ - required: [ovsInternal]
+ - required: [device]
+ - required: [geneve]
+ - required: [vxlan]
+ - required: [gre]
+ properties:
+ ovsInternal:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ device:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ geneve:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ vni:
+ type: integer
+ minimum: 0
+ maximum: 16777215
+ destinationPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ vxlan:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ vni:
+ type: integer
+ minimum: 0
+ maximum: 16777215
+ destinationPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ gre:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ key:
+ type: integer
+ minimum: 0
+ maximum: 4294967295
+ additionalPrinterColumns:
+ - description: Specifies the direction of traffic that should be matched.
+ jsonPath: .spec.direction
+ name: Direction
+ type: string
+ - description: Specifies the action that should be taken for the traffic.
+ jsonPath: .spec.action
+ name: Action
+ type: string
+ - jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: trafficcontrols
+ singular: trafficcontrol
+ kind: TrafficControl
+ shortNames:
+ - tc
+---
+# Source: antrea/templates/agent/clusterrole.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antrea-agent
+ labels:
+ app: antrea
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - ""
+ resources:
+ - nodes/status
+ verbs:
+ - patch
+ - apiGroups:
+ - ""
+ resources:
+ - pods
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - ""
+ resources:
+ - pods/status
+ verbs:
+ - patch
+ - apiGroups:
+ - ""
+ resources:
+ - endpoints
+ - services
+ - namespaces
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - discovery.k8s.io
+ resources:
+ - endpointslices
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - antreaagentinfos
+ verbs:
+ - get
+ - create
+ - update
+ - delete
+ - apiGroups:
+ - controlplane.antrea.io
+ resources:
+ - networkpolicies
+ - appliedtogroups
+ - addressgroups
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - controlplane.antrea.io
+ resources:
+ - egressgroups
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - controlplane.antrea.io
+ resources:
+ - nodestatssummaries
+ verbs:
+ - create
+ - apiGroups:
+ - controlplane.antrea.io
+ resources:
+ - networkpolicies/status
+ verbs:
+ - create
+ - get
+ - apiGroups:
+ - authentication.k8s.io
+ resources:
+ - tokenreviews
+ verbs:
+ - create
+ - apiGroups:
+ - authorization.k8s.io
+ resources:
+ - subjectaccessreviews
+ verbs:
+ - create
+ # This is the content of built-in role kube-system/extension-apiserver-authentication-reader.
+ # But it doesn't have list/watch permission before K8s v1.17.0 so the extension apiserver (antrea-agent) will
+ # have permission issue after bumping up apiserver library to a version that supports dynamic authentication.
+ # See https://github.com/kubernetes/kubernetes/pull/85375
+ # To support K8s clusters older than v1.17.0, we grant the required permissions directly instead of relying on
+ # the extension-apiserver-authentication role.
+ - apiGroups:
+ - ""
+ resourceNames:
+ - extension-apiserver-authentication
+ resources:
+ - configmaps
+ verbs:
+ - get
+ - list
+ - watch
+ - apiGroups:
+ - ""
+ resources:
+ - configmaps
+ resourceNames:
+ - antrea-ca
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - traceflows
+ - traceflows/status
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - create
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - egresses
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - egresses/status
+ verbs:
+ - update
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - externalippools
+ - ippools
+ - trafficcontrols
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - ippools/status
+ verbs:
+ - update
+ - apiGroups:
+ - k8s.cni.cncf.io
+ resources:
+ - network-attachment-definitions
+ verbs:
+ - get
+ - list
+ - watch
+---
+# Source: antrea/templates/antctl/clusterrole.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antctl
+ labels:
+ app: antrea
+rules:
+ - apiGroups:
+ - controlplane.antrea.io
+ resources:
+ - networkpolicies
+ - appliedtogroups
+ - addressgroups
+ verbs:
+ - get
+ - list
+ - apiGroups:
+ - stats.antrea.io
+ resources:
+ - networkpolicystats
+ - antreaclusternetworkpolicystats
+ - antreanetworkpolicystats
+ verbs:
+ - get
+ - list
+ - apiGroups:
+ - system.antrea.io
+ resources:
+ - controllerinfos
+ - agentinfos
+ verbs:
+ - get
+ - apiGroups:
+ - system.antrea.io
+ resources:
+ - supportbundles
+ verbs:
+ - get
+ - post
+ - apiGroups:
+ - system.antrea.io
+ resources:
+ - supportbundles/download
+ verbs:
+ - get
+ - nonResourceURLs:
+ - /agentinfo
+ - /addressgroups
+ - /appliedtogroups
+ - /loglevel
+ - /networkpolicies
+ - /ovsflows
+ - /ovstracing
+ - /podinterfaces
+ - /featuregates
+ - /serviceexternalip
+ verbs:
+ - get
+---
+# Source: antrea/templates/cluster-identity-reader/clusterrolebinding.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antrea-cluster-identity-reader
+ labels:
+ app: antrea
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - configmaps
+ resourceNames:
+ - antrea-cluster-identity
+ verbs:
+ - get
+---
+# Source: antrea/templates/controller/clusterrole.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antrea-controller
+ labels:
+ app: antrea
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - pods
+ - services
+ - namespaces
+ - configmaps
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ verbs:
+ - get
+ - watch
+ - list
+ - patch
+ - apiGroups:
+ - ""
+ resources:
+ - services/status
+ verbs:
+ - update
+ - apiGroups:
+ - networking.k8s.io
+ resources:
+ - networkpolicies
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - authentication.k8s.io
+ resources:
+ - tokenreviews
+ verbs:
+ - create
+ - apiGroups:
+ - authorization.k8s.io
+ resources:
+ - subjectaccessreviews
+ verbs:
+ - create
+ - apiGroups:
+ - apiextensions.k8s.io
+ resources:
+ - customresourcedefinitions
+ verbs:
+ - get
+ - update
+ # This is the content of built-in role kube-system/extension-apiserver-authentication-reader.
+ # But it doesn't have list/watch permission before K8s v1.17.0 so the extension apiserver (antrea-controller) will
+ # have permission issue after bumping up apiserver library to a version that supports dynamic authentication.
+ # See https://github.com/kubernetes/kubernetes/pull/85375
+ # To support K8s clusters older than v1.17.0, we grant the required permissions directly instead of relying on
+ # the extension-apiserver-authentication role.
+ - apiGroups:
+ - ""
+ resourceNames:
+ - extension-apiserver-authentication
+ resources:
+ - configmaps
+ verbs:
+ - get
+ - list
+ - watch
+ - apiGroups:
+ - ""
+ resources:
+ - configmaps
+ resourceNames:
+ - antrea-ca
+ - antrea-cluster-identity
+ verbs:
+ - get
+ - update
+ - apiGroups:
+ - ""
+ resources:
+ - configmaps
+ verbs:
+ - create
+ - apiGroups:
+ - apiregistration.k8s.io
+ resources:
+ - apiservices
+ resourceNames:
+ - v1alpha1.stats.antrea.io
+ - v1beta1.system.antrea.io
+ - v1beta2.controlplane.antrea.io
+ verbs:
+ - get
+ - update
+ - apiGroups:
+ - apiregistration.k8s.io
+ resources:
+ - apiservices
+ resourceNames:
+ - v1beta1.networking.antrea.tanzu.vmware.com
+ - v1beta1.controlplane.antrea.tanzu.vmware.com
+ - v1alpha1.stats.antrea.tanzu.vmware.com
+ - v1beta1.system.antrea.tanzu.vmware.com
+ - v1beta2.controlplane.antrea.tanzu.vmware.com
+ verbs:
+ - delete
+ - apiGroups:
+ - admissionregistration.k8s.io
+ resources:
+ - mutatingwebhookconfigurations
+ - validatingwebhookconfigurations
+ resourceNames:
+ # always give permissions for labelsmutator.antrea.io, even when the
+ # feature is disabled, to avoid errors in antrea-controller when updating
+ # the CA cert.
+ - labelsmutator.antrea.io
+ - crdmutator.antrea.io
+ - crdvalidator.antrea.io
+ verbs:
+ - get
+ - update
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - antreacontrollerinfos
+ verbs:
+ - get
+ - create
+ - update
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - antreaagentinfos
+ verbs:
+ - list
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - clusternetworkpolicies
+ - networkpolicies
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - create
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - clusternetworkpolicies/status
+ - networkpolicies/status
+ verbs:
+ - update
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - tiers
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - create
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - traceflows
+ - traceflows/status
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - create
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - externalentities
+ - clustergroups
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - create
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - clustergroups/status
+ verbs:
+ - update
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - egresses
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - externalippools
+ - ippools
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - externalippools/status
+ - ippools/status
+ verbs:
+ - update
+ - apiGroups:
+ - apps
+ resources:
+ - statefulsets
+ verbs:
+ - get
+ - list
+ - watch
+---
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
metadata:
+ name: aggregate-antrea-policies-edit
labels:
app: antrea
- name: antrea-config-82h2mk24gg
- namespace: kube-system
+ # Add these permissions to the "admin" and "edit" default roles.
+ rbac.authorization.k8s.io/aggregate-to-admin: "true"
+ rbac.authorization.k8s.io/aggregate-to-edit: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["clusternetworkpolicies", "networkpolicies"]
+ verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
---
-apiVersion: v1
-kind: Service
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: aggregate-antrea-policies-view
+ labels:
+ app: antrea
+ # Add these permissions to the "view" default role.
+ rbac.authorization.k8s.io/aggregate-to-view: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["clusternetworkpolicies", "networkpolicies"]
+ verbs: ["get", "list", "watch"]
+---
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: aggregate-traceflows-edit
+ labels:
+ app: antrea
+ # Add these permissions to the "admin" and "edit" default roles.
+ rbac.authorization.k8s.io/aggregate-to-admin: "true"
+ rbac.authorization.k8s.io/aggregate-to-edit: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["traceflows"]
+ verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
+---
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: aggregate-traceflows-view
+ labels:
+ app: antrea
+ # Add these permissions to the "view" default role.
+ rbac.authorization.k8s.io/aggregate-to-view: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["traceflows"]
+ verbs: ["get", "list", "watch"]
+---
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: aggregate-antrea-clustergroups-edit
+ labels:
+ app: antrea
+ # Add these permissions to the "admin" and "edit" default roles.
+ rbac.authorization.k8s.io/aggregate-to-admin: "true"
+ rbac.authorization.k8s.io/aggregate-to-edit: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["clustergroups"]
+ verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
+---
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: aggregate-antrea-clustergroups-view
+ labels:
+ app: antrea
+ # Add these permissions to the "view" default role.
+ rbac.authorization.k8s.io/aggregate-to-view: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["clustergroups"]
+ verbs: ["get", "list", "watch"]
+---
+# Source: antrea/templates/agent/clusterrolebinding.yaml
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antrea-agent
+ labels:
+ app: antrea
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: antrea-agent
+subjects:
+ - kind: ServiceAccount
+ name: antrea-agent
+ namespace: kube-system
+---
+# Source: antrea/templates/antctl/clusterrolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ labels:
+ app: antrea
+ name: antctl
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: antctl
+subjects:
+ - kind: ServiceAccount
+ name: antctl
+ namespace: kube-system
+---
+# Source: antrea/templates/controller/clusterrolebinding.yaml
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
metadata:
+ name: antrea-controller
labels:
app: antrea
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: antrea-controller
+subjects:
+ - kind: ServiceAccount
+ name: antrea-controller
+ namespace: kube-system
+---
+# Source: antrea/templates/controller/service.yaml
+apiVersion: v1
+kind: Service
+metadata:
name: antrea
namespace: kube-system
+ labels:
+ app: antrea
spec:
ports:
- - port: 443
- protocol: TCP
- targetPort: api
+ - port: 443
+ protocol: TCP
+ targetPort: api
selector:
app: antrea
component: antrea-controller
---
+# Source: antrea/templates/agent/daemonset.yaml
apiVersion: apps/v1
-kind: Deployment
+kind: DaemonSet
metadata:
+ name: antrea-agent
+ namespace: kube-system
labels:
app: antrea
- component: antrea-controller
+ component: antrea-agent
+spec:
+ selector:
+ matchLabels:
+ app: antrea
+ component: antrea-agent
+ updateStrategy:
+ type: RollingUpdate
+ template:
+ metadata:
+ annotations:
+ # Starting with v1.21, Kubernetes supports default container annotation.
+ # Using "kubectl logs/exec/attach/cp" doesn't have to specify "-c antrea-agent" when troubleshooting.
+ kubectl.kubernetes.io/default-container: antrea-agent
+ # Automatically restart Pods with a RollingUpdate if the ConfigMap changes
+ # See https://helm.sh/docs/howto/charts_tips_and_tricks/#automatically-roll-deployments
+ checksum/config: fd449f30e949fff2d22ed79bca0a040535429c5b605b7b93dfdbfd3b359115ae
+ labels:
+ app: antrea
+ component: antrea-agent
+ spec:
+ hostNetwork: true
+ dnsPolicy: ClusterFirst
+ priorityClassName: system-node-critical
+ nodeSelector:
+ kubernetes.io/os: linux
+ tolerations:
+ - key: CriticalAddonsOnly
+ operator: Exists
+ - effect: NoSchedule
+ operator: Exists
+ - effect: NoExecute
+ operator: Exists
+ serviceAccountName: antrea-agent
+ initContainers:
+ - name: install-cni
+ image: "projects.registry.vmware.com/antrea/antrea-ubuntu:latest"
+ imagePullPolicy: IfNotPresent
+ resources:
+ requests:
+ cpu: 100m
+ command: ["install_cni_chaining"]
+ securityContext:
+ capabilities:
+ add:
+ # SYS_MODULE is required to load the OVS kernel module.
+ - SYS_MODULE
+ env:
+ # SKIP_CNI_BINARIES takes in values as a comma separated list of
+ # binaries that need to be skipped for installation, e.g. "portmap, bandwidth".
+ - name: SKIP_CNI_BINARIES
+ value: ""
+ volumeMounts:
+ - name: antrea-config
+ mountPath: /etc/antrea/antrea-cni.conflist
+ subPath: antrea-cni.conflist
+ readOnly: true
+ - name: host-cni-conf
+ mountPath: /host/etc/cni/net.d
+ - name: host-cni-bin
+ mountPath: /host/opt/cni/bin
+ # For loading the OVS kernel module.
+ - name: host-lib-modules
+ mountPath: /lib/modules
+ readOnly: true
+ # For changing the default permissions of the run directory.
+ - name: host-var-run-antrea
+ mountPath: /var/run/antrea
+ containers:
+ - name: antrea-agent
+ image: "projects.registry.vmware.com/antrea/antrea-ubuntu:latest"
+ imagePullPolicy: IfNotPresent
+ command: ["antrea-agent"]
+ # Log to both "/var/log/antrea/" and stderr (so "kubectl logs" can work).-
+ args:
+ - "--config=/etc/antrea/antrea-agent.conf"
+ - "--logtostderr=false"
+ - "--log_dir=/var/log/antrea"
+ - "--alsologtostderr"
+ - "--log_file_max_size=100"
+ - "--log_file_max_num=4"
+ env:
+ # Provide pod and node information for clusterinformation CRD.
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ resources:
+ requests:
+ cpu: 200m
+ ports:
+ - containerPort: 10350
+ name: api
+ protocol: TCP
+ livenessProbe:
+ exec:
+ command:
+ - /bin/sh
+ - -c
+ - container_liveness_probe agent
+ initialDelaySeconds: 5
+ timeoutSeconds: 5
+ periodSeconds: 10
+ failureThreshold: 5
+ readinessProbe:
+ httpGet:
+ host: localhost
+ path: /readyz
+ port: api
+ scheme: HTTPS
+ initialDelaySeconds: 5
+ timeoutSeconds: 5
+ periodSeconds: 10
+ # In large-scale clusters, it may take up to 40~50 seconds for the antrea-agent to reconnect to the antrea
+ # Service after the antrea-controller restarts. The antrea-agent shouldn't be reported as NotReady in this
+ # scenario, otherwise the DaemonSet controller would restart all agents at once, as opposed to performing a
+ # rolling update. Set failureThreshold to 8 so it can tolerate 70s of disconnection.
+ failureThreshold: 8
+ securityContext:
+ # antrea-agent needs to perform sysctl configuration.
+ privileged: true
+ volumeMounts:
+ - name: antrea-config
+ mountPath: /etc/antrea/antrea-agent.conf
+ subPath: antrea-agent.conf
+ readOnly: true
+ - name: host-var-run-antrea
+ mountPath: /var/run/antrea
+ - name: host-var-run-antrea
+ mountPath: /var/run/openvswitch
+ subPath: openvswitch
+ # host-local IPAM stores allocated IP addresses as files in /var/lib/cni/networks/$NETWORK_NAME.
+ # Mount a sub-directory of host-var-run-antrea to it for persistence of IP allocation.
+ - name: host-var-run-antrea
+ mountPath: /var/lib/cni
+ subPath: cni
+ # We need to mount both the /proc directory and the /var/run/netns directory so that
+ # antrea-agent can open the network namespace path when setting up Pod
+ # networking. Different container runtimes may use /proc or /var/run/netns when invoking
+ # the CNI commands. Docker uses /proc and containerd uses /var/run/netns.
+ - name: host-var-log-antrea
+ mountPath: /var/log/antrea
+ - name: host-proc
+ mountPath: /host/proc
+ readOnly: true
+ - name: host-var-run-netns
+ mountPath: /host/var/run/netns
+ readOnly: true
+ # When a container is created, a mount point for the network namespace is added under
+ # /var/run/netns on the host, which needs to be propagated to the antrea-agent container.
+ mountPropagation: HostToContainer
+ - name: xtables-lock
+ mountPath: /run/xtables.lock
+ - name: antrea-ovs
+ image: "projects.registry.vmware.com/antrea/antrea-ubuntu:latest"
+ imagePullPolicy: IfNotPresent
+ resources:
+ requests:
+ cpu: 200m
+ command: ["start_ovs"]
+ args:
+ - "--log_file_max_size=100"
+ - "--log_file_max_num=4"
+ securityContext:
+ # capabilities required by OVS daemons
+ capabilities:
+ add:
+ - SYS_NICE
+ - NET_ADMIN
+ - SYS_ADMIN
+ - IPC_LOCK
+ livenessProbe:
+ exec:
+ # docker CRI doesn't honor timeoutSeconds, add "timeout" to the command as a workaround.
+ # https://github.com/kubernetes/kubernetes/issues/51901
+ command:
+ - /bin/sh
+ - -c
+ - timeout 10 container_liveness_probe ovs
+ initialDelaySeconds: 5
+ timeoutSeconds: 10
+ periodSeconds: 10
+ failureThreshold: 5
+ volumeMounts:
+ - name: host-var-run-antrea
+ mountPath: /var/run/openvswitch
+ subPath: openvswitch
+ - name: host-var-log-antrea
+ mountPath: /var/log/openvswitch
+ subPath: openvswitch
+ volumes:
+ - name: antrea-config
+ configMap:
+ name: antrea-config
+ - name: host-cni-conf
+ hostPath:
+ path: /etc/cni/net.d
+ - name: host-cni-bin
+ hostPath:
+ path: /opt/cni/bin
+ - name: host-proc
+ hostPath:
+ path: /proc
+ - name: host-var-run-netns
+ hostPath:
+ path: /var/run/netns
+ - name: host-var-run-antrea
+ hostPath:
+ path: /var/run/antrea
+ # we use subPath to create run subdirectories for different component (e.g. OVS) and
+ # subPath requires the base volume to exist
+ type: DirectoryOrCreate
+ - name: host-var-log-antrea
+ hostPath:
+ path: /var/log/antrea
+ # we use subPath to create logging subdirectories for different component (e.g. OVS)
+ type: DirectoryOrCreate
+ - name: host-lib-modules
+ hostPath:
+ path: /lib/modules
+ - name: xtables-lock
+ hostPath:
+ path: /run/xtables.lock
+ type: FileOrCreate
+---
+# Source: antrea/templates/controller/deployment.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
name: antrea-controller
namespace: kube-system
+ labels:
+ app: antrea
+ component: antrea-controller
spec:
- replicas: 1
+ strategy:
+ # Ensure the existing Pod is stopped before the new one is created.
+ type: Recreate
selector:
matchLabels:
app: antrea
component: antrea-controller
- strategy:
- type: Recreate
+ replicas: 1
template:
metadata:
+ annotations:
+ # Automatically restart Pod if the ConfigMap changes
+ # See https://helm.sh/docs/howto/charts_tips_and_tricks/#automatically-roll-deployments
+ checksum/config: fd449f30e949fff2d22ed79bca0a040535429c5b605b7b93dfdbfd3b359115ae
labels:
app: antrea
component: antrea-controller
spec:
- containers:
- - args:
- - --config
- - /etc/antrea/antrea-controller.conf
- - --logtostderr=false
- - --log_dir=/var/log/antrea
- - --alsologtostderr
- - --log_file_max_size=100
- - --log_file_max_num=4
- - --v=0
- command:
- - antrea-controller
- env:
- - name: POD_NAME
- valueFrom:
- fieldRef:
- fieldPath: metadata.name
- - name: POD_NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- - name: NODE_NAME
- valueFrom:
- fieldRef:
- fieldPath: spec.nodeName
- - name: SERVICEACCOUNT_NAME
- valueFrom:
- fieldRef:
- fieldPath: spec.serviceAccountName
- - name: ANTREA_CONFIG_MAP_NAME
- value: antrea-config-82h2mk24gg
- image: projects.registry.vmware.com/antrea/antrea-ubuntu:latest
- imagePullPolicy: IfNotPresent
- livenessProbe:
- failureThreshold: 5
- httpGet:
- host: localhost
- path: /livez
- port: api
- scheme: HTTPS
- periodSeconds: 10
- timeoutSeconds: 5
- name: antrea-controller
- ports:
- - containerPort: 10349
- name: api
- protocol: TCP
- readinessProbe:
- failureThreshold: 5
- httpGet:
- host: localhost
- path: /readyz
- port: api
- scheme: HTTPS
- initialDelaySeconds: 5
- periodSeconds: 10
- timeoutSeconds: 5
- resources:
- requests:
- cpu: 200m
- volumeMounts:
- - mountPath: /etc/antrea/antrea-controller.conf
- name: antrea-config
- readOnly: true
- subPath: antrea-controller.conf
- - mountPath: /var/run/antrea/antrea-controller-tls
- name: antrea-controller-tls
- - mountPath: /var/log/antrea
- name: host-var-log-antrea
- hostNetwork: true
nodeSelector:
kubernetes.io/os: linux
+ hostNetwork: true
priorityClassName: system-cluster-critical
- serviceAccountName: antrea-controller
tolerations:
- - key: CriticalAddonsOnly
- operator: Exists
- - effect: NoSchedule
- key: node-role.kubernetes.io/master
+ - key: CriticalAddonsOnly
+ operator: Exists
+ - effect: NoSchedule
+ key: node-role.kubernetes.io/master
+ - effect: NoSchedule
+ key: node-role.kubernetes.io/control-plane
+ serviceAccountName: antrea-controller
+ containers:
+ - name: antrea-controller
+ image: "projects.registry.vmware.com/antrea/antrea-ubuntu:latest"
+ imagePullPolicy: IfNotPresent
+ resources:
+ requests:
+ cpu: 200m
+ command: ["antrea-controller"]
+ # Log to both "/var/log/antrea/" and stderr (so "kubectl logs" can work).
+ args:
+ - "--config=/etc/antrea/antrea-controller.conf"
+ - "--logtostderr=false"
+ - "--log_dir=/var/log/antrea"
+ - "--alsologtostderr"
+ - "--log_file_max_size=100"
+ - "--log_file_max_num=4"
+ env:
+ # Provide pod and node information for clusterinformation CRD.
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ # Provide ServiceAccount name for validation webhook.
+ - name: SERVICEACCOUNT_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.serviceAccountName
+ - name: ANTREA_CONFIG_MAP_NAME
+ value: antrea-config
+ ports:
+ - containerPort: 10349
+ name: api
+ protocol: TCP
+ readinessProbe:
+ httpGet:
+ host: localhost
+ path: /readyz
+ port: api
+ scheme: HTTPS
+ initialDelaySeconds: 5
+ timeoutSeconds: 5
+ periodSeconds: 10
+ failureThreshold: 5
+ livenessProbe:
+ httpGet:
+ host: localhost
+ path: /livez
+ port: api
+ scheme: HTTPS
+ timeoutSeconds: 5
+ periodSeconds: 10
+ failureThreshold: 5
+ volumeMounts:
+ - name: antrea-config
+ mountPath: /etc/antrea/antrea-controller.conf
+ subPath: antrea-controller.conf
+ readOnly: true
+ - name: antrea-controller-tls
+ mountPath: /var/run/antrea/antrea-controller-tls
+ - name: host-var-log-antrea
+ mountPath: /var/log/antrea
volumes:
- - configMap:
- name: antrea-config-82h2mk24gg
- name: antrea-config
- - name: antrea-controller-tls
- secret:
- defaultMode: 256
- optional: true
- secretName: antrea-controller-tls
- - hostPath:
- path: /var/log/antrea
- type: DirectoryOrCreate
- name: host-var-log-antrea
+ - name: antrea-config
+ configMap:
+ name: antrea-config
+ # Make it optional as we only read it when selfSignedCert=false.
+ - name: antrea-controller-tls
+ secret:
+ secretName: antrea-controller-tls
+ defaultMode: 0400
+ optional: true
+ - name: host-var-log-antrea
+ hostPath:
+ path: /var/log/antrea
+ type: DirectoryOrCreate
---
+# Source: antrea/templates/controller/apiservices.yaml
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
+ name: v1beta2.controlplane.antrea.io
labels:
app: antrea
- name: v1alpha1.stats.antrea.io
spec:
- group: stats.antrea.io
+ group: controlplane.antrea.io
groupPriorityMinimum: 100
+ version: v1beta2
+ versionPriority: 100
service:
name: antrea
namespace: kube-system
- version: v1alpha1
- versionPriority: 100
---
+# Source: antrea/templates/controller/apiservices.yaml
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
+ name: v1beta1.system.antrea.io
labels:
app: antrea
- name: v1beta1.system.antrea.io
spec:
group: system.antrea.io
groupPriorityMinimum: 100
+ version: v1beta1
+ versionPriority: 100
service:
name: antrea
namespace: kube-system
- version: v1beta1
- versionPriority: 100
---
+# Source: antrea/templates/controller/apiservices.yaml
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
+ name: v1alpha1.stats.antrea.io
labels:
app: antrea
- name: v1beta2.controlplane.antrea.io
spec:
- group: controlplane.antrea.io
+ group: stats.antrea.io
groupPriorityMinimum: 100
+ version: v1alpha1
+ versionPriority: 100
service:
name: antrea
namespace: kube-system
- version: v1beta2
- versionPriority: 100
----
-apiVersion: apps/v1
-kind: DaemonSet
-metadata:
- labels:
- app: antrea
- component: antrea-agent
- name: antrea-agent
- namespace: kube-system
-spec:
- selector:
- matchLabels:
- app: antrea
- component: antrea-agent
- template:
- metadata:
- annotations:
- kubectl.kubernetes.io/default-container: antrea-agent
- labels:
- app: antrea
- component: antrea-agent
- spec:
- containers:
- - args:
- - --config
- - /etc/antrea/antrea-agent.conf
- - --logtostderr=false
- - --log_dir=/var/log/antrea
- - --alsologtostderr
- - --log_file_max_size=100
- - --log_file_max_num=4
- - --v=0
- command:
- - antrea-agent
- env:
- - name: POD_NAME
- valueFrom:
- fieldRef:
- fieldPath: metadata.name
- - name: POD_NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- - name: NODE_NAME
- valueFrom:
- fieldRef:
- fieldPath: spec.nodeName
- image: projects.registry.vmware.com/antrea/antrea-ubuntu:latest
- imagePullPolicy: IfNotPresent
- livenessProbe:
- exec:
- command:
- - /bin/sh
- - -c
- - container_liveness_probe agent
- failureThreshold: 5
- initialDelaySeconds: 5
- periodSeconds: 10
- timeoutSeconds: 5
- name: antrea-agent
- ports:
- - containerPort: 10350
- name: api
- protocol: TCP
- readinessProbe:
- failureThreshold: 8
- httpGet:
- host: localhost
- path: /readyz
- port: api
- scheme: HTTPS
- initialDelaySeconds: 5
- periodSeconds: 10
- timeoutSeconds: 5
- resources:
- requests:
- cpu: 200m
- securityContext:
- privileged: true
- volumeMounts:
- - mountPath: /etc/antrea/antrea-agent.conf
- name: antrea-config
- readOnly: true
- subPath: antrea-agent.conf
- - mountPath: /var/run/antrea
- name: host-var-run-antrea
- - mountPath: /var/run/openvswitch
- name: host-var-run-antrea
- subPath: openvswitch
- - mountPath: /var/lib/cni
- name: host-var-run-antrea
- subPath: cni
- - mountPath: /var/log/antrea
- name: host-var-log-antrea
- - mountPath: /host/proc
- name: host-proc
- readOnly: true
- - mountPath: /host/var/run/netns
- mountPropagation: HostToContainer
- name: host-var-run-netns
- readOnly: true
- - mountPath: /run/xtables.lock
- name: xtables-lock
- - args:
- - --log_file_max_size=100
- - --log_file_max_num=4
- command:
- - start_ovs
- image: projects.registry.vmware.com/antrea/antrea-ubuntu:latest
- imagePullPolicy: IfNotPresent
- livenessProbe:
- exec:
- command:
- - /bin/sh
- - -c
- - timeout 10 container_liveness_probe ovs
- failureThreshold: 5
- initialDelaySeconds: 5
- periodSeconds: 10
- timeoutSeconds: 10
- name: antrea-ovs
- resources:
- requests:
- cpu: 200m
- securityContext:
- capabilities:
- add:
- - SYS_NICE
- - NET_ADMIN
- - SYS_ADMIN
- - IPC_LOCK
- volumeMounts:
- - mountPath: /var/run/openvswitch
- name: host-var-run-antrea
- subPath: openvswitch
- - mountPath: /var/log/openvswitch
- name: host-var-log-antrea
- subPath: openvswitch
- dnsPolicy: ClusterFirstWithHostNet
- hostNetwork: true
- initContainers:
- - command:
- - install_cni_chaining
- env:
- - name: SKIP_CNI_BINARIES
- value: ""
- image: projects.registry.vmware.com/antrea/antrea-ubuntu:latest
- imagePullPolicy: IfNotPresent
- name: install-cni
- resources:
- requests:
- cpu: 100m
- securityContext:
- capabilities:
- add:
- - SYS_MODULE
- volumeMounts:
- - mountPath: /etc/antrea/antrea-cni.conflist
- name: antrea-config
- readOnly: true
- subPath: antrea-cni.conflist
- - mountPath: /host/etc/cni/net.d
- name: host-cni-conf
- - mountPath: /host/opt/cni/bin
- name: host-cni-bin
- - mountPath: /lib/modules
- name: host-lib-modules
- readOnly: true
- - mountPath: /var/run/antrea
- name: host-var-run-antrea
- nodeSelector:
- kubernetes.io/os: linux
- priorityClassName: system-node-critical
- serviceAccountName: antrea-agent
- tolerations:
- - key: CriticalAddonsOnly
- operator: Exists
- - effect: NoSchedule
- operator: Exists
- - effect: NoExecute
- operator: Exists
- volumes:
- - configMap:
- name: antrea-config-82h2mk24gg
- name: antrea-config
- - hostPath:
- path: /etc/cni/net.d
- name: host-cni-conf
- - hostPath:
- path: /opt/cni/bin
- name: host-cni-bin
- - hostPath:
- path: /proc
- name: host-proc
- - hostPath:
- path: /var/run/netns
- name: host-var-run-netns
- - hostPath:
- path: /var/run/antrea
- type: DirectoryOrCreate
- name: host-var-run-antrea
- - hostPath:
- path: /var/log/antrea
- type: DirectoryOrCreate
- name: host-var-log-antrea
- - hostPath:
- path: /lib/modules
- name: host-lib-modules
- - hostPath:
- path: /run/xtables.lock
- type: FileOrCreate
- name: xtables-lock
- updateStrategy:
- type: RollingUpdate
---
+# Source: antrea/templates/webhooks/mutating/crdmutator.yaml
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata:
+ name: "crdmutator.antrea.io"
labels:
app: antrea
- name: crdmutator.antrea.io
webhooks:
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /mutate/acnp
- name: acnpmutator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - clusternetworkpolicies
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /mutate/anp
- name: anpmutator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - networkpolicies
- scope: Namespaced
- sideEffects: None
- timeoutSeconds: 5
+ - name: "acnpmutator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/mutate/acnp"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["clusternetworkpolicies"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "anpmutator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/mutate/anp"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["networkpolicies"]
+ scope: "Namespaced"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
---
+# Source: antrea/templates/webhooks/validating/crdvalidator.yaml
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
+ name: "crdvalidator.antrea.io"
labels:
app: antrea
- name: crdvalidator.antrea.io
webhooks:
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/tier
- name: tiervalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- - DELETE
- resources:
- - tiers
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/acnp
- name: acnpvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - clusternetworkpolicies
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/anp
- name: anpvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - networkpolicies
- scope: Namespaced
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/clustergroup
- name: clustergroupvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha3
- - v1alpha2
- operations:
- - CREATE
- - UPDATE
- resources:
- - clustergroups
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/externalippool
- name: externalippoolvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha2
- operations:
- - UPDATE
- resources:
- - externalippools
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/egress
- name: egressvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha2
- operations:
- - CREATE
- - UPDATE
- resources:
- - egresses
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/ippool
- name: ippoolvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha2
- operations:
- - CREATE
- - UPDATE
- - DELETE
- resources:
- - ippools
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
+ - name: "tiervalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/tier"
+ rules:
+ - operations: ["CREATE", "UPDATE", "DELETE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["tiers"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "acnpvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/acnp"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["clusternetworkpolicies"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "anpvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/anp"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["networkpolicies"]
+ scope: "Namespaced"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "clustergroupvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/clustergroup"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha3", "v1alpha2"]
+ resources: ["clustergroups"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "externalippoolvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/externalippool"
+ rules:
+ - operations: ["UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha2"]
+ resources: ["externalippools"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "egressvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/egress"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha2"]
+ resources: ["egresses"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "ippoolvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/ippool"
+ rules:
+ - operations: ["CREATE", "UPDATE", "DELETE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha2"]
+ resources: ["ippools"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
diff --git a/build/yamls/antrea-eks.yml b/build/yamls/antrea-eks.yml
index 53a6ef8c0a3..7587cc5d41e 100644
--- a/build/yamls/antrea-eks.yml
+++ b/build/yamls/antrea-eks.yml
@@ -1,2740 +1,59 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
+---
+# Source: antrea/templates/agent/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
metadata:
+ name: antrea-agent
+ namespace: kube-system
labels:
app: antrea
- name: antreaagentinfos.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: AntreaAgentInfo
- plural: antreaagentinfos
- shortNames:
- - aai
- singular: antreaagentinfo
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: Health status of this Agent
- jsonPath: .agentConditions[?(@.type=='AgentHealthy')].status
- name: Healthy
- type: string
- - description: Last time the Healthy Condition was updated
- jsonPath: .agentConditions[?(@.type=='AgentHealthy')].lastHeartbeatTime
- name: Last Heartbeat
- type: date
- - description: Version of this Agent
- jsonPath: .version
- name: Version
- priority: 1
- type: string
- - description: Node on which this Agent is running
- jsonPath: .nodeRef.name
- name: Node
- priority: 1
- type: string
- - description: Number of local Pods managed by this Agent
- jsonPath: .localPodNum
- name: Num Pods
- priority: 2
- type: integer
- - description: Subnets used by this Agent for Pod IPAM
- jsonPath: .nodeSubnets
- name: Subnets
- priority: 2
- type: string
- name: v1beta1
- schema:
- openAPIV3Schema:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- served: true
- storage: true
---
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
+# Source: antrea/templates/antctl/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
metadata:
+ name: antctl
+ namespace: kube-system
labels:
app: antrea
- name: antreacontrollerinfos.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: AntreaControllerInfo
- plural: antreacontrollerinfos
- shortNames:
- - aci
- singular: antreacontrollerinfo
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: Health status of the Controller
- jsonPath: .controllerConditions[?(@.type=='ControllerHealthy')].status
- name: Healthy
- type: string
- - description: Last time the Healthy Condition was updated
- jsonPath: .controllerConditions[?(@.type=='ControllerHealthy')].lastHeartbeatTime
- name: Last Heartbeat
- type: date
- - description: Version of the Controller
- jsonPath: .version
- name: Version
- priority: 1
- type: string
- - description: Number of Agents connected to the Controller
- jsonPath: .connectedAgentNum
- name: Connected Agents
- priority: 1
- type: integer
- - description: Node on which the Controller is running
- jsonPath: .nodeRef.name
- name: Node
- priority: 1
- type: string
- - description: Number of Network Policies computed by Controller
- jsonPath: .networkPolicyControllerInfo.networkPolicyNum
- name: Num Network Policies
- priority: 2
- type: integer
- name: v1beta1
- schema:
- openAPIV3Schema:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- served: true
- storage: true
---
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
+# Source: antrea/templates/controller/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
metadata:
+ name: antrea-controller
+ namespace: kube-system
labels:
app: antrea
- name: clustergroups.crd.antrea.io
-spec:
- conversion:
- strategy: Webhook
- webhook:
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /convert/clustergroup
- conversionReviewVersions:
- - v1
- - v1beta1
- group: crd.antrea.io
- names:
- kind: ClusterGroup
- plural: clustergroups
- shortNames:
- - cg
- singular: clustergroup
- scope: Cluster
- versions:
- - name: v1alpha2
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- childGroups:
- items:
- type: string
- type: array
- externalEntitySelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- ipBlock:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- ipBlocks:
- items:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- type: array
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceReference:
- properties:
- name:
- type: string
- namespace:
- type: string
- type: object
- type: object
- status:
- properties:
- conditions:
- items:
- properties:
- lastTransitionTime:
- type: string
- status:
- type: string
- type:
- type: string
- type: object
- type: array
- type: object
- type: object
- served: true
- storage: false
- - name: v1alpha3
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- childGroups:
- items:
- type: string
- type: array
- externalEntitySelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- ipBlocks:
- items:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- type: array
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceReference:
- properties:
- name:
- type: string
- namespace:
- type: string
- type: object
- type: object
- status:
- properties:
- conditions:
- items:
- properties:
- lastTransitionTime:
- type: string
- status:
- type: string
- type:
- type: string
- type: object
- type: array
- type: object
- type: object
- served: true
- storage: true
- subresources:
- status: {}
---
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
+# Source: antrea/templates/agent/secret.yaml
+apiVersion: v1
+kind: Secret
+metadata:
+ name: antrea-agent-service-account-token
+ namespace: kube-system
+ annotations:
+ kubernetes.io/service-account.name: antrea-agent
+type: kubernetes.io/service-account-token
+---
+# Source: antrea/templates/antctl/secret.yaml
+apiVersion: v1
+kind: Secret
+metadata:
+ name: antctl-service-account-token
+ namespace: kube-system
+ annotations:
+ kubernetes.io/service-account.name: antctl
+type: kubernetes.io/service-account-token
+---
+# Source: antrea/templates/configmap.yaml
+apiVersion: v1
+kind: ConfigMap
metadata:
+ name: antrea-config
+ namespace: kube-system
labels:
app: antrea
- name: clusternetworkpolicies.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: ClusterNetworkPolicy
- plural: clusternetworkpolicies
- shortNames:
- - acnp
- singular: clusternetworkpolicy
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: The Tier to which this ClusterNetworkPolicy belongs to.
- jsonPath: .spec.tier
- name: Tier
- type: string
- - description: The Priority of this ClusterNetworkPolicy relative to other policies.
- format: float
- jsonPath: .spec.priority
- name: Priority
- type: number
- - description: The total number of Nodes that should realize the NetworkPolicy.
- format: int32
- jsonPath: .status.desiredNodesRealized
- name: Desired Nodes
- type: number
- - description: The number of Nodes that have realized the NetworkPolicy.
- format: int32
- jsonPath: .status.currentNodesRealized
- name: Current Nodes
- type: number
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- appliedTo:
- items:
- properties:
- group:
- type: string
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceAccount:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: object
- type: array
- egress:
- items:
- properties:
- action:
- enum:
- - Allow
- - Drop
- - Reject
- - Pass
- type: string
- appliedTo:
- items:
- properties:
- group:
- type: string
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceAccount:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: object
- type: array
- enableLogging:
- type: boolean
- name:
- type: string
- ports:
- items:
- properties:
- endPort:
- type: integer
- port:
- x-kubernetes-int-or-string: true
- protocol:
- enum:
- - TCP
- - UDP
- - SCTP
- type: string
- type: object
- type: array
- to:
- items:
- properties:
- fqdn:
- type: string
- group:
- type: string
- ipBlock:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- namespaces:
- properties:
- match:
- type: string
- type: object
- nodeSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceAccount:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: object
- type: array
- toServices:
- items:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: array
- required:
- - action
- type: object
- type: array
- ingress:
- items:
- properties:
- action:
- enum:
- - Allow
- - Drop
- - Reject
- - Pass
- type: string
- appliedTo:
- items:
- properties:
- group:
- type: string
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceAccount:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: object
- type: array
- enableLogging:
- type: boolean
- from:
- items:
- properties:
- group:
- type: string
- ipBlock:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- namespaces:
- properties:
- match:
- enum:
- - Self
- type: string
- type: object
- nodeSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceAccount:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: object
- type: array
- name:
- type: string
- ports:
- items:
- properties:
- endPort:
- type: integer
- port:
- x-kubernetes-int-or-string: true
- protocol:
- enum:
- - TCP
- - UDP
- - SCTP
- type: string
- type: object
- type: array
- required:
- - action
- type: object
- type: array
- priority:
- format: float
- maximum: 10000
- minimum: 1
- type: number
- tier:
- type: string
- required:
- - priority
- type: object
- status:
- properties:
- currentNodesRealized:
- type: integer
- desiredNodesRealized:
- type: integer
- observedGeneration:
- type: integer
- phase:
- type: string
- type: object
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: egresses.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: Egress
- plural: egresses
- shortNames:
- - eg
- singular: egress
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: Specifies the SNAT IP address for the selected workloads.
- jsonPath: .spec.egressIP
- name: EgressIP
- type: string
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- - description: The Owner Node of egress IP
- jsonPath: .status.egressNode
- name: Node
- type: string
- name: v1alpha2
- schema:
- openAPIV3Schema:
- properties:
- spec:
- anyOf:
- - required:
- - egressIP
- - required:
- - externalIPPool
- properties:
- appliedTo:
- properties:
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- egressIP:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- externalIPPool:
- type: string
- required:
- - appliedTo
- type: object
- status:
- properties:
- egressNode:
- type: string
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: externalentities.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: ExternalEntity
- plural: externalentities
- shortNames:
- - ee
- singular: externalentity
- scope: Namespaced
- versions:
- - name: v1alpha2
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- endpoints:
- items:
- properties:
- ip:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- name:
- type: string
- type: object
- type: array
- externalNode:
- type: string
- ports:
- items:
- properties:
- name:
- type: string
- port:
- x-kubernetes-int-or-string: true
- protocol:
- enum:
- - TCP
- - UDP
- - SCTP
- type: string
- type: object
- type: array
- type: object
- type: object
- served: true
- storage: true
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- type: object
- served: false
- storage: false
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: externalippools.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: ExternalIPPool
- plural: externalippools
- shortNames:
- - eip
- singular: externalippool
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: The number of total IPs
- jsonPath: .status.usage.total
- name: Total
- type: integer
- - description: The number of allocated IPs
- jsonPath: .status.usage.used
- name: Used
- type: integer
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha2
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- ipRanges:
- items:
- oneOf:
- - required:
- - cidr
- - required:
- - start
- - end
- properties:
- cidr:
- format: cidr
- type: string
- end:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- start:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- type: object
- type: array
- nodeSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- required:
- - ipRanges
- - nodeSelector
- type: object
- status:
- properties:
- usage:
- properties:
- total:
- type: integer
- used:
- type: integer
- type: object
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: ippools.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: IPPool
- plural: ippools
- shortNames:
- - ipp
- singular: ippool
- scope: Cluster
- versions:
- - name: v1alpha2
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- ipRanges:
- items:
- oneOf:
- - required:
- - cidr
- - gateway
- - prefixLength
- - required:
- - start
- - end
- - gateway
- - prefixLength
- properties:
- cidr:
- format: cidr
- type: string
- end:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- gateway:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- prefixLength:
- type: integer
- start:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- vlan:
- maximum: 4094
- minimum: 0
- type: integer
- type: object
- type: array
- ipVersion:
- type: integer
- required:
- - ipVersion
- - ipRanges
- type: object
- status:
- properties:
- ipAddresses:
- items:
- properties:
- ipAddress:
- type: string
- owner:
- properties:
- pod:
- properties:
- containerID:
- type: string
- name:
- type: string
- namespace:
- type: string
- type: object
- statefulSet:
- properties:
- index:
- type: integer
- name:
- type: string
- namespace:
- type: string
- type: object
- type: object
- phase:
- type: string
- type: object
- type: array
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: networkpolicies.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: NetworkPolicy
- plural: networkpolicies
- shortNames:
- - anp
- singular: networkpolicy
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - description: The Tier to which this Antrea NetworkPolicy belongs to.
- jsonPath: .spec.tier
- name: Tier
- type: string
- - description: The Priority of this Antrea NetworkPolicy relative to other policies.
- format: float
- jsonPath: .spec.priority
- name: Priority
- type: number
- - description: The total number of Nodes that should realize the NetworkPolicy.
- format: int32
- jsonPath: .status.desiredNodesRealized
- name: Desired Nodes
- type: number
- - description: The number of Nodes that have realized the NetworkPolicy.
- format: int32
- jsonPath: .status.currentNodesRealized
- name: Current Nodes
- type: number
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- appliedTo:
- items:
- properties:
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: array
- egress:
- items:
- properties:
- action:
- enum:
- - Allow
- - Drop
- - Reject
- - Pass
- type: string
- appliedTo:
- items:
- properties:
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: array
- enableLogging:
- type: boolean
- name:
- type: string
- ports:
- items:
- properties:
- endPort:
- type: integer
- port:
- x-kubernetes-int-or-string: true
- protocol:
- enum:
- - TCP
- - UDP
- - SCTP
- type: string
- type: object
- type: array
- to:
- items:
- properties:
- externalEntitySelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- fqdn:
- type: string
- ipBlock:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- nodeSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: array
- toServices:
- items:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- type: object
- type: array
- required:
- - action
- type: object
- type: array
- ingress:
- items:
- properties:
- action:
- enum:
- - Allow
- - Drop
- - Reject
- - Pass
- type: string
- appliedTo:
- items:
- properties:
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: array
- enableLogging:
- type: boolean
- from:
- items:
- properties:
- externalEntitySelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- ipBlock:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- nodeSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: array
- name:
- type: string
- ports:
- items:
- properties:
- endPort:
- type: integer
- port:
- x-kubernetes-int-or-string: true
- protocol:
- enum:
- - TCP
- - UDP
- - SCTP
- type: string
- type: object
- type: array
- required:
- - action
- type: object
- type: array
- priority:
- format: float
- maximum: 10000
- minimum: 1
- type: number
- tier:
- type: string
- required:
- - priority
- type: object
- status:
- properties:
- currentNodesRealized:
- type: integer
- desiredNodesRealized:
- type: integer
- observedGeneration:
- type: integer
- phase:
- type: string
- type: object
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: tiers.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: Tier
- plural: tiers
- shortNames:
- - tr
- singular: tier
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: The Priority of this Tier relative to other Tiers.
- jsonPath: .spec.priority
- name: Priority
- type: integer
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- description:
- type: string
- priority:
- maximum: 255
- minimum: 0
- type: integer
- required:
- - priority
- type: object
- type: object
- served: true
- storage: true
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: traceflows.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: Traceflow
- plural: traceflows
- shortNames:
- - tf
- singular: traceflow
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: The phase of the Traceflow.
- jsonPath: .status.phase
- name: Phase
- type: string
- - description: The name of the source Pod.
- jsonPath: .spec.source.pod
- name: Source-Pod
- priority: 10
- type: string
- - description: The name of the destination Pod.
- jsonPath: .spec.destination.pod
- name: Destination-Pod
- priority: 10
- type: string
- - description: The IP address of the destination.
- jsonPath: .spec.destination.ip
- name: Destination-IP
- priority: 10
- type: string
- - description: Trace live traffic.
- jsonPath: .spec.liveTraffic
- name: Live-Traffic
- priority: 10
- type: boolean
- - description: Capture only the dropped packet.
- jsonPath: .spec.droppedOnly
- name: Dropped-Only
- priority: 10
- type: boolean
- - description: Timeout in seconds.
- jsonPath: .spec.timeout
- name: Timeout
- priority: 10
- type: integer
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- destination:
- properties:
- ip:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- namespace:
- type: string
- pod:
- type: string
- service:
- type: string
- type: object
- droppedOnly:
- type: boolean
- liveTraffic:
- type: boolean
- packet:
- properties:
- ipHeader:
- properties:
- flags:
- type: integer
- protocol:
- type: integer
- srcIP:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- ttl:
- type: integer
- type: object
- ipv6Header:
- properties:
- hopLimit:
- type: integer
- nextHeader:
- type: integer
- srcIP:
- format: ipv6
- type: string
- type: object
- transportHeader:
- properties:
- icmp:
- properties:
- id:
- type: integer
- sequence:
- type: integer
- type: object
- tcp:
- properties:
- dstPort:
- type: integer
- flags:
- type: integer
- srcPort:
- type: integer
- type: object
- udp:
- properties:
- dstPort:
- type: integer
- srcPort:
- type: integer
- type: object
- type: object
- type: object
- source:
- properties:
- ip:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- namespace:
- type: string
- pod:
- type: string
- type: object
- timeout:
- type: integer
- type: object
- status:
- properties:
- capturedPacket:
- properties:
- dstIP:
- type: string
- ipHeader:
- properties:
- flags:
- type: integer
- protocol:
- type: integer
- ttl:
- type: integer
- type: object
- ipv6Header:
- properties:
- hopLimit:
- type: integer
- nextHeader:
- type: integer
- type: object
- length:
- type: integer
- srcIP:
- type: string
- transportHeader:
- properties:
- icmp:
- properties:
- id:
- type: integer
- sequence:
- type: integer
- type: object
- tcp:
- properties:
- dstPort:
- type: integer
- flags:
- type: integer
- srcPort:
- type: integer
- type: object
- udp:
- properties:
- dstPort:
- type: integer
- srcPort:
- type: integer
- type: object
- type: object
- type: object
- dataplaneTag:
- type: integer
- phase:
- type: string
- reason:
- type: string
- results:
- items:
- properties:
- node:
- type: string
- observations:
- items:
- properties:
- action:
- type: string
- component:
- type: string
- componentInfo:
- type: string
- dstMAC:
- type: string
- networkPolicy:
- type: string
- pod:
- type: string
- translatedDstIP:
- type: string
- translatedSrcIP:
- type: string
- ttl:
- type: integer
- tunnelDstIP:
- type: string
- type: object
- type: array
- role:
- type: string
- timestamp:
- type: integer
- type: object
- type: array
- startTime:
- type: string
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- labels:
- app: antrea
- name: antctl
- namespace: kube-system
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- labels:
- app: antrea
- name: antrea-agent
- namespace: kube-system
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- labels:
- app: antrea
- name: antrea-controller
- namespace: kube-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-admin: "true"
- rbac.authorization.k8s.io/aggregate-to-edit: "true"
- name: aggregate-antrea-clustergroups-edit
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - clustergroups
- verbs:
- - get
- - list
- - watch
- - create
- - update
- - patch
- - delete
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-view: "true"
- name: aggregate-antrea-clustergroups-view
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - clustergroups
- verbs:
- - get
- - list
- - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-admin: "true"
- rbac.authorization.k8s.io/aggregate-to-edit: "true"
- name: aggregate-antrea-policies-edit
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - clusternetworkpolicies
- - networkpolicies
- verbs:
- - get
- - list
- - watch
- - create
- - update
- - patch
- - delete
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-view: "true"
- name: aggregate-antrea-policies-view
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - clusternetworkpolicies
- - networkpolicies
- verbs:
- - get
- - list
- - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-admin: "true"
- rbac.authorization.k8s.io/aggregate-to-edit: "true"
- name: aggregate-traceflows-edit
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - traceflows
- verbs:
- - get
- - list
- - watch
- - create
- - update
- - patch
- - delete
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-view: "true"
- name: aggregate-traceflows-view
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - traceflows
- verbs:
- - get
- - list
- - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- name: antctl
-rules:
-- apiGroups:
- - controlplane.antrea.io
- resources:
- - networkpolicies
- - appliedtogroups
- - addressgroups
- verbs:
- - get
- - list
-- apiGroups:
- - stats.antrea.io
- resources:
- - networkpolicystats
- - antreaclusternetworkpolicystats
- - antreanetworkpolicystats
- verbs:
- - get
- - list
-- apiGroups:
- - system.antrea.io
- resources:
- - controllerinfos
- - agentinfos
- verbs:
- - get
-- apiGroups:
- - system.antrea.io
- resources:
- - supportbundles
- verbs:
- - get
- - post
-- apiGroups:
- - system.antrea.io
- resources:
- - supportbundles/download
- verbs:
- - get
-- nonResourceURLs:
- - /agentinfo
- - /addressgroups
- - /appliedtogroups
- - /loglevel
- - /networkpolicies
- - /ovsflows
- - /ovstracing
- - /podinterfaces
- - /featuregates
- verbs:
- - get
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- name: antrea-agent
-rules:
-- apiGroups:
- - ""
- resources:
- - nodes
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - ""
- resources:
- - nodes/status
- verbs:
- - patch
-- apiGroups:
- - ""
- resources:
- - pods
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - ""
- resources:
- - pods/status
- verbs:
- - patch
-- apiGroups:
- - ""
- resources:
- - endpoints
- - services
- - namespaces
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - ""
- resources:
- - services/status
- verbs:
- - update
-- apiGroups:
- - discovery.k8s.io
- resources:
- - endpointslices
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - crd.antrea.io
- resources:
- - antreaagentinfos
- verbs:
- - get
- - create
- - update
- - delete
-- apiGroups:
- - controlplane.antrea.io
- resources:
- - networkpolicies
- - appliedtogroups
- - addressgroups
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - controlplane.antrea.io
- resources:
- - egressgroups
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - controlplane.antrea.io
- resources:
- - nodestatssummaries
- verbs:
- - create
-- apiGroups:
- - controlplane.antrea.io
- resources:
- - networkpolicies/status
- verbs:
- - create
- - get
-- apiGroups:
- - authentication.k8s.io
- resources:
- - tokenreviews
- verbs:
- - create
-- apiGroups:
- - authorization.k8s.io
- resources:
- - subjectaccessreviews
- verbs:
- - create
-- apiGroups:
- - ""
- resourceNames:
- - extension-apiserver-authentication
- resources:
- - configmaps
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - ""
- resourceNames:
- - antrea-ca
- resources:
- - configmaps
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - crd.antrea.io
- resources:
- - traceflows
- - traceflows/status
- verbs:
- - get
- - watch
- - list
- - update
- - patch
- - create
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - egresses
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - crd.antrea.io
- resources:
- - egresses/status
- verbs:
- - update
-- apiGroups:
- - crd.antrea.io
- resources:
- - externalippools
- - ippools
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - crd.antrea.io
- resources:
- - ippools/status
- verbs:
- - update
-- apiGroups:
- - k8s.cni.cncf.io
- resources:
- - network-attachment-definitions
- verbs:
- - get
- - list
- - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- name: antrea-cluster-identity-reader
-rules:
-- apiGroups:
- - ""
- resourceNames:
- - antrea-cluster-identity
- resources:
- - configmaps
- verbs:
- - get
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- name: antrea-controller
-rules:
-- apiGroups:
- - ""
- resources:
- - pods
- - services
- - namespaces
- - configmaps
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - ""
- resources:
- - nodes
- verbs:
- - get
- - watch
- - list
- - patch
-- apiGroups:
- - ""
- resources:
- - services/status
- verbs:
- - update
-- apiGroups:
- - networking.k8s.io
- resources:
- - networkpolicies
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - authentication.k8s.io
- resources:
- - tokenreviews
- verbs:
- - create
-- apiGroups:
- - authorization.k8s.io
- resources:
- - subjectaccessreviews
- verbs:
- - create
-- apiGroups:
- - apiextensions.k8s.io
- resources:
- - customresourcedefinitions
- verbs:
- - get
- - update
-- apiGroups:
- - ""
- resourceNames:
- - extension-apiserver-authentication
- resources:
- - configmaps
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - ""
- resourceNames:
- - antrea-ca
- - antrea-cluster-identity
- resources:
- - configmaps
- verbs:
- - get
- - update
-- apiGroups:
- - ""
- resources:
- - configmaps
- verbs:
- - create
-- apiGroups:
- - apiregistration.k8s.io
- resourceNames:
- - v1alpha1.stats.antrea.io
- - v1beta1.system.antrea.io
- - v1beta2.controlplane.antrea.io
- resources:
- - apiservices
- verbs:
- - get
- - update
-- apiGroups:
- - apiregistration.k8s.io
- resourceNames:
- - v1beta1.networking.antrea.tanzu.vmware.com
- - v1beta1.controlplane.antrea.tanzu.vmware.com
- - v1alpha1.stats.antrea.tanzu.vmware.com
- - v1beta1.system.antrea.tanzu.vmware.com
- - v1beta2.controlplane.antrea.tanzu.vmware.com
- resources:
- - apiservices
- verbs:
- - delete
-- apiGroups:
- - admissionregistration.k8s.io
- resourceNames:
- - labelsmutator.antrea.io
- - crdmutator.antrea.io
- - crdvalidator.antrea.io
- resources:
- - mutatingwebhookconfigurations
- - validatingwebhookconfigurations
- verbs:
- - get
- - update
-- apiGroups:
- - crd.antrea.io
- resources:
- - antreacontrollerinfos
- verbs:
- - get
- - create
- - update
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - antreaagentinfos
- verbs:
- - list
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - clusternetworkpolicies
- - networkpolicies
- verbs:
- - get
- - watch
- - list
- - update
- - patch
- - create
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - clusternetworkpolicies/status
- - networkpolicies/status
- verbs:
- - update
-- apiGroups:
- - crd.antrea.io
- resources:
- - tiers
- verbs:
- - get
- - watch
- - list
- - update
- - patch
- - create
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - traceflows
- - traceflows/status
- verbs:
- - get
- - watch
- - list
- - update
- - patch
- - create
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - externalentities
- - clustergroups
- verbs:
- - get
- - watch
- - list
- - update
- - patch
- - create
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - clustergroups/status
- verbs:
- - update
-- apiGroups:
- - crd.antrea.io
- resources:
- - egresses
- verbs:
- - get
- - watch
- - list
- - update
- - patch
-- apiGroups:
- - crd.antrea.io
- resources:
- - externalippools
- - ippools
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - crd.antrea.io
- resources:
- - externalippools/status
- - ippools/status
- verbs:
- - update
-- apiGroups:
- - apps
- resources:
- - statefulsets
- verbs:
- - get
- - list
- - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- labels:
- app: antrea
- name: antctl
- namespace: kube-system
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: antctl
-subjects:
-- kind: ServiceAccount
- name: antctl
- namespace: kube-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- labels:
- app: antrea
- name: antrea-agent
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: antrea-agent
-subjects:
-- kind: ServiceAccount
- name: antrea-agent
- namespace: kube-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- labels:
- app: antrea
- name: antrea-controller
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: antrea-controller
-subjects:
-- kind: ServiceAccount
- name: antrea-controller
- namespace: kube-system
----
-apiVersion: v1
data:
antrea-agent.conf: |
# FeatureGates is a map of feature names to bools that enable or disable experimental features.
@@ -2771,7 +90,8 @@ data:
# Egress: true
# Enable AntreaIPAM, which can allocate IP addresses from IPPools. AntreaIPAM is required by the
- # bridging mode and allocates IPs to Pods in bridging mode.
+ # bridging mode and allocates IPs to Pods in bridging mode. It is also required to use Antrea for
+ # IPAM when configuring secondary network interfaces with Multus.
# AntreaIPAM: false
# Enable multicast traffic. This feature is supported only with noEncap mode.
@@ -2785,21 +105,23 @@ data:
# Enable managing external IPs of Services of LoadBalancer type.
# ServiceExternalIP: false
+ # Enable mirroring or redirecting the traffic Pods send or receive.
+ # TrafficControl: false
+
# Name of the OpenVSwitch bridge antrea-agent will create and use.
# Make sure it doesn't conflict with your existing OpenVSwitch bridges.
- #ovsBridge: br-int
+ ovsBridge: "br-int"
# Datapath type to use for the OpenVSwitch bridge created by Antrea. Supported values are:
# - system
# - netdev
# 'system' is the default value and corresponds to the kernel datapath. Use 'netdev' to run
- # OVS in userspace mode (not fully supported yet). Userspace mode requires the tun device driver to
- # be available.
+ # OVS in userspace mode. Userspace mode requires the tun device driver to be available.
#ovsDatapathType: system
# Name of the interface antrea-agent will create and use for host <--> pod communication.
# Make sure it doesn't conflict with your existing interfaces.
- #hostGateway: antrea-gw0
+ hostGateway: "antrea-gw0"
# Determines how traffic is encapsulated. It has the following options:
# encap(default): Inter-node Pod traffic is always encapsulated and Pod to external network
@@ -2811,14 +133,14 @@ data:
# networkPolicyOnly: Antrea enforces NetworkPolicy only, and utilizes CNI chaining and delegates Pod
# IPAM and connectivity to the primary CNI.
#
- trafficEncapMode: networkPolicyOnly
+ trafficEncapMode: "networkPolicyOnly"
# Whether or not to SNAT (using the Node IP) the egress traffic from a Pod to the external network.
# This option is for the noEncap traffic mode only, and the default value is false. In the noEncap
# mode, if the cluster's Pod CIDR is reachable from the external network, then the Pod traffic to
# the external network needs not be SNAT'd. In the networkPolicyOnly mode, antrea-agent never
# performs SNAT and this option will be ignored; for other modes it must be set to false.
- #noSNAT: false
+ noSNAT: false
# Tunnel protocols used for encapsulating traffic across Nodes. If WireGuard is enabled in trafficEncryptionMode,
# this option will not take effect. Supported values:
@@ -2827,7 +149,7 @@ data:
# - gre
# - stt
# Note that "gre" is not supported for IPv6 clusters (IPv6-only or dual-stack clusters).
- #tunnelType: geneve
+ tunnelType: "geneve"
# Determines how tunnel traffic is encrypted. Currently encryption only works with encap mode.
# It has the following options:
@@ -2837,44 +159,54 @@ data:
# the PSK value must be passed to Antrea Agent through an environment
# variable: ANTREA_IPSEC_PSK.
# - wireGuard: Enable WireGuard for tunnel traffic encryption.
- #trafficEncryptionMode: none
+ trafficEncryptionMode: "none"
# Enable bridging mode of Pod network on Nodes, in which the Node's transport interface is connected
- # to the OVS bridge, and cross-Node/VLAN traffic from AntreaIPAM Pods (Pods whose IP addresses are
- # allocated by AntreaIPAM from IPPools) is sent to the underlay network via the uplink, and
- # forwarded/routed by the underlay network.
+ # to the OVS bridge, and cross-Node/VLAN traffic of AntreaIPAM Pods (Pods whose IP addresses are
+ # allocated by AntreaIPAM from IPPools) is sent to the underlay network, and forwarded/routed by the
+ # underlay network.
# This option requires the `AntreaIPAM` feature gate to be enabled. At this moment, it supports only
# IPv4 and Linux Nodes, and can be enabled only when `ovsDatapathType` is `system`,
# `trafficEncapMode` is `noEncap`, and `noSNAT` is true.
- #enableBridgingMode: false
+ enableBridgingMode: false
+
+ # Disable TX checksum offloading for container network interfaces. It's supposed to be set to true when the
+ # datapath doesn't support TX checksum offloading, which causes packets to be dropped due to bad checksum.
+ # It affects Pods running on Linux Nodes only.
+ disableTXChecksumOffload: false
# Default MTU to use for the host gateway interface and the network interface of each Pod.
# If omitted, antrea-agent will discover the MTU of the Node's primary interface and
# also adjust MTU to accommodate for tunnel encapsulation overhead (if applicable).
- #defaultMTU: 0
+ defaultMTU: 0
# wireGuard specifies WireGuard related configurations.
wireGuard:
- # The port for WireGuard to receive traffic.
- # port: 51820
+ # The port for WireGuard to receive traffic.
+ port: 51820
egress:
- # exceptCIDRs is the CIDR ranges to which outbound Pod traffic will not be SNAT'd by Egresses.
- # exceptCIDRs: []
+ # exceptCIDRs is the CIDR ranges to which outbound Pod traffic will not be SNAT'd by Egresses.
+ exceptCIDRs:
+
+ # ClusterIP CIDR range for Services. It's required when AntreaProxy is not enabled, and should be
+ # set to the same value as the one specified by --service-cluster-ip-range for kube-apiserver. When
+ # AntreaProxy is enabled, this parameter is not needed and will be ignored if provided.
+ serviceCIDR: ""
# ClusterIP CIDR range for IPv6 Services. It's required when using kube-proxy to provide IPv6 Service in a Dual-Stack
# cluster or an IPv6 only cluster. The value should be the same as the configuration for kube-apiserver specified by
# --service-cluster-ip-range. When AntreaProxy is enabled, this parameter is not needed.
# No default value for this field.
- #serviceCIDRv6:
+ serviceCIDRv6: ""
# The port for the antrea-agent APIServer to serve on.
# Note that if it's set to another value, the `containerPort` of the `api` port of the
# `antrea-agent` container must be set to the same value.
- #apiPort: 10350
+ apiPort: 10350
# Enable metrics exposure via Prometheus. Initializes Prometheus metrics listener.
- #enablePrometheusMetrics: true
+ enablePrometheusMetrics: true
# Provide the IPFIX collector address as a string with format :[][:].
# HOST can either be the DNS name or the IP of the Flow Collector. For example,
@@ -2885,50 +217,50 @@ data:
# If no PROTO is given, we consider "tls" as default. We support "tls", "tcp" and
# "udp" protocols. "tls" is used for securing communication between flow exporter and
# flow aggregator.
- #flowCollectorAddr: "flow-aggregator.flow-aggregator.svc:4739:tls"
+ flowCollectorAddr: "flow-aggregator.flow-aggregator.svc:4739:tls"
# Provide flow poll interval as a duration string. This determines how often the
# flow exporter dumps connections from the conntrack module. Flow poll interval
# should be greater than or equal to 1s (one second).
# Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
- #flowPollInterval: "5s"
+ flowPollInterval: "5s"
# Provide the active flow export timeout, which is the timeout after which a flow
# record is sent to the collector for active flows. Thus, for flows with a continuous
# stream of packets, a flow record will be exported to the collector once the elapsed
# time since the last export event is equal to the value of this timeout.
# Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
- #activeFlowExportTimeout: "30s"
+ activeFlowExportTimeout: "5s"
# Provide the idle flow export timeout, which is the timeout after which a flow
# record is sent to the collector for idle flows. A flow is considered idle if no
# packet matching this flow has been observed since the last export event.
# Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
- #idleFlowExportTimeout: "15s"
+ idleFlowExportTimeout: "15s"
nodePortLocal:
# Enable NodePortLocal, a feature used to make Pods reachable using port forwarding on the host. To
# enable this feature, you need to set "enable" to true, and ensure that the NodePortLocal feature
# gate is also enabled (which is the default).
- # enable: false
+ enable: false
# Provide the port range used by NodePortLocal. When the NodePortLocal feature is enabled, a port
# from that range will be assigned whenever a Pod's container defines a specific port to be exposed
# (each container can define a list of ports as pod.spec.containers[].ports), and all Node traffic
# directed to that port will be forwarded to the Pod.
- # portRange: 61000-62000
+ portRange: "61000-62000"
# Provide the address of Kubernetes apiserver, to override any value provided in kubeconfig or InClusterConfig.
# Defaults to "". It must be a host string, a host:port pair, or a URL to the base of the apiserver.
- #kubeAPIServerOverride: ""
+ kubeAPIServerOverride: ""
# Comma-separated list of Cipher Suites. If omitted, the default Go Cipher Suites will be used.
# https://golang.org/pkg/crypto/tls/#pkg-constants
# Note that TLS1.3 Cipher Suites cannot be added to the list. But the apiserver will always
# prefer TLS1.3 Cipher Suites whenever possible.
- #tlsCipherSuites:
+ tlsCipherSuites: ""
# TLS min version from: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13.
- #tlsMinVersion:
+ tlsMinVersion: ""
# The name of the interface on Node which is used for tunneling or routing the traffic across Nodes.
# If there are multiple IP addresses configured on the interface, the first one is used. The IP
@@ -2937,11 +269,16 @@ data:
# 1. transportInterface
# 2. transportInterfaceCIDRs
# 3. The Node IP
- #transportInterface:
+ transportInterface: ""
+ multicast:
# The names of the interfaces on Nodes that are used to forward multicast traffic.
# Defaults to transport interface if not set.
- #multicastInterfaces: []
+ multicastInterfaces:
+
+ # The interval at which the antrea-agent sends IGMP queries to Pods.
+ # Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
+ igmpQueryInterval: "125s"
# The network CIDRs of the interface on Node which is used for tunneling or routing the traffic across
# Nodes. If there are multiple interfaces configured the same network CIDR, the first one is used. The
@@ -2950,7 +287,7 @@ data:
# 1. transportInterface
# 2. transportInterfaceCIDRs
# 3. The Node IP
- #transportInterfaceCIDRs: [,]
+ transportInterfaceCIDRs:
# Option antreaProxy contains AntreaProxy related configuration options.
antreaProxy:
@@ -2959,22 +296,22 @@ data:
# feature to be enabled.
# Note that this option is experimental. If kube-proxy is removed, option kubeAPIServerOverride must be used to access
# apiserver directly.
- #proxyAll: false
+ proxyAll: false
# A string array of values which specifies the host IPv4/IPv6 addresses for NodePort. Values can be valid IP blocks.
# (e.g. 1.2.3.0/24, 1.2.3.4/32). An empty string slice is meant to select all host IPv4/IPv6 addresses.
# Note that the option is only valid when proxyAll is true.
- #nodePortAddresses: []
+ nodePortAddresses:
# An array of string values to specify a list of Services which should be ignored by AntreaProxy (traffic to these
# Services will not be load-balanced). Values can be a valid ClusterIP (e.g. 10.11.1.2) or a Service name
# with Namespace (e.g. kube-system/kube-dns)
- #skipServices: []
+ skipServices:
# When ProxyLoadBalancerIPs is set to false, AntreaProxy no longer load-balances traffic destined to the
# External IPs of LoadBalancer Services. This is useful when the external LoadBalancer provides additional
# capabilities (e.g. TLS termination) and it is desirable for Pod-to-ExternalIP traffic to be sent to the
# external LoadBalancer instead of being load-balanced to an Endpoint directly by AntreaProxy.
# Note that setting ProxyLoadBalancerIPs to false usually only makes sense when ProxyAll is set to true and
# kube-proxy is removed from the cluser, otherwise kube-proxy will still load-balance this traffic.
- #proxyLoadBalancerIPs: true
+ proxyLoadBalancerIPs: true
antrea-cni.conflist: |
{
"cniVersion":"0.3.0",
@@ -2985,11 +322,13 @@ data:
"ipam": {
"type": "host-local"
}
- },
+ }
+ ,
{
"type": "portmap",
"capabilities": {"portMappings": true}
- },
+ }
+ ,
{
"type": "bandwidth",
"capabilities": {"bandwidth": true}
@@ -3016,8 +355,9 @@ data:
# Run Kubernetes NodeIPAMController with Antrea.
# NodeIPAM: false
- # Enable flexible IPAM mode for Antrea. This mode allows to assign IP Ranges to Namespaces,
- # Deployments and StatefulSets via IP Pool annotation.
+ # Enable AntreaIPAM, which can allocate IP addresses from IPPools. AntreaIPAM is required by the
+ # bridging mode and allocates IPs to Pods in bridging mode. It is also required to use Antrea for
+ # IPAM when configuring secondary network interfaces with Multus.
# AntreaIPAM: false
# Enable managing external IPs of Services of LoadBalancer type.
@@ -3026,661 +366,3676 @@ data:
# The port for the antrea-controller APIServer to serve on.
# Note that if it's set to another value, the `containerPort` of the `api` port of the
# `antrea-controller` container must be set to the same value.
- #apiPort: 10349
+ apiPort: 10349
# Enable metrics exposure via Prometheus. Initializes Prometheus metrics listener.
- #enablePrometheusMetrics: true
+ enablePrometheusMetrics: true
# Indicates whether to use auto-generated self-signed TLS certificate.
- # If false, A Secret named "antrea-controller-tls" must be provided with the following keys:
+ # If false, a Secret named "antrea-controller-tls" must be provided with the following keys:
# ca.crt:
# tls.crt:
# tls.key:
- # And the Secret must be mounted to directory "/var/run/antrea/antrea-controller-tls" of the
- # antrea-controller container.
- #selfSignedCert: true
+ selfSignedCert: true
# Comma-separated list of Cipher Suites. If omitted, the default Go Cipher Suites will be used.
# https://golang.org/pkg/crypto/tls/#pkg-constants
# Note that TLS1.3 Cipher Suites cannot be added to the list. But the apiserver will always
# prefer TLS1.3 Cipher Suites whenever possible.
- #tlsCipherSuites:
+ tlsCipherSuites: ""
# TLS min version from: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13.
- #tlsMinVersion:
+ tlsMinVersion: ""
nodeIPAM:
- # Enable the integrated Node IPAM controller within the Antrea controller.
- # enableNodeIPAM: false
-
- # CIDR ranges for Pods in cluster. String array containing single CIDR range, or multiple ranges.
- # The CIDRs could be either IPv4 or IPv6. At most one CIDR may be specified for each IP family.
- # Value ignored when enableNodeIPAM is false.
- # clusterCIDRs: []
-
- # CIDR ranges for Services in cluster. It is not necessary to specify it when there is no overlap with clusterCIDRs.
- # Value ignored when enableNodeIPAM is false.
- # serviceCIDR:
- # serviceCIDRv6:
-
- # Mask size for IPv4 Node CIDR in IPv4 or dual-stack cluster. Value ignored when enableNodeIPAM is false
- # or when IPv4 Pod CIDR is not configured. Valid range is 16 to 30.
- # nodeCIDRMaskSizeIPv4: 24
-
- # Mask size for IPv6 Node CIDR in IPv6 or dual-stack cluster. Value ignored when enableNodeIPAM is false
- # or when IPv6 Pod CIDR is not configured. Valid range is 64 to 126.
- # nodeCIDRMaskSizeIPv6: 64
-kind: ConfigMap
+ # Enable the integrated Node IPAM controller within the Antrea controller.
+ enableNodeIPAM: false
+ # CIDR ranges for Pods in cluster. String array containing single CIDR range, or multiple ranges.
+ # The CIDRs could be either IPv4 or IPv6. At most one CIDR may be specified for each IP family.
+ # Value ignored when enableNodeIPAM is false.
+ clusterCIDRs:
+ # CIDR ranges for Services in cluster. It is not necessary to specify it when there is no overlap with clusterCIDRs.
+ # Value ignored when enableNodeIPAM is false.
+ serviceCIDR: ""
+ serviceCIDRv6: ""
+ # Mask size for IPv4 Node CIDR in IPv4 or dual-stack cluster. Value ignored when enableNodeIPAM is false
+ # or when IPv4 Pod CIDR is not configured. Valid range is 16 to 30.
+ nodeCIDRMaskSizeIPv4: 24
+ # Mask size for IPv6 Node CIDR in IPv6 or dual-stack cluster. Value ignored when enableNodeIPAM is false
+ # or when IPv6 Pod CIDR is not configured. Valid range is 64 to 126.
+ nodeCIDRMaskSizeIPv6: 64
+---
+# Source: antrea/templates/crds/antreaagentinfo.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: antreaagentinfos.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1beta1
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ additionalPrinterColumns:
+ - description: Health status of this Agent
+ jsonPath: ".agentConditions[?(@.type=='AgentHealthy')].status"
+ name: Healthy
+ type: string
+ - description: Last time the Healthy Condition was updated
+ jsonPath: ".agentConditions[?(@.type=='AgentHealthy')].lastHeartbeatTime"
+ name: Last Heartbeat
+ type: date
+ - description: Version of this Agent
+ jsonPath: ".version"
+ name: Version
+ type: string
+ priority: 1
+ - description: Node on which this Agent is running
+ jsonPath: ".nodeRef.name"
+ name: Node
+ type: string
+ priority: 1
+ - description: Number of local Pods managed by this Agent
+ jsonPath: ".localPodNum"
+ name: Num Pods
+ type: integer
+ priority: 2
+ - description: Subnets used by this Agent for Pod IPAM
+ jsonPath: ".nodeSubnets"
+ name: Subnets
+ type: string
+ priority: 2
+ scope: Cluster
+ names:
+ plural: antreaagentinfos
+ singular: antreaagentinfo
+ kind: AntreaAgentInfo
+ shortNames:
+ - aai
+---
+# Source: antrea/templates/crds/antreacontrollerinfo.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: antreacontrollerinfos.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1beta1
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ additionalPrinterColumns:
+ - description: Health status of the Controller
+ jsonPath: ".controllerConditions[?(@.type=='ControllerHealthy')].status"
+ name: Healthy
+ type: string
+ - description: Last time the Healthy Condition was updated
+ jsonPath: ".controllerConditions[?(@.type=='ControllerHealthy')].lastHeartbeatTime"
+ name: Last Heartbeat
+ type: date
+ - description: Version of the Controller
+ jsonPath: ".version"
+ name: Version
+ type: string
+ priority: 1
+ - description: Number of Agents connected to the Controller
+ jsonPath: ".connectedAgentNum"
+ name: Connected Agents
+ type: integer
+ priority: 1
+ - description: Node on which the Controller is running
+ jsonPath: ".nodeRef.name"
+ name: Node
+ type: string
+ priority: 1
+ - description: Number of Network Policies computed by Controller
+ jsonPath: ".networkPolicyControllerInfo.networkPolicyNum"
+ name: Num Network Policies
+ type: integer
+ priority: 2
+ scope: Cluster
+ names:
+ plural: antreacontrollerinfos
+ singular: antreacontrollerinfo
+ kind: AntreaControllerInfo
+ shortNames:
+ - aci
+---
+# Source: antrea/templates/crds/clustergroup.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: clustergroups.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: false
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ properties:
+ childGroups:
+ type: array
+ items:
+ type: string
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ externalEntitySelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ ipBlocks:
+ type: array
+ items:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ serviceReference:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ status:
+ type: object
+ properties:
+ conditions:
+ type: array
+ items:
+ type: object
+ properties:
+ type:
+ type: string
+ status:
+ type: string
+ lastTransitionTime:
+ type: string
+ - name: v1alpha3
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ properties:
+ childGroups:
+ type: array
+ items:
+ type: string
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ externalEntitySelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ipBlocks:
+ type: array
+ items:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ serviceReference:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ status:
+ type: object
+ properties:
+ conditions:
+ type: array
+ items:
+ type: object
+ properties:
+ type:
+ type: string
+ status:
+ type: string
+ lastTransitionTime:
+ type: string
+ subresources:
+ status: {}
+ conversion:
+ strategy: Webhook
+ webhook:
+ conversionReviewVersions: ["v1", "v1beta1"]
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: "kube-system"
+ path: "/convert/clustergroup"
+ scope: Cluster
+ names:
+ plural: clustergroups
+ singular: clustergroup
+ kind: ClusterGroup
+ shortNames:
+ - cg
+---
+# Source: antrea/templates/crds/clusternetworkpolicy.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: clusternetworkpolicies.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha1
+ served: true
+ storage: true
+ additionalPrinterColumns:
+ - name: Tier
+ type: string
+ description: The Tier to which this ClusterNetworkPolicy belongs to.
+ jsonPath: .spec.tier
+ - name: Priority
+ type: number
+ format: float
+ description: The Priority of this ClusterNetworkPolicy relative to other policies.
+ jsonPath: .spec.priority
+ - name: Desired Nodes
+ type: number
+ format: int32
+ description: The total number of Nodes that should realize the NetworkPolicy.
+ jsonPath: .status.desiredNodesRealized
+ - name: Current Nodes
+ type: number
+ format: int32
+ description: The number of Nodes that have realized the NetworkPolicy.
+ jsonPath: .status.currentNodesRealized
+ - name: Age
+ type: date
+ jsonPath: .metadata.creationTimestamp
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ # Ensure that Spec.Priority field is set
+ required:
+ - priority
+ type: object
+ properties:
+ tier:
+ type: string
+ priority:
+ type: number
+ format: float
+ # Ensure that Spec.Priority field is between 1 and 10000
+ minimum: 1.0
+ maximum: 10000.0
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that Spec.AppliedTo does not allow IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ group:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ ingress:
+ type: array
+ items:
+ type: object
+ required:
+ - action
+ properties:
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that rule AppliedTo does not allow IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ group:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ # Ensure that Action field allows only ALLOW, DROP, REJECT and PASS values
+ action:
+ type: string
+ enum: ['Allow', 'Drop', 'Reject', 'Pass']
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ endPort:
+ type: integer
+ protocols:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required: [icmp]
+ properties:
+ icmp:
+ type: object
+ properties:
+ icmpType:
+ type: integer
+ minimum: 0
+ maximum: 255
+ icmpCode:
+ type: integer
+ minimum: 0
+ maximum: 255
+ from:
+ type: array
+ items:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaces:
+ type: object
+ properties:
+ match:
+ enum:
+ - Self
+ type: string
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ group:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ name:
+ type: string
+ enableLogging:
+ type: boolean
+ egress:
+ type: array
+ items:
+ type: object
+ required:
+ - action
+ properties:
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that rule AppliedTo does not allow IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ group:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ # Ensure that Action field allows only ALLOW, DROP, REJECT and PASS values
+ action:
+ type: string
+ enum: ['Allow', 'Drop', 'Reject', 'Pass']
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ endPort:
+ type: integer
+ protocols:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required: [icmp]
+ properties:
+ icmp:
+ type: object
+ properties:
+ icmpType:
+ type: integer
+ minimum: 0
+ maximum: 255
+ icmpCode:
+ type: integer
+ minimum: 0
+ maximum: 255
+ to:
+ type: array
+ items:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaces:
+ type: object
+ properties:
+ match:
+ enum:
+ - Self
+ type: string
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ group:
+ type: string
+ fqdn:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ toServices:
+ type: array
+ items:
+ type: object
+ required:
+ - name
+ - namespace
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ name:
+ type: string
+ enableLogging:
+ type: boolean
+ status:
+ type: object
+ properties:
+ phase:
+ type: string
+ observedGeneration:
+ type: integer
+ currentNodesRealized:
+ type: integer
+ desiredNodesRealized:
+ type: integer
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: clusternetworkpolicies
+ singular: clusternetworkpolicy
+ kind: ClusterNetworkPolicy
+ shortNames:
+ - acnp
+---
+# Source: antrea/templates/crds/egress.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: egresses.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ type: object
+ required:
+ - appliedTo
+ anyOf:
+ - required:
+ - egressIP
+ - required:
+ - externalIPPool
+ properties:
+ appliedTo:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ egressIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ externalIPPool:
+ type: string
+ status:
+ type: object
+ properties:
+ egressNode:
+ type: string
+ additionalPrinterColumns:
+ - description: Specifies the SNAT IP address for the selected workloads.
+ jsonPath: .spec.egressIP
+ name: EgressIP
+ type: string
+ - jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ - description: The Owner Node of egress IP
+ jsonPath: .status.egressNode
+ name: Node
+ type: string
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: egresses
+ singular: egress
+ kind: Egress
+ shortNames:
+ - eg
+---
+# Source: antrea/templates/crds/externalentity.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: externalentities.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ properties:
+ endpoints:
+ type: array
+ items:
+ type: object
+ properties:
+ ip:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ name:
+ type: string
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ name:
+ type: string
+ externalNode:
+ type: string
+ - name: v1alpha1
+ served: false
+ storage: false
+ schema:
+ openAPIV3Schema:
+ type: object
+ scope: Namespaced
+ names:
+ plural: externalentities
+ singular: externalentity
+ kind: ExternalEntity
+ shortNames:
+ - ee
+---
+# Source: antrea/templates/crds/externalippool.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: externalippools.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ type: object
+ required:
+ - ipRanges
+ - nodeSelector
+ properties:
+ ipRanges:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required:
+ - cidr
+ - required:
+ - start
+ - end
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ start:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ end:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ status:
+ type: object
+ properties:
+ usage:
+ type: object
+ properties:
+ total:
+ type: integer
+ used:
+ type: integer
+ additionalPrinterColumns:
+ - description: The number of total IPs
+ jsonPath: .status.usage.total
+ name: Total
+ type: integer
+ - description: The number of allocated IPs
+ jsonPath: .status.usage.used
+ name: Used
+ type: integer
+ - jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: externalippools
+ singular: externalippool
+ kind: ExternalIPPool
+ shortNames:
+ - eip
+---
+# Source: antrea/templates/crds/ippool.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: ippools.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ required:
+ - ipVersion
+ - ipRanges
+ type: object
+ properties:
+ ipVersion:
+ type: integer
+ ipRanges:
+ items:
+ oneOf:
+ - required:
+ - cidr
+ - gateway
+ - prefixLength
+ - required:
+ - start
+ - end
+ - gateway
+ - prefixLength
+ properties:
+ cidr:
+ format: cidr
+ type: string
+ start:
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ type: string
+ end:
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ type: string
+ gateway:
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ type: string
+ prefixLength:
+ type: integer
+ vlan:
+ type: integer
+ minimum: 0
+ maximum: 4094
+ type: object
+ type: array
+ status:
+ properties:
+ ipAddresses:
+ items:
+ properties:
+ ipAddress:
+ type: string
+ owner:
+ properties:
+ pod:
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ containerID:
+ type: string
+ ifName:
+ type: string
+ type: object
+ statefulSet:
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ index:
+ type: integer
+ type: object
+ type: object
+ phase:
+ type: string
+ type: object
+ type: array
+ type: object
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: ippools
+ singular: ippool
+ kind: IPPool
+ shortNames:
+ - ipp
+---
+# Source: antrea/templates/crds/networkpolicy.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: networkpolicies.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha1
+ served: true
+ storage: true
+ additionalPrinterColumns:
+ - name: Tier
+ type: string
+ description: The Tier to which this Antrea NetworkPolicy belongs to.
+ jsonPath: .spec.tier
+ - name: Priority
+ type: number
+ format: float
+ description: The Priority of this Antrea NetworkPolicy relative to other policies.
+ jsonPath: .spec.priority
+ - name: Desired Nodes
+ type: number
+ format: int32
+ description: The total number of Nodes that should realize the NetworkPolicy.
+ jsonPath: .status.desiredNodesRealized
+ - name: Current Nodes
+ type: number
+ format: int32
+ description: The number of Nodes that have realized the NetworkPolicy.
+ jsonPath: .status.currentNodesRealized
+ - name: Age
+ type: date
+ jsonPath: .metadata.creationTimestamp
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ # Ensure that Spec.Priority field is set
+ required:
+ - priority
+ type: object
+ properties:
+ tier:
+ type: string
+ priority:
+ type: number
+ format: float
+ # Ensure that Spec.Priority field is between 1 and 10000
+ minimum: 1.0
+ maximum: 10000.0
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that Spec.AppliedTo does not allow NamespaceSelector/IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ingress:
+ type: array
+ items:
+ type: object
+ required:
+ - action
+ properties:
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that rule AppliedTo does not allow NamespaceSelector/IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ # Ensure that Action field allows only ALLOW, DROP, REJECT and PASS values
+ action:
+ type: string
+ enum: ['Allow', 'Drop', 'Reject', 'Pass']
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ endPort:
+ type: integer
+ protocols:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required: [icmp]
+ properties:
+ icmp:
+ type: object
+ properties:
+ icmpType:
+ type: integer
+ minimum: 0
+ maximum: 255
+ icmpCode:
+ type: integer
+ minimum: 0
+ maximum: 255
+ from:
+ type: array
+ items:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ externalEntitySelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ name:
+ type: string
+ enableLogging:
+ type: boolean
+ egress:
+ type: array
+ items:
+ type: object
+ required:
+ - action
+ properties:
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that rule AppliedTo does not allow NamespaceSelector/IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ # Ensure that Action field allows only ALLOW, DROP, REJECT and PASS values
+ action:
+ type: string
+ enum: ['Allow', 'Drop', 'Reject', 'Pass']
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ endPort:
+ type: integer
+ protocols:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required: [icmp]
+ properties:
+ icmp:
+ type: object
+ properties:
+ icmpType:
+ type: integer
+ minimum: 0
+ maximum: 255
+ icmpCode:
+ type: integer
+ minimum: 0
+ maximum: 255
+ to:
+ type: array
+ items:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ externalEntitySelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ fqdn:
+ type: string
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ toServices:
+ type: array
+ items:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ name:
+ type: string
+ enableLogging:
+ type: boolean
+ status:
+ type: object
+ properties:
+ phase:
+ type: string
+ observedGeneration:
+ type: integer
+ currentNodesRealized:
+ type: integer
+ desiredNodesRealized:
+ type: integer
+ subresources:
+ status: {}
+ scope: Namespaced
+ names:
+ plural: networkpolicies
+ singular: networkpolicy
+ kind: NetworkPolicy
+ shortNames:
+ - anp
+---
+# Source: antrea/templates/crds/tier.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: tiers.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha1
+ served: true
+ storage: true
+ additionalPrinterColumns:
+ - name: Priority
+ type: integer
+ description: The Priority of this Tier relative to other Tiers.
+ jsonPath: .spec.priority
+ - name: Age
+ type: date
+ jsonPath: .metadata.creationTimestamp
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ required:
+ - priority
+ type: object
+ properties:
+ priority:
+ type: integer
+ minimum: 0
+ maximum: 255
+ description:
+ type: string
+ scope: Cluster
+ names:
+ plural: tiers
+ singular: tier
+ kind: Tier
+ shortNames:
+ - tr
+---
+# Source: antrea/templates/crds/traceflow.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: traceflows.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha1
+ served: true
+ storage: true
+ additionalPrinterColumns:
+ - jsonPath: .status.phase
+ description: The phase of the Traceflow.
+ name: Phase
+ type: string
+ - jsonPath: .spec.source.pod
+ description: The name of the source Pod.
+ name: Source-Pod
+ type: string
+ priority: 10
+ - jsonPath: .spec.destination.pod
+ description: The name of the destination Pod.
+ name: Destination-Pod
+ type: string
+ priority: 10
+ - jsonPath: .spec.destination.ip
+ description: The IP address of the destination.
+ name: Destination-IP
+ type: string
+ priority: 10
+ - jsonPath: .spec.liveTraffic
+ description: Trace live traffic.
+ name: Live-Traffic
+ type: boolean
+ priority: 10
+ - jsonPath: .spec.droppedOnly
+ description: Capture only the dropped packet.
+ name: Dropped-Only
+ type: boolean
+ priority: 10
+ - jsonPath: .spec.timeout
+ description: Timeout in seconds.
+ name: Timeout
+ type: integer
+ priority: 10
+ - jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ type: object
+ properties:
+ source:
+ type: object
+ properties:
+ pod:
+ type: string
+ namespace:
+ type: string
+ ip:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ destination:
+ type: object
+ properties:
+ pod:
+ type: string
+ service:
+ type: string
+ namespace:
+ type: string
+ ip:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ packet:
+ type: object
+ properties:
+ ipHeader:
+ type: object
+ properties:
+ srcIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ protocol:
+ type: integer
+ ttl:
+ type: integer
+ flags:
+ type: integer
+ ipv6Header:
+ type: object
+ properties:
+ srcIP:
+ type: string
+ format: ipv6
+ nextHeader:
+ type: integer
+ hopLimit:
+ type: integer
+ transportHeader:
+ type: object
+ properties:
+ icmp:
+ type: object
+ properties:
+ id:
+ type: integer
+ sequence:
+ type: integer
+ udp:
+ type: object
+ properties:
+ srcPort:
+ type: integer
+ dstPort:
+ type: integer
+ tcp:
+ type: object
+ properties:
+ srcPort:
+ type: integer
+ dstPort:
+ type: integer
+ flags:
+ type: integer
+ liveTraffic:
+ type: boolean
+ droppedOnly:
+ type: boolean
+ timeout:
+ type: integer
+ status:
+ type: object
+ properties:
+ reason:
+ type: string
+ dataplaneTag:
+ type: integer
+ phase:
+ type: string
+ startTime:
+ type: string
+ results:
+ type: array
+ items:
+ type: object
+ properties:
+ node:
+ type: string
+ role:
+ type: string
+ timestamp:
+ type: integer
+ observations:
+ type: array
+ items:
+ type: object
+ properties:
+ component:
+ type: string
+ componentInfo:
+ type: string
+ action:
+ type: string
+ pod:
+ type: string
+ dstMAC:
+ type: string
+ networkPolicy:
+ type: string
+ ttl:
+ type: integer
+ translatedSrcIP:
+ type: string
+ translatedDstIP:
+ type: string
+ tunnelDstIP:
+ type: string
+ capturedPacket:
+ properties:
+ srcIP:
+ type: string
+ dstIP:
+ type: string
+ length:
+ type: integer
+ ipHeader:
+ properties:
+ flags:
+ type: integer
+ protocol:
+ type: integer
+ ttl:
+ type: integer
+ type: object
+ ipv6Header:
+ properties:
+ hopLimit:
+ type: integer
+ nextHeader:
+ type: integer
+ type: object
+ transportHeader:
+ properties:
+ tcp:
+ properties:
+ dstPort:
+ type: integer
+ srcPort:
+ type: integer
+ flags:
+ type: integer
+ type: object
+ udp:
+ properties:
+ dstPort:
+ type: integer
+ srcPort:
+ type: integer
+ type: object
+ icmp:
+ properties:
+ id:
+ type: integer
+ sequence:
+ type: integer
+ type: object
+ type: object
+ type: object
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: traceflows
+ singular: traceflow
+ kind: Traceflow
+ shortNames:
+ - tf
+---
+# Source: antrea/templates/crds/trafficcontrol.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: trafficcontrols.crd.antrea.io
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ type: object
+ required:
+ - appliedTo
+ - direction
+ - action
+ - targetPort
+ properties:
+ appliedTo:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ direction:
+ type: string
+ enum:
+ - Ingress
+ - Egress
+ - Both
+ action:
+ type: string
+ enum:
+ - Mirror
+ - Redirect
+ targetPort:
+ type: object
+ oneOf:
+ - required: [ovsInternal]
+ - required: [device]
+ - required: [geneve]
+ - required: [vxlan]
+ - required: [gre]
+ - required: [erspan]
+ properties:
+ ovsInternal:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ device:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ geneve:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ vni:
+ type: integer
+ minimum: 0
+ maximum: 16777215
+ destinationPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ vxlan:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ vni:
+ type: integer
+ minimum: 0
+ maximum: 16777215
+ destinationPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ gre:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ key:
+ type: integer
+ minimum: 0
+ maximum: 4294967295
+ erspan:
+ type: object
+ required:
+ - remoteIP
+ - version
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ sessionID:
+ type: integer
+ minimum: 0
+ maximum: 1023
+ version:
+ type: integer
+ enum:
+ - 1
+ - 2
+ index:
+ type: integer
+ dir:
+ type: integer
+ enum:
+ - 0
+ - 1
+ hardwareID:
+ type: integer
+ returnPort:
+ type: object
+ oneOf:
+ - required: [ovsInternal]
+ - required: [device]
+ - required: [geneve]
+ - required: [vxlan]
+ - required: [gre]
+ properties:
+ ovsInternal:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ device:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ geneve:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ vni:
+ type: integer
+ minimum: 0
+ maximum: 16777215
+ destinationPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ vxlan:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ vni:
+ type: integer
+ minimum: 0
+ maximum: 16777215
+ destinationPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ gre:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ key:
+ type: integer
+ minimum: 0
+ maximum: 4294967295
+ additionalPrinterColumns:
+ - description: Specifies the direction of traffic that should be matched.
+ jsonPath: .spec.direction
+ name: Direction
+ type: string
+ - description: Specifies the action that should be taken for the traffic.
+ jsonPath: .spec.action
+ name: Action
+ type: string
+ - jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: trafficcontrols
+ singular: trafficcontrol
+ kind: TrafficControl
+ shortNames:
+ - tc
+---
+# Source: antrea/templates/agent/clusterrole.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antrea-agent
+ labels:
+ app: antrea
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - ""
+ resources:
+ - nodes/status
+ verbs:
+ - patch
+ - apiGroups:
+ - ""
+ resources:
+ - pods
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - ""
+ resources:
+ - pods/status
+ verbs:
+ - patch
+ - apiGroups:
+ - ""
+ resources:
+ - endpoints
+ - services
+ - namespaces
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - discovery.k8s.io
+ resources:
+ - endpointslices
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - antreaagentinfos
+ verbs:
+ - get
+ - create
+ - update
+ - delete
+ - apiGroups:
+ - controlplane.antrea.io
+ resources:
+ - networkpolicies
+ - appliedtogroups
+ - addressgroups
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - controlplane.antrea.io
+ resources:
+ - egressgroups
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - controlplane.antrea.io
+ resources:
+ - nodestatssummaries
+ verbs:
+ - create
+ - apiGroups:
+ - controlplane.antrea.io
+ resources:
+ - networkpolicies/status
+ verbs:
+ - create
+ - get
+ - apiGroups:
+ - authentication.k8s.io
+ resources:
+ - tokenreviews
+ verbs:
+ - create
+ - apiGroups:
+ - authorization.k8s.io
+ resources:
+ - subjectaccessreviews
+ verbs:
+ - create
+ # This is the content of built-in role kube-system/extension-apiserver-authentication-reader.
+ # But it doesn't have list/watch permission before K8s v1.17.0 so the extension apiserver (antrea-agent) will
+ # have permission issue after bumping up apiserver library to a version that supports dynamic authentication.
+ # See https://github.com/kubernetes/kubernetes/pull/85375
+ # To support K8s clusters older than v1.17.0, we grant the required permissions directly instead of relying on
+ # the extension-apiserver-authentication role.
+ - apiGroups:
+ - ""
+ resourceNames:
+ - extension-apiserver-authentication
+ resources:
+ - configmaps
+ verbs:
+ - get
+ - list
+ - watch
+ - apiGroups:
+ - ""
+ resources:
+ - configmaps
+ resourceNames:
+ - antrea-ca
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - traceflows
+ - traceflows/status
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - create
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - egresses
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - egresses/status
+ verbs:
+ - update
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - externalippools
+ - ippools
+ - trafficcontrols
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - ippools/status
+ verbs:
+ - update
+ - apiGroups:
+ - k8s.cni.cncf.io
+ resources:
+ - network-attachment-definitions
+ verbs:
+ - get
+ - list
+ - watch
+---
+# Source: antrea/templates/antctl/clusterrole.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antctl
+ labels:
+ app: antrea
+rules:
+ - apiGroups:
+ - controlplane.antrea.io
+ resources:
+ - networkpolicies
+ - appliedtogroups
+ - addressgroups
+ verbs:
+ - get
+ - list
+ - apiGroups:
+ - stats.antrea.io
+ resources:
+ - networkpolicystats
+ - antreaclusternetworkpolicystats
+ - antreanetworkpolicystats
+ verbs:
+ - get
+ - list
+ - apiGroups:
+ - system.antrea.io
+ resources:
+ - controllerinfos
+ - agentinfos
+ verbs:
+ - get
+ - apiGroups:
+ - system.antrea.io
+ resources:
+ - supportbundles
+ verbs:
+ - get
+ - post
+ - apiGroups:
+ - system.antrea.io
+ resources:
+ - supportbundles/download
+ verbs:
+ - get
+ - nonResourceURLs:
+ - /agentinfo
+ - /addressgroups
+ - /appliedtogroups
+ - /loglevel
+ - /networkpolicies
+ - /ovsflows
+ - /ovstracing
+ - /podinterfaces
+ - /featuregates
+ - /serviceexternalip
+ verbs:
+ - get
+---
+# Source: antrea/templates/cluster-identity-reader/clusterrolebinding.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antrea-cluster-identity-reader
+ labels:
+ app: antrea
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - configmaps
+ resourceNames:
+ - antrea-cluster-identity
+ verbs:
+ - get
+---
+# Source: antrea/templates/controller/clusterrole.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antrea-controller
+ labels:
+ app: antrea
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - pods
+ - services
+ - namespaces
+ - configmaps
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ verbs:
+ - get
+ - watch
+ - list
+ - patch
+ - apiGroups:
+ - ""
+ resources:
+ - services/status
+ verbs:
+ - update
+ - apiGroups:
+ - networking.k8s.io
+ resources:
+ - networkpolicies
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - authentication.k8s.io
+ resources:
+ - tokenreviews
+ verbs:
+ - create
+ - apiGroups:
+ - authorization.k8s.io
+ resources:
+ - subjectaccessreviews
+ verbs:
+ - create
+ - apiGroups:
+ - apiextensions.k8s.io
+ resources:
+ - customresourcedefinitions
+ verbs:
+ - get
+ - update
+ # This is the content of built-in role kube-system/extension-apiserver-authentication-reader.
+ # But it doesn't have list/watch permission before K8s v1.17.0 so the extension apiserver (antrea-controller) will
+ # have permission issue after bumping up apiserver library to a version that supports dynamic authentication.
+ # See https://github.com/kubernetes/kubernetes/pull/85375
+ # To support K8s clusters older than v1.17.0, we grant the required permissions directly instead of relying on
+ # the extension-apiserver-authentication role.
+ - apiGroups:
+ - ""
+ resourceNames:
+ - extension-apiserver-authentication
+ resources:
+ - configmaps
+ verbs:
+ - get
+ - list
+ - watch
+ - apiGroups:
+ - ""
+ resources:
+ - configmaps
+ resourceNames:
+ - antrea-ca
+ - antrea-cluster-identity
+ verbs:
+ - get
+ - update
+ - apiGroups:
+ - ""
+ resources:
+ - configmaps
+ verbs:
+ - create
+ - apiGroups:
+ - apiregistration.k8s.io
+ resources:
+ - apiservices
+ resourceNames:
+ - v1alpha1.stats.antrea.io
+ - v1beta1.system.antrea.io
+ - v1beta2.controlplane.antrea.io
+ verbs:
+ - get
+ - update
+ - apiGroups:
+ - apiregistration.k8s.io
+ resources:
+ - apiservices
+ resourceNames:
+ - v1beta1.networking.antrea.tanzu.vmware.com
+ - v1beta1.controlplane.antrea.tanzu.vmware.com
+ - v1alpha1.stats.antrea.tanzu.vmware.com
+ - v1beta1.system.antrea.tanzu.vmware.com
+ - v1beta2.controlplane.antrea.tanzu.vmware.com
+ verbs:
+ - delete
+ - apiGroups:
+ - admissionregistration.k8s.io
+ resources:
+ - mutatingwebhookconfigurations
+ - validatingwebhookconfigurations
+ resourceNames:
+ # always give permissions for labelsmutator.antrea.io, even when the
+ # feature is disabled, to avoid errors in antrea-controller when updating
+ # the CA cert.
+ - labelsmutator.antrea.io
+ - crdmutator.antrea.io
+ - crdvalidator.antrea.io
+ verbs:
+ - get
+ - update
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - antreacontrollerinfos
+ verbs:
+ - get
+ - create
+ - update
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - antreaagentinfos
+ verbs:
+ - list
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - clusternetworkpolicies
+ - networkpolicies
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - create
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - clusternetworkpolicies/status
+ - networkpolicies/status
+ verbs:
+ - update
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - tiers
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - create
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - traceflows
+ - traceflows/status
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - create
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - externalentities
+ - clustergroups
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - create
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - clustergroups/status
+ verbs:
+ - update
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - egresses
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - externalippools
+ - ippools
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - externalippools/status
+ - ippools/status
+ verbs:
+ - update
+ - apiGroups:
+ - apps
+ resources:
+ - statefulsets
+ verbs:
+ - get
+ - list
+ - watch
+---
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
metadata:
+ name: aggregate-antrea-policies-edit
labels:
app: antrea
- name: antrea-config-82h2mk24gg
- namespace: kube-system
+ # Add these permissions to the "admin" and "edit" default roles.
+ rbac.authorization.k8s.io/aggregate-to-admin: "true"
+ rbac.authorization.k8s.io/aggregate-to-edit: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["clusternetworkpolicies", "networkpolicies"]
+ verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
---
-apiVersion: v1
-kind: Service
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: aggregate-antrea-policies-view
+ labels:
+ app: antrea
+ # Add these permissions to the "view" default role.
+ rbac.authorization.k8s.io/aggregate-to-view: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["clusternetworkpolicies", "networkpolicies"]
+ verbs: ["get", "list", "watch"]
+---
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: aggregate-traceflows-edit
+ labels:
+ app: antrea
+ # Add these permissions to the "admin" and "edit" default roles.
+ rbac.authorization.k8s.io/aggregate-to-admin: "true"
+ rbac.authorization.k8s.io/aggregate-to-edit: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["traceflows"]
+ verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
+---
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
metadata:
+ name: aggregate-traceflows-view
+ labels:
+ app: antrea
+ # Add these permissions to the "view" default role.
+ rbac.authorization.k8s.io/aggregate-to-view: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["traceflows"]
+ verbs: ["get", "list", "watch"]
+---
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: aggregate-antrea-clustergroups-edit
+ labels:
+ app: antrea
+ # Add these permissions to the "admin" and "edit" default roles.
+ rbac.authorization.k8s.io/aggregate-to-admin: "true"
+ rbac.authorization.k8s.io/aggregate-to-edit: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["clustergroups"]
+ verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
+---
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: aggregate-antrea-clustergroups-view
+ labels:
+ app: antrea
+ # Add these permissions to the "view" default role.
+ rbac.authorization.k8s.io/aggregate-to-view: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["clustergroups"]
+ verbs: ["get", "list", "watch"]
+---
+# Source: antrea/templates/agent/clusterrolebinding.yaml
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antrea-agent
+ labels:
+ app: antrea
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: antrea-agent
+subjects:
+ - kind: ServiceAccount
+ name: antrea-agent
+ namespace: kube-system
+---
+# Source: antrea/templates/antctl/clusterrolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ labels:
+ app: antrea
+ name: antctl
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: antctl
+subjects:
+ - kind: ServiceAccount
+ name: antctl
+ namespace: kube-system
+---
+# Source: antrea/templates/controller/clusterrolebinding.yaml
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antrea-controller
labels:
app: antrea
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: antrea-controller
+subjects:
+ - kind: ServiceAccount
+ name: antrea-controller
+ namespace: kube-system
+---
+# Source: antrea/templates/controller/service.yaml
+apiVersion: v1
+kind: Service
+metadata:
name: antrea
namespace: kube-system
+ labels:
+ app: antrea
spec:
ports:
- - port: 443
- protocol: TCP
- targetPort: api
+ - port: 443
+ protocol: TCP
+ targetPort: api
selector:
app: antrea
component: antrea-controller
---
+# Source: antrea/templates/agent/daemonset.yaml
apiVersion: apps/v1
-kind: Deployment
+kind: DaemonSet
metadata:
+ name: antrea-agent
+ namespace: kube-system
labels:
app: antrea
- component: antrea-controller
+ component: antrea-agent
+spec:
+ selector:
+ matchLabels:
+ app: antrea
+ component: antrea-agent
+ updateStrategy:
+ type: RollingUpdate
+ template:
+ metadata:
+ annotations:
+ # Starting with v1.21, Kubernetes supports default container annotation.
+ # Using "kubectl logs/exec/attach/cp" doesn't have to specify "-c antrea-agent" when troubleshooting.
+ kubectl.kubernetes.io/default-container: antrea-agent
+ # Automatically restart Pods with a RollingUpdate if the ConfigMap changes
+ # See https://helm.sh/docs/howto/charts_tips_and_tricks/#automatically-roll-deployments
+ checksum/config: fd449f30e949fff2d22ed79bca0a040535429c5b605b7b93dfdbfd3b359115ae
+ labels:
+ app: antrea
+ component: antrea-agent
+ spec:
+ hostNetwork: true
+ dnsPolicy: ClusterFirstWithHostNet
+ priorityClassName: system-node-critical
+ nodeSelector:
+ kubernetes.io/os: linux
+ tolerations:
+ - key: CriticalAddonsOnly
+ operator: Exists
+ - effect: NoSchedule
+ operator: Exists
+ - effect: NoExecute
+ operator: Exists
+ serviceAccountName: antrea-agent
+ initContainers:
+ - name: install-cni
+ image: "projects.registry.vmware.com/antrea/antrea-ubuntu:latest"
+ imagePullPolicy: IfNotPresent
+ resources:
+ requests:
+ cpu: 100m
+ command: ["install_cni_chaining"]
+ securityContext:
+ capabilities:
+ add:
+ # SYS_MODULE is required to load the OVS kernel module.
+ - SYS_MODULE
+ env:
+ # SKIP_CNI_BINARIES takes in values as a comma separated list of
+ # binaries that need to be skipped for installation, e.g. "portmap, bandwidth".
+ - name: SKIP_CNI_BINARIES
+ value: ""
+ volumeMounts:
+ - name: antrea-config
+ mountPath: /etc/antrea/antrea-cni.conflist
+ subPath: antrea-cni.conflist
+ readOnly: true
+ - name: host-cni-conf
+ mountPath: /host/etc/cni/net.d
+ - name: host-cni-bin
+ mountPath: /host/opt/cni/bin
+ # For loading the OVS kernel module.
+ - name: host-lib-modules
+ mountPath: /lib/modules
+ readOnly: true
+ # For changing the default permissions of the run directory.
+ - name: host-var-run-antrea
+ mountPath: /var/run/antrea
+ containers:
+ - name: antrea-agent
+ image: "projects.registry.vmware.com/antrea/antrea-ubuntu:latest"
+ imagePullPolicy: IfNotPresent
+ command: ["antrea-agent"]
+ # Log to both "/var/log/antrea/" and stderr (so "kubectl logs" can work).-
+ args:
+ - "--config=/etc/antrea/antrea-agent.conf"
+ - "--logtostderr=false"
+ - "--log_dir=/var/log/antrea"
+ - "--alsologtostderr"
+ - "--log_file_max_size=100"
+ - "--log_file_max_num=4"
+ env:
+ # Provide pod and node information for clusterinformation CRD.
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ - name: "ANTREA_CLOUD_EKS"
+ value: "true"
+ resources:
+ requests:
+ cpu: 200m
+ ports:
+ - containerPort: 10350
+ name: api
+ protocol: TCP
+ livenessProbe:
+ exec:
+ command:
+ - /bin/sh
+ - -c
+ - container_liveness_probe agent
+ initialDelaySeconds: 5
+ timeoutSeconds: 5
+ periodSeconds: 10
+ failureThreshold: 5
+ readinessProbe:
+ httpGet:
+ host: localhost
+ path: /readyz
+ port: api
+ scheme: HTTPS
+ initialDelaySeconds: 5
+ timeoutSeconds: 5
+ periodSeconds: 10
+ # In large-scale clusters, it may take up to 40~50 seconds for the antrea-agent to reconnect to the antrea
+ # Service after the antrea-controller restarts. The antrea-agent shouldn't be reported as NotReady in this
+ # scenario, otherwise the DaemonSet controller would restart all agents at once, as opposed to performing a
+ # rolling update. Set failureThreshold to 8 so it can tolerate 70s of disconnection.
+ failureThreshold: 8
+ securityContext:
+ # antrea-agent needs to perform sysctl configuration.
+ privileged: true
+ volumeMounts:
+ - name: antrea-config
+ mountPath: /etc/antrea/antrea-agent.conf
+ subPath: antrea-agent.conf
+ readOnly: true
+ - name: host-var-run-antrea
+ mountPath: /var/run/antrea
+ - name: host-var-run-antrea
+ mountPath: /var/run/openvswitch
+ subPath: openvswitch
+ # host-local IPAM stores allocated IP addresses as files in /var/lib/cni/networks/$NETWORK_NAME.
+ # Mount a sub-directory of host-var-run-antrea to it for persistence of IP allocation.
+ - name: host-var-run-antrea
+ mountPath: /var/lib/cni
+ subPath: cni
+ # We need to mount both the /proc directory and the /var/run/netns directory so that
+ # antrea-agent can open the network namespace path when setting up Pod
+ # networking. Different container runtimes may use /proc or /var/run/netns when invoking
+ # the CNI commands. Docker uses /proc and containerd uses /var/run/netns.
+ - name: host-var-log-antrea
+ mountPath: /var/log/antrea
+ - name: host-proc
+ mountPath: /host/proc
+ readOnly: true
+ - name: host-var-run-netns
+ mountPath: /host/var/run/netns
+ readOnly: true
+ # When a container is created, a mount point for the network namespace is added under
+ # /var/run/netns on the host, which needs to be propagated to the antrea-agent container.
+ mountPropagation: HostToContainer
+ - name: xtables-lock
+ mountPath: /run/xtables.lock
+ - name: antrea-ovs
+ image: "projects.registry.vmware.com/antrea/antrea-ubuntu:latest"
+ imagePullPolicy: IfNotPresent
+ resources:
+ requests:
+ cpu: 200m
+ command: ["start_ovs"]
+ args:
+ - "--log_file_max_size=100"
+ - "--log_file_max_num=4"
+ securityContext:
+ # capabilities required by OVS daemons
+ capabilities:
+ add:
+ - SYS_NICE
+ - NET_ADMIN
+ - SYS_ADMIN
+ - IPC_LOCK
+ livenessProbe:
+ exec:
+ # docker CRI doesn't honor timeoutSeconds, add "timeout" to the command as a workaround.
+ # https://github.com/kubernetes/kubernetes/issues/51901
+ command:
+ - /bin/sh
+ - -c
+ - timeout 10 container_liveness_probe ovs
+ initialDelaySeconds: 5
+ timeoutSeconds: 10
+ periodSeconds: 10
+ failureThreshold: 5
+ volumeMounts:
+ - name: host-var-run-antrea
+ mountPath: /var/run/openvswitch
+ subPath: openvswitch
+ - name: host-var-log-antrea
+ mountPath: /var/log/openvswitch
+ subPath: openvswitch
+ volumes:
+ - name: antrea-config
+ configMap:
+ name: antrea-config
+ - name: host-cni-conf
+ hostPath:
+ path: /etc/cni/net.d
+ - name: host-cni-bin
+ hostPath:
+ path: /opt/cni/bin
+ - name: host-proc
+ hostPath:
+ path: /proc
+ - name: host-var-run-netns
+ hostPath:
+ path: /var/run/netns
+ - name: host-var-run-antrea
+ hostPath:
+ path: /var/run/antrea
+ # we use subPath to create run subdirectories for different component (e.g. OVS) and
+ # subPath requires the base volume to exist
+ type: DirectoryOrCreate
+ - name: host-var-log-antrea
+ hostPath:
+ path: /var/log/antrea
+ # we use subPath to create logging subdirectories for different component (e.g. OVS)
+ type: DirectoryOrCreate
+ - name: host-lib-modules
+ hostPath:
+ path: /lib/modules
+ - name: xtables-lock
+ hostPath:
+ path: /run/xtables.lock
+ type: FileOrCreate
+---
+# Source: antrea/templates/controller/deployment.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
name: antrea-controller
namespace: kube-system
+ labels:
+ app: antrea
+ component: antrea-controller
spec:
- replicas: 1
+ strategy:
+ # Ensure the existing Pod is stopped before the new one is created.
+ type: Recreate
selector:
matchLabels:
app: antrea
component: antrea-controller
- strategy:
- type: Recreate
+ replicas: 1
template:
metadata:
+ annotations:
+ # Automatically restart Pod if the ConfigMap changes
+ # See https://helm.sh/docs/howto/charts_tips_and_tricks/#automatically-roll-deployments
+ checksum/config: fd449f30e949fff2d22ed79bca0a040535429c5b605b7b93dfdbfd3b359115ae
labels:
app: antrea
component: antrea-controller
spec:
- containers:
- - args:
- - --config
- - /etc/antrea/antrea-controller.conf
- - --logtostderr=false
- - --log_dir=/var/log/antrea
- - --alsologtostderr
- - --log_file_max_size=100
- - --log_file_max_num=4
- - --v=0
- command:
- - antrea-controller
- env:
- - name: POD_NAME
- valueFrom:
- fieldRef:
- fieldPath: metadata.name
- - name: POD_NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- - name: NODE_NAME
- valueFrom:
- fieldRef:
- fieldPath: spec.nodeName
- - name: SERVICEACCOUNT_NAME
- valueFrom:
- fieldRef:
- fieldPath: spec.serviceAccountName
- - name: ANTREA_CONFIG_MAP_NAME
- value: antrea-config-82h2mk24gg
- image: projects.registry.vmware.com/antrea/antrea-ubuntu:latest
- imagePullPolicy: IfNotPresent
- livenessProbe:
- failureThreshold: 5
- httpGet:
- host: localhost
- path: /livez
- port: api
- scheme: HTTPS
- periodSeconds: 10
- timeoutSeconds: 5
- name: antrea-controller
- ports:
- - containerPort: 10349
- name: api
- protocol: TCP
- readinessProbe:
- failureThreshold: 5
- httpGet:
- host: localhost
- path: /readyz
- port: api
- scheme: HTTPS
- initialDelaySeconds: 5
- periodSeconds: 10
- timeoutSeconds: 5
- resources:
- requests:
- cpu: 200m
- volumeMounts:
- - mountPath: /etc/antrea/antrea-controller.conf
- name: antrea-config
- readOnly: true
- subPath: antrea-controller.conf
- - mountPath: /var/run/antrea/antrea-controller-tls
- name: antrea-controller-tls
- - mountPath: /var/log/antrea
- name: host-var-log-antrea
- hostNetwork: true
nodeSelector:
kubernetes.io/os: linux
+ hostNetwork: true
priorityClassName: system-cluster-critical
- serviceAccountName: antrea-controller
tolerations:
- - key: CriticalAddonsOnly
- operator: Exists
- - effect: NoSchedule
- key: node-role.kubernetes.io/master
+ - key: CriticalAddonsOnly
+ operator: Exists
+ - effect: NoSchedule
+ key: node-role.kubernetes.io/master
+ - effect: NoSchedule
+ key: node-role.kubernetes.io/control-plane
+ serviceAccountName: antrea-controller
+ containers:
+ - name: antrea-controller
+ image: "projects.registry.vmware.com/antrea/antrea-ubuntu:latest"
+ imagePullPolicy: IfNotPresent
+ resources:
+ requests:
+ cpu: 200m
+ command: ["antrea-controller"]
+ # Log to both "/var/log/antrea/" and stderr (so "kubectl logs" can work).
+ args:
+ - "--config=/etc/antrea/antrea-controller.conf"
+ - "--logtostderr=false"
+ - "--log_dir=/var/log/antrea"
+ - "--alsologtostderr"
+ - "--log_file_max_size=100"
+ - "--log_file_max_num=4"
+ env:
+ # Provide pod and node information for clusterinformation CRD.
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ # Provide ServiceAccount name for validation webhook.
+ - name: SERVICEACCOUNT_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.serviceAccountName
+ - name: ANTREA_CONFIG_MAP_NAME
+ value: antrea-config
+ ports:
+ - containerPort: 10349
+ name: api
+ protocol: TCP
+ readinessProbe:
+ httpGet:
+ host: localhost
+ path: /readyz
+ port: api
+ scheme: HTTPS
+ initialDelaySeconds: 5
+ timeoutSeconds: 5
+ periodSeconds: 10
+ failureThreshold: 5
+ livenessProbe:
+ httpGet:
+ host: localhost
+ path: /livez
+ port: api
+ scheme: HTTPS
+ timeoutSeconds: 5
+ periodSeconds: 10
+ failureThreshold: 5
+ volumeMounts:
+ - name: antrea-config
+ mountPath: /etc/antrea/antrea-controller.conf
+ subPath: antrea-controller.conf
+ readOnly: true
+ - name: antrea-controller-tls
+ mountPath: /var/run/antrea/antrea-controller-tls
+ - name: host-var-log-antrea
+ mountPath: /var/log/antrea
volumes:
- - configMap:
- name: antrea-config-82h2mk24gg
- name: antrea-config
- - name: antrea-controller-tls
- secret:
- defaultMode: 256
- optional: true
- secretName: antrea-controller-tls
- - hostPath:
- path: /var/log/antrea
- type: DirectoryOrCreate
- name: host-var-log-antrea
+ - name: antrea-config
+ configMap:
+ name: antrea-config
+ # Make it optional as we only read it when selfSignedCert=false.
+ - name: antrea-controller-tls
+ secret:
+ secretName: antrea-controller-tls
+ defaultMode: 0400
+ optional: true
+ - name: host-var-log-antrea
+ hostPath:
+ path: /var/log/antrea
+ type: DirectoryOrCreate
---
+# Source: antrea/templates/controller/apiservices.yaml
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
+ name: v1beta2.controlplane.antrea.io
labels:
app: antrea
- name: v1alpha1.stats.antrea.io
spec:
- group: stats.antrea.io
+ group: controlplane.antrea.io
groupPriorityMinimum: 100
+ version: v1beta2
+ versionPriority: 100
service:
name: antrea
namespace: kube-system
- version: v1alpha1
- versionPriority: 100
---
+# Source: antrea/templates/controller/apiservices.yaml
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
+ name: v1beta1.system.antrea.io
labels:
app: antrea
- name: v1beta1.system.antrea.io
spec:
group: system.antrea.io
groupPriorityMinimum: 100
+ version: v1beta1
+ versionPriority: 100
service:
name: antrea
namespace: kube-system
- version: v1beta1
- versionPriority: 100
---
+# Source: antrea/templates/controller/apiservices.yaml
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
+ name: v1alpha1.stats.antrea.io
labels:
app: antrea
- name: v1beta2.controlplane.antrea.io
spec:
- group: controlplane.antrea.io
+ group: stats.antrea.io
groupPriorityMinimum: 100
+ version: v1alpha1
+ versionPriority: 100
service:
name: antrea
namespace: kube-system
- version: v1beta2
- versionPriority: 100
----
-apiVersion: apps/v1
-kind: DaemonSet
-metadata:
- labels:
- app: antrea
- component: antrea-agent
- name: antrea-agent
- namespace: kube-system
-spec:
- selector:
- matchLabels:
- app: antrea
- component: antrea-agent
- template:
- metadata:
- annotations:
- kubectl.kubernetes.io/default-container: antrea-agent
- labels:
- app: antrea
- component: antrea-agent
- spec:
- containers:
- - args:
- - --config
- - /etc/antrea/antrea-agent.conf
- - --logtostderr=false
- - --log_dir=/var/log/antrea
- - --alsologtostderr
- - --log_file_max_size=100
- - --log_file_max_num=4
- - --v=0
- command:
- - antrea-agent
- env:
- - name: ANTREA_CLOUD_EKS
- value: "true"
- - name: POD_NAME
- valueFrom:
- fieldRef:
- fieldPath: metadata.name
- - name: POD_NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- - name: NODE_NAME
- valueFrom:
- fieldRef:
- fieldPath: spec.nodeName
- image: projects.registry.vmware.com/antrea/antrea-ubuntu:latest
- imagePullPolicy: IfNotPresent
- livenessProbe:
- exec:
- command:
- - /bin/sh
- - -c
- - container_liveness_probe agent
- failureThreshold: 5
- initialDelaySeconds: 5
- periodSeconds: 10
- timeoutSeconds: 5
- name: antrea-agent
- ports:
- - containerPort: 10350
- name: api
- protocol: TCP
- readinessProbe:
- failureThreshold: 8
- httpGet:
- host: localhost
- path: /readyz
- port: api
- scheme: HTTPS
- initialDelaySeconds: 5
- periodSeconds: 10
- timeoutSeconds: 5
- resources:
- requests:
- cpu: 200m
- securityContext:
- privileged: true
- volumeMounts:
- - mountPath: /etc/antrea/antrea-agent.conf
- name: antrea-config
- readOnly: true
- subPath: antrea-agent.conf
- - mountPath: /var/run/antrea
- name: host-var-run-antrea
- - mountPath: /var/run/openvswitch
- name: host-var-run-antrea
- subPath: openvswitch
- - mountPath: /var/lib/cni
- name: host-var-run-antrea
- subPath: cni
- - mountPath: /var/log/antrea
- name: host-var-log-antrea
- - mountPath: /host/proc
- name: host-proc
- readOnly: true
- - mountPath: /host/var/run/netns
- mountPropagation: HostToContainer
- name: host-var-run-netns
- readOnly: true
- - mountPath: /run/xtables.lock
- name: xtables-lock
- - args:
- - --log_file_max_size=100
- - --log_file_max_num=4
- command:
- - start_ovs
- image: projects.registry.vmware.com/antrea/antrea-ubuntu:latest
- imagePullPolicy: IfNotPresent
- livenessProbe:
- exec:
- command:
- - /bin/sh
- - -c
- - timeout 10 container_liveness_probe ovs
- failureThreshold: 5
- initialDelaySeconds: 5
- periodSeconds: 10
- timeoutSeconds: 10
- name: antrea-ovs
- resources:
- requests:
- cpu: 200m
- securityContext:
- capabilities:
- add:
- - SYS_NICE
- - NET_ADMIN
- - SYS_ADMIN
- - IPC_LOCK
- volumeMounts:
- - mountPath: /var/run/openvswitch
- name: host-var-run-antrea
- subPath: openvswitch
- - mountPath: /var/log/openvswitch
- name: host-var-log-antrea
- subPath: openvswitch
- dnsPolicy: ClusterFirstWithHostNet
- hostNetwork: true
- initContainers:
- - command:
- - install_cni_chaining
- env:
- - name: SKIP_CNI_BINARIES
- value: ""
- image: projects.registry.vmware.com/antrea/antrea-ubuntu:latest
- imagePullPolicy: IfNotPresent
- name: install-cni
- resources:
- requests:
- cpu: 100m
- securityContext:
- capabilities:
- add:
- - SYS_MODULE
- volumeMounts:
- - mountPath: /etc/antrea/antrea-cni.conflist
- name: antrea-config
- readOnly: true
- subPath: antrea-cni.conflist
- - mountPath: /host/etc/cni/net.d
- name: host-cni-conf
- - mountPath: /host/opt/cni/bin
- name: host-cni-bin
- - mountPath: /lib/modules
- name: host-lib-modules
- readOnly: true
- - mountPath: /var/run/antrea
- name: host-var-run-antrea
- nodeSelector:
- kubernetes.io/os: linux
- priorityClassName: system-node-critical
- serviceAccountName: antrea-agent
- tolerations:
- - key: CriticalAddonsOnly
- operator: Exists
- - effect: NoSchedule
- operator: Exists
- - effect: NoExecute
- operator: Exists
- volumes:
- - configMap:
- name: antrea-config-82h2mk24gg
- name: antrea-config
- - hostPath:
- path: /etc/cni/net.d
- name: host-cni-conf
- - hostPath:
- path: /opt/cni/bin
- name: host-cni-bin
- - hostPath:
- path: /proc
- name: host-proc
- - hostPath:
- path: /var/run/netns
- name: host-var-run-netns
- - hostPath:
- path: /var/run/antrea
- type: DirectoryOrCreate
- name: host-var-run-antrea
- - hostPath:
- path: /var/log/antrea
- type: DirectoryOrCreate
- name: host-var-log-antrea
- - hostPath:
- path: /lib/modules
- name: host-lib-modules
- - hostPath:
- path: /run/xtables.lock
- type: FileOrCreate
- name: xtables-lock
- updateStrategy:
- type: RollingUpdate
---
+# Source: antrea/templates/webhooks/mutating/crdmutator.yaml
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata:
+ name: "crdmutator.antrea.io"
labels:
app: antrea
- name: crdmutator.antrea.io
webhooks:
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /mutate/acnp
- name: acnpmutator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - clusternetworkpolicies
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /mutate/anp
- name: anpmutator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - networkpolicies
- scope: Namespaced
- sideEffects: None
- timeoutSeconds: 5
+ - name: "acnpmutator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/mutate/acnp"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["clusternetworkpolicies"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "anpmutator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/mutate/anp"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["networkpolicies"]
+ scope: "Namespaced"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
---
+# Source: antrea/templates/webhooks/validating/crdvalidator.yaml
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
+ name: "crdvalidator.antrea.io"
labels:
app: antrea
- name: crdvalidator.antrea.io
webhooks:
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/tier
- name: tiervalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- - DELETE
- resources:
- - tiers
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/acnp
- name: acnpvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - clusternetworkpolicies
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/anp
- name: anpvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - networkpolicies
- scope: Namespaced
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/clustergroup
- name: clustergroupvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha3
- - v1alpha2
- operations:
- - CREATE
- - UPDATE
- resources:
- - clustergroups
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/externalippool
- name: externalippoolvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha2
- operations:
- - UPDATE
- resources:
- - externalippools
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/egress
- name: egressvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha2
- operations:
- - CREATE
- - UPDATE
- resources:
- - egresses
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/ippool
- name: ippoolvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha2
- operations:
- - CREATE
- - UPDATE
- - DELETE
- resources:
- - ippools
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
+ - name: "tiervalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/tier"
+ rules:
+ - operations: ["CREATE", "UPDATE", "DELETE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["tiers"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "acnpvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/acnp"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["clusternetworkpolicies"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "anpvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/anp"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["networkpolicies"]
+ scope: "Namespaced"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "clustergroupvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/clustergroup"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha3", "v1alpha2"]
+ resources: ["clustergroups"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "externalippoolvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/externalippool"
+ rules:
+ - operations: ["UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha2"]
+ resources: ["externalippools"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "egressvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/egress"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha2"]
+ resources: ["egresses"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "ippoolvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/ippool"
+ rules:
+ - operations: ["CREATE", "UPDATE", "DELETE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha2"]
+ resources: ["ippools"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
diff --git a/build/yamls/antrea-gke.yml b/build/yamls/antrea-gke.yml
index 78552174cbd..7294819af5f 100644
--- a/build/yamls/antrea-gke.yml
+++ b/build/yamls/antrea-gke.yml
@@ -1,2740 +1,59 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
+---
+# Source: antrea/templates/agent/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
metadata:
+ name: antrea-agent
+ namespace: kube-system
labels:
app: antrea
- name: antreaagentinfos.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: AntreaAgentInfo
- plural: antreaagentinfos
- shortNames:
- - aai
- singular: antreaagentinfo
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: Health status of this Agent
- jsonPath: .agentConditions[?(@.type=='AgentHealthy')].status
- name: Healthy
- type: string
- - description: Last time the Healthy Condition was updated
- jsonPath: .agentConditions[?(@.type=='AgentHealthy')].lastHeartbeatTime
- name: Last Heartbeat
- type: date
- - description: Version of this Agent
- jsonPath: .version
- name: Version
- priority: 1
- type: string
- - description: Node on which this Agent is running
- jsonPath: .nodeRef.name
- name: Node
- priority: 1
- type: string
- - description: Number of local Pods managed by this Agent
- jsonPath: .localPodNum
- name: Num Pods
- priority: 2
- type: integer
- - description: Subnets used by this Agent for Pod IPAM
- jsonPath: .nodeSubnets
- name: Subnets
- priority: 2
- type: string
- name: v1beta1
- schema:
- openAPIV3Schema:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- served: true
- storage: true
---
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
+# Source: antrea/templates/antctl/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
metadata:
+ name: antctl
+ namespace: kube-system
labels:
app: antrea
- name: antreacontrollerinfos.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: AntreaControllerInfo
- plural: antreacontrollerinfos
- shortNames:
- - aci
- singular: antreacontrollerinfo
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: Health status of the Controller
- jsonPath: .controllerConditions[?(@.type=='ControllerHealthy')].status
- name: Healthy
- type: string
- - description: Last time the Healthy Condition was updated
- jsonPath: .controllerConditions[?(@.type=='ControllerHealthy')].lastHeartbeatTime
- name: Last Heartbeat
- type: date
- - description: Version of the Controller
- jsonPath: .version
- name: Version
- priority: 1
- type: string
- - description: Number of Agents connected to the Controller
- jsonPath: .connectedAgentNum
- name: Connected Agents
- priority: 1
- type: integer
- - description: Node on which the Controller is running
- jsonPath: .nodeRef.name
- name: Node
- priority: 1
- type: string
- - description: Number of Network Policies computed by Controller
- jsonPath: .networkPolicyControllerInfo.networkPolicyNum
- name: Num Network Policies
- priority: 2
- type: integer
- name: v1beta1
- schema:
- openAPIV3Schema:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- served: true
- storage: true
---
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
+# Source: antrea/templates/controller/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
metadata:
+ name: antrea-controller
+ namespace: kube-system
labels:
app: antrea
- name: clustergroups.crd.antrea.io
-spec:
- conversion:
- strategy: Webhook
- webhook:
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /convert/clustergroup
- conversionReviewVersions:
- - v1
- - v1beta1
- group: crd.antrea.io
- names:
- kind: ClusterGroup
- plural: clustergroups
- shortNames:
- - cg
- singular: clustergroup
- scope: Cluster
- versions:
- - name: v1alpha2
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- childGroups:
- items:
- type: string
- type: array
- externalEntitySelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- ipBlock:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- ipBlocks:
- items:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- type: array
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceReference:
- properties:
- name:
- type: string
- namespace:
- type: string
- type: object
- type: object
- status:
- properties:
- conditions:
- items:
- properties:
- lastTransitionTime:
- type: string
- status:
- type: string
- type:
- type: string
- type: object
- type: array
- type: object
- type: object
- served: true
- storage: false
- - name: v1alpha3
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- childGroups:
- items:
- type: string
- type: array
- externalEntitySelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- ipBlocks:
- items:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- type: array
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceReference:
- properties:
- name:
- type: string
- namespace:
- type: string
- type: object
- type: object
- status:
- properties:
- conditions:
- items:
- properties:
- lastTransitionTime:
- type: string
- status:
- type: string
- type:
- type: string
- type: object
- type: array
- type: object
- type: object
- served: true
- storage: true
- subresources:
- status: {}
---
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
+# Source: antrea/templates/agent/secret.yaml
+apiVersion: v1
+kind: Secret
+metadata:
+ name: antrea-agent-service-account-token
+ namespace: kube-system
+ annotations:
+ kubernetes.io/service-account.name: antrea-agent
+type: kubernetes.io/service-account-token
+---
+# Source: antrea/templates/antctl/secret.yaml
+apiVersion: v1
+kind: Secret
+metadata:
+ name: antctl-service-account-token
+ namespace: kube-system
+ annotations:
+ kubernetes.io/service-account.name: antctl
+type: kubernetes.io/service-account-token
+---
+# Source: antrea/templates/configmap.yaml
+apiVersion: v1
+kind: ConfigMap
metadata:
+ name: antrea-config
+ namespace: kube-system
labels:
app: antrea
- name: clusternetworkpolicies.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: ClusterNetworkPolicy
- plural: clusternetworkpolicies
- shortNames:
- - acnp
- singular: clusternetworkpolicy
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: The Tier to which this ClusterNetworkPolicy belongs to.
- jsonPath: .spec.tier
- name: Tier
- type: string
- - description: The Priority of this ClusterNetworkPolicy relative to other policies.
- format: float
- jsonPath: .spec.priority
- name: Priority
- type: number
- - description: The total number of Nodes that should realize the NetworkPolicy.
- format: int32
- jsonPath: .status.desiredNodesRealized
- name: Desired Nodes
- type: number
- - description: The number of Nodes that have realized the NetworkPolicy.
- format: int32
- jsonPath: .status.currentNodesRealized
- name: Current Nodes
- type: number
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- appliedTo:
- items:
- properties:
- group:
- type: string
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceAccount:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: object
- type: array
- egress:
- items:
- properties:
- action:
- enum:
- - Allow
- - Drop
- - Reject
- - Pass
- type: string
- appliedTo:
- items:
- properties:
- group:
- type: string
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceAccount:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: object
- type: array
- enableLogging:
- type: boolean
- name:
- type: string
- ports:
- items:
- properties:
- endPort:
- type: integer
- port:
- x-kubernetes-int-or-string: true
- protocol:
- enum:
- - TCP
- - UDP
- - SCTP
- type: string
- type: object
- type: array
- to:
- items:
- properties:
- fqdn:
- type: string
- group:
- type: string
- ipBlock:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- namespaces:
- properties:
- match:
- type: string
- type: object
- nodeSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceAccount:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: object
- type: array
- toServices:
- items:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: array
- required:
- - action
- type: object
- type: array
- ingress:
- items:
- properties:
- action:
- enum:
- - Allow
- - Drop
- - Reject
- - Pass
- type: string
- appliedTo:
- items:
- properties:
- group:
- type: string
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceAccount:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: object
- type: array
- enableLogging:
- type: boolean
- from:
- items:
- properties:
- group:
- type: string
- ipBlock:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- namespaces:
- properties:
- match:
- enum:
- - Self
- type: string
- type: object
- nodeSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceAccount:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: object
- type: array
- name:
- type: string
- ports:
- items:
- properties:
- endPort:
- type: integer
- port:
- x-kubernetes-int-or-string: true
- protocol:
- enum:
- - TCP
- - UDP
- - SCTP
- type: string
- type: object
- type: array
- required:
- - action
- type: object
- type: array
- priority:
- format: float
- maximum: 10000
- minimum: 1
- type: number
- tier:
- type: string
- required:
- - priority
- type: object
- status:
- properties:
- currentNodesRealized:
- type: integer
- desiredNodesRealized:
- type: integer
- observedGeneration:
- type: integer
- phase:
- type: string
- type: object
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: egresses.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: Egress
- plural: egresses
- shortNames:
- - eg
- singular: egress
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: Specifies the SNAT IP address for the selected workloads.
- jsonPath: .spec.egressIP
- name: EgressIP
- type: string
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- - description: The Owner Node of egress IP
- jsonPath: .status.egressNode
- name: Node
- type: string
- name: v1alpha2
- schema:
- openAPIV3Schema:
- properties:
- spec:
- anyOf:
- - required:
- - egressIP
- - required:
- - externalIPPool
- properties:
- appliedTo:
- properties:
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- egressIP:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- externalIPPool:
- type: string
- required:
- - appliedTo
- type: object
- status:
- properties:
- egressNode:
- type: string
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: externalentities.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: ExternalEntity
- plural: externalentities
- shortNames:
- - ee
- singular: externalentity
- scope: Namespaced
- versions:
- - name: v1alpha2
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- endpoints:
- items:
- properties:
- ip:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- name:
- type: string
- type: object
- type: array
- externalNode:
- type: string
- ports:
- items:
- properties:
- name:
- type: string
- port:
- x-kubernetes-int-or-string: true
- protocol:
- enum:
- - TCP
- - UDP
- - SCTP
- type: string
- type: object
- type: array
- type: object
- type: object
- served: true
- storage: true
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- type: object
- served: false
- storage: false
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: externalippools.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: ExternalIPPool
- plural: externalippools
- shortNames:
- - eip
- singular: externalippool
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: The number of total IPs
- jsonPath: .status.usage.total
- name: Total
- type: integer
- - description: The number of allocated IPs
- jsonPath: .status.usage.used
- name: Used
- type: integer
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha2
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- ipRanges:
- items:
- oneOf:
- - required:
- - cidr
- - required:
- - start
- - end
- properties:
- cidr:
- format: cidr
- type: string
- end:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- start:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- type: object
- type: array
- nodeSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- required:
- - ipRanges
- - nodeSelector
- type: object
- status:
- properties:
- usage:
- properties:
- total:
- type: integer
- used:
- type: integer
- type: object
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: ippools.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: IPPool
- plural: ippools
- shortNames:
- - ipp
- singular: ippool
- scope: Cluster
- versions:
- - name: v1alpha2
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- ipRanges:
- items:
- oneOf:
- - required:
- - cidr
- - gateway
- - prefixLength
- - required:
- - start
- - end
- - gateway
- - prefixLength
- properties:
- cidr:
- format: cidr
- type: string
- end:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- gateway:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- prefixLength:
- type: integer
- start:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- vlan:
- maximum: 4094
- minimum: 0
- type: integer
- type: object
- type: array
- ipVersion:
- type: integer
- required:
- - ipVersion
- - ipRanges
- type: object
- status:
- properties:
- ipAddresses:
- items:
- properties:
- ipAddress:
- type: string
- owner:
- properties:
- pod:
- properties:
- containerID:
- type: string
- name:
- type: string
- namespace:
- type: string
- type: object
- statefulSet:
- properties:
- index:
- type: integer
- name:
- type: string
- namespace:
- type: string
- type: object
- type: object
- phase:
- type: string
- type: object
- type: array
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: networkpolicies.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: NetworkPolicy
- plural: networkpolicies
- shortNames:
- - anp
- singular: networkpolicy
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - description: The Tier to which this Antrea NetworkPolicy belongs to.
- jsonPath: .spec.tier
- name: Tier
- type: string
- - description: The Priority of this Antrea NetworkPolicy relative to other policies.
- format: float
- jsonPath: .spec.priority
- name: Priority
- type: number
- - description: The total number of Nodes that should realize the NetworkPolicy.
- format: int32
- jsonPath: .status.desiredNodesRealized
- name: Desired Nodes
- type: number
- - description: The number of Nodes that have realized the NetworkPolicy.
- format: int32
- jsonPath: .status.currentNodesRealized
- name: Current Nodes
- type: number
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- appliedTo:
- items:
- properties:
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: array
- egress:
- items:
- properties:
- action:
- enum:
- - Allow
- - Drop
- - Reject
- - Pass
- type: string
- appliedTo:
- items:
- properties:
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: array
- enableLogging:
- type: boolean
- name:
- type: string
- ports:
- items:
- properties:
- endPort:
- type: integer
- port:
- x-kubernetes-int-or-string: true
- protocol:
- enum:
- - TCP
- - UDP
- - SCTP
- type: string
- type: object
- type: array
- to:
- items:
- properties:
- externalEntitySelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- fqdn:
- type: string
- ipBlock:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- nodeSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: array
- toServices:
- items:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- type: object
- type: array
- required:
- - action
- type: object
- type: array
- ingress:
- items:
- properties:
- action:
- enum:
- - Allow
- - Drop
- - Reject
- - Pass
- type: string
- appliedTo:
- items:
- properties:
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: array
- enableLogging:
- type: boolean
- from:
- items:
- properties:
- externalEntitySelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- ipBlock:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- nodeSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: array
- name:
- type: string
- ports:
- items:
- properties:
- endPort:
- type: integer
- port:
- x-kubernetes-int-or-string: true
- protocol:
- enum:
- - TCP
- - UDP
- - SCTP
- type: string
- type: object
- type: array
- required:
- - action
- type: object
- type: array
- priority:
- format: float
- maximum: 10000
- minimum: 1
- type: number
- tier:
- type: string
- required:
- - priority
- type: object
- status:
- properties:
- currentNodesRealized:
- type: integer
- desiredNodesRealized:
- type: integer
- observedGeneration:
- type: integer
- phase:
- type: string
- type: object
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: tiers.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: Tier
- plural: tiers
- shortNames:
- - tr
- singular: tier
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: The Priority of this Tier relative to other Tiers.
- jsonPath: .spec.priority
- name: Priority
- type: integer
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- description:
- type: string
- priority:
- maximum: 255
- minimum: 0
- type: integer
- required:
- - priority
- type: object
- type: object
- served: true
- storage: true
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: traceflows.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: Traceflow
- plural: traceflows
- shortNames:
- - tf
- singular: traceflow
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: The phase of the Traceflow.
- jsonPath: .status.phase
- name: Phase
- type: string
- - description: The name of the source Pod.
- jsonPath: .spec.source.pod
- name: Source-Pod
- priority: 10
- type: string
- - description: The name of the destination Pod.
- jsonPath: .spec.destination.pod
- name: Destination-Pod
- priority: 10
- type: string
- - description: The IP address of the destination.
- jsonPath: .spec.destination.ip
- name: Destination-IP
- priority: 10
- type: string
- - description: Trace live traffic.
- jsonPath: .spec.liveTraffic
- name: Live-Traffic
- priority: 10
- type: boolean
- - description: Capture only the dropped packet.
- jsonPath: .spec.droppedOnly
- name: Dropped-Only
- priority: 10
- type: boolean
- - description: Timeout in seconds.
- jsonPath: .spec.timeout
- name: Timeout
- priority: 10
- type: integer
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- destination:
- properties:
- ip:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- namespace:
- type: string
- pod:
- type: string
- service:
- type: string
- type: object
- droppedOnly:
- type: boolean
- liveTraffic:
- type: boolean
- packet:
- properties:
- ipHeader:
- properties:
- flags:
- type: integer
- protocol:
- type: integer
- srcIP:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- ttl:
- type: integer
- type: object
- ipv6Header:
- properties:
- hopLimit:
- type: integer
- nextHeader:
- type: integer
- srcIP:
- format: ipv6
- type: string
- type: object
- transportHeader:
- properties:
- icmp:
- properties:
- id:
- type: integer
- sequence:
- type: integer
- type: object
- tcp:
- properties:
- dstPort:
- type: integer
- flags:
- type: integer
- srcPort:
- type: integer
- type: object
- udp:
- properties:
- dstPort:
- type: integer
- srcPort:
- type: integer
- type: object
- type: object
- type: object
- source:
- properties:
- ip:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- namespace:
- type: string
- pod:
- type: string
- type: object
- timeout:
- type: integer
- type: object
- status:
- properties:
- capturedPacket:
- properties:
- dstIP:
- type: string
- ipHeader:
- properties:
- flags:
- type: integer
- protocol:
- type: integer
- ttl:
- type: integer
- type: object
- ipv6Header:
- properties:
- hopLimit:
- type: integer
- nextHeader:
- type: integer
- type: object
- length:
- type: integer
- srcIP:
- type: string
- transportHeader:
- properties:
- icmp:
- properties:
- id:
- type: integer
- sequence:
- type: integer
- type: object
- tcp:
- properties:
- dstPort:
- type: integer
- flags:
- type: integer
- srcPort:
- type: integer
- type: object
- udp:
- properties:
- dstPort:
- type: integer
- srcPort:
- type: integer
- type: object
- type: object
- type: object
- dataplaneTag:
- type: integer
- phase:
- type: string
- reason:
- type: string
- results:
- items:
- properties:
- node:
- type: string
- observations:
- items:
- properties:
- action:
- type: string
- component:
- type: string
- componentInfo:
- type: string
- dstMAC:
- type: string
- networkPolicy:
- type: string
- pod:
- type: string
- translatedDstIP:
- type: string
- translatedSrcIP:
- type: string
- ttl:
- type: integer
- tunnelDstIP:
- type: string
- type: object
- type: array
- role:
- type: string
- timestamp:
- type: integer
- type: object
- type: array
- startTime:
- type: string
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- labels:
- app: antrea
- name: antctl
- namespace: kube-system
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- labels:
- app: antrea
- name: antrea-agent
- namespace: kube-system
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- labels:
- app: antrea
- name: antrea-controller
- namespace: kube-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-admin: "true"
- rbac.authorization.k8s.io/aggregate-to-edit: "true"
- name: aggregate-antrea-clustergroups-edit
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - clustergroups
- verbs:
- - get
- - list
- - watch
- - create
- - update
- - patch
- - delete
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-view: "true"
- name: aggregate-antrea-clustergroups-view
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - clustergroups
- verbs:
- - get
- - list
- - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-admin: "true"
- rbac.authorization.k8s.io/aggregate-to-edit: "true"
- name: aggregate-antrea-policies-edit
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - clusternetworkpolicies
- - networkpolicies
- verbs:
- - get
- - list
- - watch
- - create
- - update
- - patch
- - delete
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-view: "true"
- name: aggregate-antrea-policies-view
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - clusternetworkpolicies
- - networkpolicies
- verbs:
- - get
- - list
- - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-admin: "true"
- rbac.authorization.k8s.io/aggregate-to-edit: "true"
- name: aggregate-traceflows-edit
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - traceflows
- verbs:
- - get
- - list
- - watch
- - create
- - update
- - patch
- - delete
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-view: "true"
- name: aggregate-traceflows-view
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - traceflows
- verbs:
- - get
- - list
- - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- name: antctl
-rules:
-- apiGroups:
- - controlplane.antrea.io
- resources:
- - networkpolicies
- - appliedtogroups
- - addressgroups
- verbs:
- - get
- - list
-- apiGroups:
- - stats.antrea.io
- resources:
- - networkpolicystats
- - antreaclusternetworkpolicystats
- - antreanetworkpolicystats
- verbs:
- - get
- - list
-- apiGroups:
- - system.antrea.io
- resources:
- - controllerinfos
- - agentinfos
- verbs:
- - get
-- apiGroups:
- - system.antrea.io
- resources:
- - supportbundles
- verbs:
- - get
- - post
-- apiGroups:
- - system.antrea.io
- resources:
- - supportbundles/download
- verbs:
- - get
-- nonResourceURLs:
- - /agentinfo
- - /addressgroups
- - /appliedtogroups
- - /loglevel
- - /networkpolicies
- - /ovsflows
- - /ovstracing
- - /podinterfaces
- - /featuregates
- verbs:
- - get
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- name: antrea-agent
-rules:
-- apiGroups:
- - ""
- resources:
- - nodes
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - ""
- resources:
- - nodes/status
- verbs:
- - patch
-- apiGroups:
- - ""
- resources:
- - pods
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - ""
- resources:
- - pods/status
- verbs:
- - patch
-- apiGroups:
- - ""
- resources:
- - endpoints
- - services
- - namespaces
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - ""
- resources:
- - services/status
- verbs:
- - update
-- apiGroups:
- - discovery.k8s.io
- resources:
- - endpointslices
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - crd.antrea.io
- resources:
- - antreaagentinfos
- verbs:
- - get
- - create
- - update
- - delete
-- apiGroups:
- - controlplane.antrea.io
- resources:
- - networkpolicies
- - appliedtogroups
- - addressgroups
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - controlplane.antrea.io
- resources:
- - egressgroups
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - controlplane.antrea.io
- resources:
- - nodestatssummaries
- verbs:
- - create
-- apiGroups:
- - controlplane.antrea.io
- resources:
- - networkpolicies/status
- verbs:
- - create
- - get
-- apiGroups:
- - authentication.k8s.io
- resources:
- - tokenreviews
- verbs:
- - create
-- apiGroups:
- - authorization.k8s.io
- resources:
- - subjectaccessreviews
- verbs:
- - create
-- apiGroups:
- - ""
- resourceNames:
- - extension-apiserver-authentication
- resources:
- - configmaps
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - ""
- resourceNames:
- - antrea-ca
- resources:
- - configmaps
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - crd.antrea.io
- resources:
- - traceflows
- - traceflows/status
- verbs:
- - get
- - watch
- - list
- - update
- - patch
- - create
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - egresses
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - crd.antrea.io
- resources:
- - egresses/status
- verbs:
- - update
-- apiGroups:
- - crd.antrea.io
- resources:
- - externalippools
- - ippools
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - crd.antrea.io
- resources:
- - ippools/status
- verbs:
- - update
-- apiGroups:
- - k8s.cni.cncf.io
- resources:
- - network-attachment-definitions
- verbs:
- - get
- - list
- - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- name: antrea-cluster-identity-reader
-rules:
-- apiGroups:
- - ""
- resourceNames:
- - antrea-cluster-identity
- resources:
- - configmaps
- verbs:
- - get
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- name: antrea-controller
-rules:
-- apiGroups:
- - ""
- resources:
- - pods
- - services
- - namespaces
- - configmaps
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - ""
- resources:
- - nodes
- verbs:
- - get
- - watch
- - list
- - patch
-- apiGroups:
- - ""
- resources:
- - services/status
- verbs:
- - update
-- apiGroups:
- - networking.k8s.io
- resources:
- - networkpolicies
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - authentication.k8s.io
- resources:
- - tokenreviews
- verbs:
- - create
-- apiGroups:
- - authorization.k8s.io
- resources:
- - subjectaccessreviews
- verbs:
- - create
-- apiGroups:
- - apiextensions.k8s.io
- resources:
- - customresourcedefinitions
- verbs:
- - get
- - update
-- apiGroups:
- - ""
- resourceNames:
- - extension-apiserver-authentication
- resources:
- - configmaps
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - ""
- resourceNames:
- - antrea-ca
- - antrea-cluster-identity
- resources:
- - configmaps
- verbs:
- - get
- - update
-- apiGroups:
- - ""
- resources:
- - configmaps
- verbs:
- - create
-- apiGroups:
- - apiregistration.k8s.io
- resourceNames:
- - v1alpha1.stats.antrea.io
- - v1beta1.system.antrea.io
- - v1beta2.controlplane.antrea.io
- resources:
- - apiservices
- verbs:
- - get
- - update
-- apiGroups:
- - apiregistration.k8s.io
- resourceNames:
- - v1beta1.networking.antrea.tanzu.vmware.com
- - v1beta1.controlplane.antrea.tanzu.vmware.com
- - v1alpha1.stats.antrea.tanzu.vmware.com
- - v1beta1.system.antrea.tanzu.vmware.com
- - v1beta2.controlplane.antrea.tanzu.vmware.com
- resources:
- - apiservices
- verbs:
- - delete
-- apiGroups:
- - admissionregistration.k8s.io
- resourceNames:
- - labelsmutator.antrea.io
- - crdmutator.antrea.io
- - crdvalidator.antrea.io
- resources:
- - mutatingwebhookconfigurations
- - validatingwebhookconfigurations
- verbs:
- - get
- - update
-- apiGroups:
- - crd.antrea.io
- resources:
- - antreacontrollerinfos
- verbs:
- - get
- - create
- - update
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - antreaagentinfos
- verbs:
- - list
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - clusternetworkpolicies
- - networkpolicies
- verbs:
- - get
- - watch
- - list
- - update
- - patch
- - create
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - clusternetworkpolicies/status
- - networkpolicies/status
- verbs:
- - update
-- apiGroups:
- - crd.antrea.io
- resources:
- - tiers
- verbs:
- - get
- - watch
- - list
- - update
- - patch
- - create
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - traceflows
- - traceflows/status
- verbs:
- - get
- - watch
- - list
- - update
- - patch
- - create
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - externalentities
- - clustergroups
- verbs:
- - get
- - watch
- - list
- - update
- - patch
- - create
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - clustergroups/status
- verbs:
- - update
-- apiGroups:
- - crd.antrea.io
- resources:
- - egresses
- verbs:
- - get
- - watch
- - list
- - update
- - patch
-- apiGroups:
- - crd.antrea.io
- resources:
- - externalippools
- - ippools
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - crd.antrea.io
- resources:
- - externalippools/status
- - ippools/status
- verbs:
- - update
-- apiGroups:
- - apps
- resources:
- - statefulsets
- verbs:
- - get
- - list
- - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- labels:
- app: antrea
- name: antctl
- namespace: kube-system
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: antctl
-subjects:
-- kind: ServiceAccount
- name: antctl
- namespace: kube-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- labels:
- app: antrea
- name: antrea-agent
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: antrea-agent
-subjects:
-- kind: ServiceAccount
- name: antrea-agent
- namespace: kube-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- labels:
- app: antrea
- name: antrea-controller
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: antrea-controller
-subjects:
-- kind: ServiceAccount
- name: antrea-controller
- namespace: kube-system
----
-apiVersion: v1
data:
antrea-agent.conf: |
# FeatureGates is a map of feature names to bools that enable or disable experimental features.
@@ -2771,7 +90,8 @@ data:
# Egress: true
# Enable AntreaIPAM, which can allocate IP addresses from IPPools. AntreaIPAM is required by the
- # bridging mode and allocates IPs to Pods in bridging mode.
+ # bridging mode and allocates IPs to Pods in bridging mode. It is also required to use Antrea for
+ # IPAM when configuring secondary network interfaces with Multus.
# AntreaIPAM: false
# Enable multicast traffic. This feature is supported only with noEncap mode.
@@ -2785,21 +105,23 @@ data:
# Enable managing external IPs of Services of LoadBalancer type.
# ServiceExternalIP: false
+ # Enable mirroring or redirecting the traffic Pods send or receive.
+ # TrafficControl: false
+
# Name of the OpenVSwitch bridge antrea-agent will create and use.
# Make sure it doesn't conflict with your existing OpenVSwitch bridges.
- #ovsBridge: br-int
+ ovsBridge: "br-int"
# Datapath type to use for the OpenVSwitch bridge created by Antrea. Supported values are:
# - system
# - netdev
# 'system' is the default value and corresponds to the kernel datapath. Use 'netdev' to run
- # OVS in userspace mode (not fully supported yet). Userspace mode requires the tun device driver to
- # be available.
+ # OVS in userspace mode. Userspace mode requires the tun device driver to be available.
#ovsDatapathType: system
# Name of the interface antrea-agent will create and use for host <--> pod communication.
# Make sure it doesn't conflict with your existing interfaces.
- #hostGateway: antrea-gw0
+ hostGateway: "antrea-gw0"
# Determines how traffic is encapsulated. It has the following options:
# encap(default): Inter-node Pod traffic is always encapsulated and Pod to external network
@@ -2811,14 +133,14 @@ data:
# networkPolicyOnly: Antrea enforces NetworkPolicy only, and utilizes CNI chaining and delegates Pod
# IPAM and connectivity to the primary CNI.
#
- trafficEncapMode: noEncap
+ trafficEncapMode: "noEncap"
# Whether or not to SNAT (using the Node IP) the egress traffic from a Pod to the external network.
# This option is for the noEncap traffic mode only, and the default value is false. In the noEncap
# mode, if the cluster's Pod CIDR is reachable from the external network, then the Pod traffic to
# the external network needs not be SNAT'd. In the networkPolicyOnly mode, antrea-agent never
# performs SNAT and this option will be ignored; for other modes it must be set to false.
- #noSNAT: false
+ noSNAT: false
# Tunnel protocols used for encapsulating traffic across Nodes. If WireGuard is enabled in trafficEncryptionMode,
# this option will not take effect. Supported values:
@@ -2827,7 +149,7 @@ data:
# - gre
# - stt
# Note that "gre" is not supported for IPv6 clusters (IPv6-only or dual-stack clusters).
- #tunnelType: geneve
+ tunnelType: "geneve"
# Determines how tunnel traffic is encrypted. Currently encryption only works with encap mode.
# It has the following options:
@@ -2837,44 +159,54 @@ data:
# the PSK value must be passed to Antrea Agent through an environment
# variable: ANTREA_IPSEC_PSK.
# - wireGuard: Enable WireGuard for tunnel traffic encryption.
- #trafficEncryptionMode: none
+ trafficEncryptionMode: "none"
# Enable bridging mode of Pod network on Nodes, in which the Node's transport interface is connected
- # to the OVS bridge, and cross-Node/VLAN traffic from AntreaIPAM Pods (Pods whose IP addresses are
- # allocated by AntreaIPAM from IPPools) is sent to the underlay network via the uplink, and
- # forwarded/routed by the underlay network.
+ # to the OVS bridge, and cross-Node/VLAN traffic of AntreaIPAM Pods (Pods whose IP addresses are
+ # allocated by AntreaIPAM from IPPools) is sent to the underlay network, and forwarded/routed by the
+ # underlay network.
# This option requires the `AntreaIPAM` feature gate to be enabled. At this moment, it supports only
# IPv4 and Linux Nodes, and can be enabled only when `ovsDatapathType` is `system`,
# `trafficEncapMode` is `noEncap`, and `noSNAT` is true.
- #enableBridgingMode: false
+ enableBridgingMode: false
+
+ # Disable TX checksum offloading for container network interfaces. It's supposed to be set to true when the
+ # datapath doesn't support TX checksum offloading, which causes packets to be dropped due to bad checksum.
+ # It affects Pods running on Linux Nodes only.
+ disableTXChecksumOffload: false
# Default MTU to use for the host gateway interface and the network interface of each Pod.
# If omitted, antrea-agent will discover the MTU of the Node's primary interface and
# also adjust MTU to accommodate for tunnel encapsulation overhead (if applicable).
- #defaultMTU: 0
+ defaultMTU: 0
# wireGuard specifies WireGuard related configurations.
wireGuard:
- # The port for WireGuard to receive traffic.
- # port: 51820
+ # The port for WireGuard to receive traffic.
+ port: 51820
egress:
- # exceptCIDRs is the CIDR ranges to which outbound Pod traffic will not be SNAT'd by Egresses.
- # exceptCIDRs: []
+ # exceptCIDRs is the CIDR ranges to which outbound Pod traffic will not be SNAT'd by Egresses.
+ exceptCIDRs:
+
+ # ClusterIP CIDR range for Services. It's required when AntreaProxy is not enabled, and should be
+ # set to the same value as the one specified by --service-cluster-ip-range for kube-apiserver. When
+ # AntreaProxy is enabled, this parameter is not needed and will be ignored if provided.
+ serviceCIDR: ""
# ClusterIP CIDR range for IPv6 Services. It's required when using kube-proxy to provide IPv6 Service in a Dual-Stack
# cluster or an IPv6 only cluster. The value should be the same as the configuration for kube-apiserver specified by
# --service-cluster-ip-range. When AntreaProxy is enabled, this parameter is not needed.
# No default value for this field.
- #serviceCIDRv6:
+ serviceCIDRv6: ""
# The port for the antrea-agent APIServer to serve on.
# Note that if it's set to another value, the `containerPort` of the `api` port of the
# `antrea-agent` container must be set to the same value.
- #apiPort: 10350
+ apiPort: 10350
# Enable metrics exposure via Prometheus. Initializes Prometheus metrics listener.
- #enablePrometheusMetrics: true
+ enablePrometheusMetrics: true
# Provide the IPFIX collector address as a string with format :[][:].
# HOST can either be the DNS name or the IP of the Flow Collector. For example,
@@ -2885,50 +217,50 @@ data:
# If no PROTO is given, we consider "tls" as default. We support "tls", "tcp" and
# "udp" protocols. "tls" is used for securing communication between flow exporter and
# flow aggregator.
- #flowCollectorAddr: "flow-aggregator.flow-aggregator.svc:4739:tls"
+ flowCollectorAddr: "flow-aggregator.flow-aggregator.svc:4739:tls"
# Provide flow poll interval as a duration string. This determines how often the
# flow exporter dumps connections from the conntrack module. Flow poll interval
# should be greater than or equal to 1s (one second).
# Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
- #flowPollInterval: "5s"
+ flowPollInterval: "5s"
# Provide the active flow export timeout, which is the timeout after which a flow
# record is sent to the collector for active flows. Thus, for flows with a continuous
# stream of packets, a flow record will be exported to the collector once the elapsed
# time since the last export event is equal to the value of this timeout.
# Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
- #activeFlowExportTimeout: "30s"
+ activeFlowExportTimeout: "5s"
# Provide the idle flow export timeout, which is the timeout after which a flow
# record is sent to the collector for idle flows. A flow is considered idle if no
# packet matching this flow has been observed since the last export event.
# Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
- #idleFlowExportTimeout: "15s"
+ idleFlowExportTimeout: "15s"
nodePortLocal:
# Enable NodePortLocal, a feature used to make Pods reachable using port forwarding on the host. To
# enable this feature, you need to set "enable" to true, and ensure that the NodePortLocal feature
# gate is also enabled (which is the default).
- # enable: false
+ enable: false
# Provide the port range used by NodePortLocal. When the NodePortLocal feature is enabled, a port
# from that range will be assigned whenever a Pod's container defines a specific port to be exposed
# (each container can define a list of ports as pod.spec.containers[].ports), and all Node traffic
# directed to that port will be forwarded to the Pod.
- # portRange: 61000-62000
+ portRange: "61000-62000"
# Provide the address of Kubernetes apiserver, to override any value provided in kubeconfig or InClusterConfig.
# Defaults to "". It must be a host string, a host:port pair, or a URL to the base of the apiserver.
- #kubeAPIServerOverride: ""
+ kubeAPIServerOverride: ""
# Comma-separated list of Cipher Suites. If omitted, the default Go Cipher Suites will be used.
# https://golang.org/pkg/crypto/tls/#pkg-constants
# Note that TLS1.3 Cipher Suites cannot be added to the list. But the apiserver will always
# prefer TLS1.3 Cipher Suites whenever possible.
- #tlsCipherSuites:
+ tlsCipherSuites: ""
# TLS min version from: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13.
- #tlsMinVersion:
+ tlsMinVersion: ""
# The name of the interface on Node which is used for tunneling or routing the traffic across Nodes.
# If there are multiple IP addresses configured on the interface, the first one is used. The IP
@@ -2937,11 +269,16 @@ data:
# 1. transportInterface
# 2. transportInterfaceCIDRs
# 3. The Node IP
- #transportInterface:
+ transportInterface: ""
+ multicast:
# The names of the interfaces on Nodes that are used to forward multicast traffic.
# Defaults to transport interface if not set.
- #multicastInterfaces: []
+ multicastInterfaces:
+
+ # The interval at which the antrea-agent sends IGMP queries to Pods.
+ # Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
+ igmpQueryInterval: "125s"
# The network CIDRs of the interface on Node which is used for tunneling or routing the traffic across
# Nodes. If there are multiple interfaces configured the same network CIDR, the first one is used. The
@@ -2950,7 +287,7 @@ data:
# 1. transportInterface
# 2. transportInterfaceCIDRs
# 3. The Node IP
- #transportInterfaceCIDRs: [,]
+ transportInterfaceCIDRs:
# Option antreaProxy contains AntreaProxy related configuration options.
antreaProxy:
@@ -2959,22 +296,22 @@ data:
# feature to be enabled.
# Note that this option is experimental. If kube-proxy is removed, option kubeAPIServerOverride must be used to access
# apiserver directly.
- #proxyAll: false
+ proxyAll: false
# A string array of values which specifies the host IPv4/IPv6 addresses for NodePort. Values can be valid IP blocks.
# (e.g. 1.2.3.0/24, 1.2.3.4/32). An empty string slice is meant to select all host IPv4/IPv6 addresses.
# Note that the option is only valid when proxyAll is true.
- #nodePortAddresses: []
+ nodePortAddresses:
# An array of string values to specify a list of Services which should be ignored by AntreaProxy (traffic to these
# Services will not be load-balanced). Values can be a valid ClusterIP (e.g. 10.11.1.2) or a Service name
# with Namespace (e.g. kube-system/kube-dns)
- #skipServices: []
+ skipServices:
# When ProxyLoadBalancerIPs is set to false, AntreaProxy no longer load-balances traffic destined to the
# External IPs of LoadBalancer Services. This is useful when the external LoadBalancer provides additional
# capabilities (e.g. TLS termination) and it is desirable for Pod-to-ExternalIP traffic to be sent to the
# external LoadBalancer instead of being load-balanced to an Endpoint directly by AntreaProxy.
# Note that setting ProxyLoadBalancerIPs to false usually only makes sense when ProxyAll is set to true and
# kube-proxy is removed from the cluser, otherwise kube-proxy will still load-balance this traffic.
- #proxyLoadBalancerIPs: true
+ proxyLoadBalancerIPs: true
antrea-cni.conflist: |
{
"cniVersion":"0.3.0",
@@ -2985,11 +322,13 @@ data:
"ipam": {
"type": "host-local"
}
- },
+ }
+ ,
{
"type": "portmap",
"capabilities": {"portMappings": true}
- },
+ }
+ ,
{
"type": "bandwidth",
"capabilities": {"bandwidth": true}
@@ -3016,8 +355,9 @@ data:
# Run Kubernetes NodeIPAMController with Antrea.
# NodeIPAM: false
- # Enable flexible IPAM mode for Antrea. This mode allows to assign IP Ranges to Namespaces,
- # Deployments and StatefulSets via IP Pool annotation.
+ # Enable AntreaIPAM, which can allocate IP addresses from IPPools. AntreaIPAM is required by the
+ # bridging mode and allocates IPs to Pods in bridging mode. It is also required to use Antrea for
+ # IPAM when configuring secondary network interfaces with Multus.
# AntreaIPAM: false
# Enable managing external IPs of Services of LoadBalancer type.
@@ -3026,659 +366,3674 @@ data:
# The port for the antrea-controller APIServer to serve on.
# Note that if it's set to another value, the `containerPort` of the `api` port of the
# `antrea-controller` container must be set to the same value.
- #apiPort: 10349
+ apiPort: 10349
# Enable metrics exposure via Prometheus. Initializes Prometheus metrics listener.
- #enablePrometheusMetrics: true
+ enablePrometheusMetrics: true
# Indicates whether to use auto-generated self-signed TLS certificate.
- # If false, A Secret named "antrea-controller-tls" must be provided with the following keys:
+ # If false, a Secret named "antrea-controller-tls" must be provided with the following keys:
# ca.crt:
# tls.crt:
# tls.key:
- # And the Secret must be mounted to directory "/var/run/antrea/antrea-controller-tls" of the
- # antrea-controller container.
- #selfSignedCert: true
+ selfSignedCert: true
# Comma-separated list of Cipher Suites. If omitted, the default Go Cipher Suites will be used.
# https://golang.org/pkg/crypto/tls/#pkg-constants
# Note that TLS1.3 Cipher Suites cannot be added to the list. But the apiserver will always
# prefer TLS1.3 Cipher Suites whenever possible.
- #tlsCipherSuites:
+ tlsCipherSuites: ""
# TLS min version from: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13.
- #tlsMinVersion:
+ tlsMinVersion: ""
nodeIPAM:
- # Enable the integrated Node IPAM controller within the Antrea controller.
- # enableNodeIPAM: false
-
- # CIDR ranges for Pods in cluster. String array containing single CIDR range, or multiple ranges.
- # The CIDRs could be either IPv4 or IPv6. At most one CIDR may be specified for each IP family.
- # Value ignored when enableNodeIPAM is false.
- # clusterCIDRs: []
-
- # CIDR ranges for Services in cluster. It is not necessary to specify it when there is no overlap with clusterCIDRs.
- # Value ignored when enableNodeIPAM is false.
- # serviceCIDR:
- # serviceCIDRv6:
-
- # Mask size for IPv4 Node CIDR in IPv4 or dual-stack cluster. Value ignored when enableNodeIPAM is false
- # or when IPv4 Pod CIDR is not configured. Valid range is 16 to 30.
- # nodeCIDRMaskSizeIPv4: 24
-
- # Mask size for IPv6 Node CIDR in IPv6 or dual-stack cluster. Value ignored when enableNodeIPAM is false
- # or when IPv6 Pod CIDR is not configured. Valid range is 64 to 126.
- # nodeCIDRMaskSizeIPv6: 64
-kind: ConfigMap
+ # Enable the integrated Node IPAM controller within the Antrea controller.
+ enableNodeIPAM: false
+ # CIDR ranges for Pods in cluster. String array containing single CIDR range, or multiple ranges.
+ # The CIDRs could be either IPv4 or IPv6. At most one CIDR may be specified for each IP family.
+ # Value ignored when enableNodeIPAM is false.
+ clusterCIDRs:
+ # CIDR ranges for Services in cluster. It is not necessary to specify it when there is no overlap with clusterCIDRs.
+ # Value ignored when enableNodeIPAM is false.
+ serviceCIDR: ""
+ serviceCIDRv6: ""
+ # Mask size for IPv4 Node CIDR in IPv4 or dual-stack cluster. Value ignored when enableNodeIPAM is false
+ # or when IPv4 Pod CIDR is not configured. Valid range is 16 to 30.
+ nodeCIDRMaskSizeIPv4: 24
+ # Mask size for IPv6 Node CIDR in IPv6 or dual-stack cluster. Value ignored when enableNodeIPAM is false
+ # or when IPv6 Pod CIDR is not configured. Valid range is 64 to 126.
+ nodeCIDRMaskSizeIPv6: 64
+---
+# Source: antrea/templates/crds/antreaagentinfo.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: antreaagentinfos.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1beta1
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ additionalPrinterColumns:
+ - description: Health status of this Agent
+ jsonPath: ".agentConditions[?(@.type=='AgentHealthy')].status"
+ name: Healthy
+ type: string
+ - description: Last time the Healthy Condition was updated
+ jsonPath: ".agentConditions[?(@.type=='AgentHealthy')].lastHeartbeatTime"
+ name: Last Heartbeat
+ type: date
+ - description: Version of this Agent
+ jsonPath: ".version"
+ name: Version
+ type: string
+ priority: 1
+ - description: Node on which this Agent is running
+ jsonPath: ".nodeRef.name"
+ name: Node
+ type: string
+ priority: 1
+ - description: Number of local Pods managed by this Agent
+ jsonPath: ".localPodNum"
+ name: Num Pods
+ type: integer
+ priority: 2
+ - description: Subnets used by this Agent for Pod IPAM
+ jsonPath: ".nodeSubnets"
+ name: Subnets
+ type: string
+ priority: 2
+ scope: Cluster
+ names:
+ plural: antreaagentinfos
+ singular: antreaagentinfo
+ kind: AntreaAgentInfo
+ shortNames:
+ - aai
+---
+# Source: antrea/templates/crds/antreacontrollerinfo.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: antreacontrollerinfos.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1beta1
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ additionalPrinterColumns:
+ - description: Health status of the Controller
+ jsonPath: ".controllerConditions[?(@.type=='ControllerHealthy')].status"
+ name: Healthy
+ type: string
+ - description: Last time the Healthy Condition was updated
+ jsonPath: ".controllerConditions[?(@.type=='ControllerHealthy')].lastHeartbeatTime"
+ name: Last Heartbeat
+ type: date
+ - description: Version of the Controller
+ jsonPath: ".version"
+ name: Version
+ type: string
+ priority: 1
+ - description: Number of Agents connected to the Controller
+ jsonPath: ".connectedAgentNum"
+ name: Connected Agents
+ type: integer
+ priority: 1
+ - description: Node on which the Controller is running
+ jsonPath: ".nodeRef.name"
+ name: Node
+ type: string
+ priority: 1
+ - description: Number of Network Policies computed by Controller
+ jsonPath: ".networkPolicyControllerInfo.networkPolicyNum"
+ name: Num Network Policies
+ type: integer
+ priority: 2
+ scope: Cluster
+ names:
+ plural: antreacontrollerinfos
+ singular: antreacontrollerinfo
+ kind: AntreaControllerInfo
+ shortNames:
+ - aci
+---
+# Source: antrea/templates/crds/clustergroup.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: clustergroups.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: false
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ properties:
+ childGroups:
+ type: array
+ items:
+ type: string
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ externalEntitySelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ ipBlocks:
+ type: array
+ items:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ serviceReference:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ status:
+ type: object
+ properties:
+ conditions:
+ type: array
+ items:
+ type: object
+ properties:
+ type:
+ type: string
+ status:
+ type: string
+ lastTransitionTime:
+ type: string
+ - name: v1alpha3
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ properties:
+ childGroups:
+ type: array
+ items:
+ type: string
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ externalEntitySelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ipBlocks:
+ type: array
+ items:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ serviceReference:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ status:
+ type: object
+ properties:
+ conditions:
+ type: array
+ items:
+ type: object
+ properties:
+ type:
+ type: string
+ status:
+ type: string
+ lastTransitionTime:
+ type: string
+ subresources:
+ status: {}
+ conversion:
+ strategy: Webhook
+ webhook:
+ conversionReviewVersions: ["v1", "v1beta1"]
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: "kube-system"
+ path: "/convert/clustergroup"
+ scope: Cluster
+ names:
+ plural: clustergroups
+ singular: clustergroup
+ kind: ClusterGroup
+ shortNames:
+ - cg
+---
+# Source: antrea/templates/crds/clusternetworkpolicy.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: clusternetworkpolicies.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha1
+ served: true
+ storage: true
+ additionalPrinterColumns:
+ - name: Tier
+ type: string
+ description: The Tier to which this ClusterNetworkPolicy belongs to.
+ jsonPath: .spec.tier
+ - name: Priority
+ type: number
+ format: float
+ description: The Priority of this ClusterNetworkPolicy relative to other policies.
+ jsonPath: .spec.priority
+ - name: Desired Nodes
+ type: number
+ format: int32
+ description: The total number of Nodes that should realize the NetworkPolicy.
+ jsonPath: .status.desiredNodesRealized
+ - name: Current Nodes
+ type: number
+ format: int32
+ description: The number of Nodes that have realized the NetworkPolicy.
+ jsonPath: .status.currentNodesRealized
+ - name: Age
+ type: date
+ jsonPath: .metadata.creationTimestamp
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ # Ensure that Spec.Priority field is set
+ required:
+ - priority
+ type: object
+ properties:
+ tier:
+ type: string
+ priority:
+ type: number
+ format: float
+ # Ensure that Spec.Priority field is between 1 and 10000
+ minimum: 1.0
+ maximum: 10000.0
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that Spec.AppliedTo does not allow IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ group:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ ingress:
+ type: array
+ items:
+ type: object
+ required:
+ - action
+ properties:
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that rule AppliedTo does not allow IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ group:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ # Ensure that Action field allows only ALLOW, DROP, REJECT and PASS values
+ action:
+ type: string
+ enum: ['Allow', 'Drop', 'Reject', 'Pass']
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ endPort:
+ type: integer
+ protocols:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required: [icmp]
+ properties:
+ icmp:
+ type: object
+ properties:
+ icmpType:
+ type: integer
+ minimum: 0
+ maximum: 255
+ icmpCode:
+ type: integer
+ minimum: 0
+ maximum: 255
+ from:
+ type: array
+ items:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaces:
+ type: object
+ properties:
+ match:
+ enum:
+ - Self
+ type: string
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ group:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ name:
+ type: string
+ enableLogging:
+ type: boolean
+ egress:
+ type: array
+ items:
+ type: object
+ required:
+ - action
+ properties:
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that rule AppliedTo does not allow IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ group:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ # Ensure that Action field allows only ALLOW, DROP, REJECT and PASS values
+ action:
+ type: string
+ enum: ['Allow', 'Drop', 'Reject', 'Pass']
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ endPort:
+ type: integer
+ protocols:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required: [icmp]
+ properties:
+ icmp:
+ type: object
+ properties:
+ icmpType:
+ type: integer
+ minimum: 0
+ maximum: 255
+ icmpCode:
+ type: integer
+ minimum: 0
+ maximum: 255
+ to:
+ type: array
+ items:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaces:
+ type: object
+ properties:
+ match:
+ enum:
+ - Self
+ type: string
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ group:
+ type: string
+ fqdn:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ toServices:
+ type: array
+ items:
+ type: object
+ required:
+ - name
+ - namespace
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ name:
+ type: string
+ enableLogging:
+ type: boolean
+ status:
+ type: object
+ properties:
+ phase:
+ type: string
+ observedGeneration:
+ type: integer
+ currentNodesRealized:
+ type: integer
+ desiredNodesRealized:
+ type: integer
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: clusternetworkpolicies
+ singular: clusternetworkpolicy
+ kind: ClusterNetworkPolicy
+ shortNames:
+ - acnp
+---
+# Source: antrea/templates/crds/egress.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: egresses.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ type: object
+ required:
+ - appliedTo
+ anyOf:
+ - required:
+ - egressIP
+ - required:
+ - externalIPPool
+ properties:
+ appliedTo:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ egressIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ externalIPPool:
+ type: string
+ status:
+ type: object
+ properties:
+ egressNode:
+ type: string
+ additionalPrinterColumns:
+ - description: Specifies the SNAT IP address for the selected workloads.
+ jsonPath: .spec.egressIP
+ name: EgressIP
+ type: string
+ - jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ - description: The Owner Node of egress IP
+ jsonPath: .status.egressNode
+ name: Node
+ type: string
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: egresses
+ singular: egress
+ kind: Egress
+ shortNames:
+ - eg
+---
+# Source: antrea/templates/crds/externalentity.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: externalentities.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ properties:
+ endpoints:
+ type: array
+ items:
+ type: object
+ properties:
+ ip:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ name:
+ type: string
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ name:
+ type: string
+ externalNode:
+ type: string
+ - name: v1alpha1
+ served: false
+ storage: false
+ schema:
+ openAPIV3Schema:
+ type: object
+ scope: Namespaced
+ names:
+ plural: externalentities
+ singular: externalentity
+ kind: ExternalEntity
+ shortNames:
+ - ee
+---
+# Source: antrea/templates/crds/externalippool.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: externalippools.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ type: object
+ required:
+ - ipRanges
+ - nodeSelector
+ properties:
+ ipRanges:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required:
+ - cidr
+ - required:
+ - start
+ - end
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ start:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ end:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ status:
+ type: object
+ properties:
+ usage:
+ type: object
+ properties:
+ total:
+ type: integer
+ used:
+ type: integer
+ additionalPrinterColumns:
+ - description: The number of total IPs
+ jsonPath: .status.usage.total
+ name: Total
+ type: integer
+ - description: The number of allocated IPs
+ jsonPath: .status.usage.used
+ name: Used
+ type: integer
+ - jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: externalippools
+ singular: externalippool
+ kind: ExternalIPPool
+ shortNames:
+ - eip
+---
+# Source: antrea/templates/crds/ippool.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: ippools.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ required:
+ - ipVersion
+ - ipRanges
+ type: object
+ properties:
+ ipVersion:
+ type: integer
+ ipRanges:
+ items:
+ oneOf:
+ - required:
+ - cidr
+ - gateway
+ - prefixLength
+ - required:
+ - start
+ - end
+ - gateway
+ - prefixLength
+ properties:
+ cidr:
+ format: cidr
+ type: string
+ start:
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ type: string
+ end:
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ type: string
+ gateway:
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ type: string
+ prefixLength:
+ type: integer
+ vlan:
+ type: integer
+ minimum: 0
+ maximum: 4094
+ type: object
+ type: array
+ status:
+ properties:
+ ipAddresses:
+ items:
+ properties:
+ ipAddress:
+ type: string
+ owner:
+ properties:
+ pod:
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ containerID:
+ type: string
+ ifName:
+ type: string
+ type: object
+ statefulSet:
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ index:
+ type: integer
+ type: object
+ type: object
+ phase:
+ type: string
+ type: object
+ type: array
+ type: object
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: ippools
+ singular: ippool
+ kind: IPPool
+ shortNames:
+ - ipp
+---
+# Source: antrea/templates/crds/networkpolicy.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: networkpolicies.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha1
+ served: true
+ storage: true
+ additionalPrinterColumns:
+ - name: Tier
+ type: string
+ description: The Tier to which this Antrea NetworkPolicy belongs to.
+ jsonPath: .spec.tier
+ - name: Priority
+ type: number
+ format: float
+ description: The Priority of this Antrea NetworkPolicy relative to other policies.
+ jsonPath: .spec.priority
+ - name: Desired Nodes
+ type: number
+ format: int32
+ description: The total number of Nodes that should realize the NetworkPolicy.
+ jsonPath: .status.desiredNodesRealized
+ - name: Current Nodes
+ type: number
+ format: int32
+ description: The number of Nodes that have realized the NetworkPolicy.
+ jsonPath: .status.currentNodesRealized
+ - name: Age
+ type: date
+ jsonPath: .metadata.creationTimestamp
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ # Ensure that Spec.Priority field is set
+ required:
+ - priority
+ type: object
+ properties:
+ tier:
+ type: string
+ priority:
+ type: number
+ format: float
+ # Ensure that Spec.Priority field is between 1 and 10000
+ minimum: 1.0
+ maximum: 10000.0
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that Spec.AppliedTo does not allow NamespaceSelector/IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ingress:
+ type: array
+ items:
+ type: object
+ required:
+ - action
+ properties:
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that rule AppliedTo does not allow NamespaceSelector/IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ # Ensure that Action field allows only ALLOW, DROP, REJECT and PASS values
+ action:
+ type: string
+ enum: ['Allow', 'Drop', 'Reject', 'Pass']
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ endPort:
+ type: integer
+ protocols:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required: [icmp]
+ properties:
+ icmp:
+ type: object
+ properties:
+ icmpType:
+ type: integer
+ minimum: 0
+ maximum: 255
+ icmpCode:
+ type: integer
+ minimum: 0
+ maximum: 255
+ from:
+ type: array
+ items:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ externalEntitySelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ name:
+ type: string
+ enableLogging:
+ type: boolean
+ egress:
+ type: array
+ items:
+ type: object
+ required:
+ - action
+ properties:
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that rule AppliedTo does not allow NamespaceSelector/IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ # Ensure that Action field allows only ALLOW, DROP, REJECT and PASS values
+ action:
+ type: string
+ enum: ['Allow', 'Drop', 'Reject', 'Pass']
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ endPort:
+ type: integer
+ protocols:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required: [icmp]
+ properties:
+ icmp:
+ type: object
+ properties:
+ icmpType:
+ type: integer
+ minimum: 0
+ maximum: 255
+ icmpCode:
+ type: integer
+ minimum: 0
+ maximum: 255
+ to:
+ type: array
+ items:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ externalEntitySelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ fqdn:
+ type: string
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ toServices:
+ type: array
+ items:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ name:
+ type: string
+ enableLogging:
+ type: boolean
+ status:
+ type: object
+ properties:
+ phase:
+ type: string
+ observedGeneration:
+ type: integer
+ currentNodesRealized:
+ type: integer
+ desiredNodesRealized:
+ type: integer
+ subresources:
+ status: {}
+ scope: Namespaced
+ names:
+ plural: networkpolicies
+ singular: networkpolicy
+ kind: NetworkPolicy
+ shortNames:
+ - anp
+---
+# Source: antrea/templates/crds/tier.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: tiers.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha1
+ served: true
+ storage: true
+ additionalPrinterColumns:
+ - name: Priority
+ type: integer
+ description: The Priority of this Tier relative to other Tiers.
+ jsonPath: .spec.priority
+ - name: Age
+ type: date
+ jsonPath: .metadata.creationTimestamp
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ required:
+ - priority
+ type: object
+ properties:
+ priority:
+ type: integer
+ minimum: 0
+ maximum: 255
+ description:
+ type: string
+ scope: Cluster
+ names:
+ plural: tiers
+ singular: tier
+ kind: Tier
+ shortNames:
+ - tr
+---
+# Source: antrea/templates/crds/traceflow.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: traceflows.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha1
+ served: true
+ storage: true
+ additionalPrinterColumns:
+ - jsonPath: .status.phase
+ description: The phase of the Traceflow.
+ name: Phase
+ type: string
+ - jsonPath: .spec.source.pod
+ description: The name of the source Pod.
+ name: Source-Pod
+ type: string
+ priority: 10
+ - jsonPath: .spec.destination.pod
+ description: The name of the destination Pod.
+ name: Destination-Pod
+ type: string
+ priority: 10
+ - jsonPath: .spec.destination.ip
+ description: The IP address of the destination.
+ name: Destination-IP
+ type: string
+ priority: 10
+ - jsonPath: .spec.liveTraffic
+ description: Trace live traffic.
+ name: Live-Traffic
+ type: boolean
+ priority: 10
+ - jsonPath: .spec.droppedOnly
+ description: Capture only the dropped packet.
+ name: Dropped-Only
+ type: boolean
+ priority: 10
+ - jsonPath: .spec.timeout
+ description: Timeout in seconds.
+ name: Timeout
+ type: integer
+ priority: 10
+ - jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ type: object
+ properties:
+ source:
+ type: object
+ properties:
+ pod:
+ type: string
+ namespace:
+ type: string
+ ip:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ destination:
+ type: object
+ properties:
+ pod:
+ type: string
+ service:
+ type: string
+ namespace:
+ type: string
+ ip:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ packet:
+ type: object
+ properties:
+ ipHeader:
+ type: object
+ properties:
+ srcIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ protocol:
+ type: integer
+ ttl:
+ type: integer
+ flags:
+ type: integer
+ ipv6Header:
+ type: object
+ properties:
+ srcIP:
+ type: string
+ format: ipv6
+ nextHeader:
+ type: integer
+ hopLimit:
+ type: integer
+ transportHeader:
+ type: object
+ properties:
+ icmp:
+ type: object
+ properties:
+ id:
+ type: integer
+ sequence:
+ type: integer
+ udp:
+ type: object
+ properties:
+ srcPort:
+ type: integer
+ dstPort:
+ type: integer
+ tcp:
+ type: object
+ properties:
+ srcPort:
+ type: integer
+ dstPort:
+ type: integer
+ flags:
+ type: integer
+ liveTraffic:
+ type: boolean
+ droppedOnly:
+ type: boolean
+ timeout:
+ type: integer
+ status:
+ type: object
+ properties:
+ reason:
+ type: string
+ dataplaneTag:
+ type: integer
+ phase:
+ type: string
+ startTime:
+ type: string
+ results:
+ type: array
+ items:
+ type: object
+ properties:
+ node:
+ type: string
+ role:
+ type: string
+ timestamp:
+ type: integer
+ observations:
+ type: array
+ items:
+ type: object
+ properties:
+ component:
+ type: string
+ componentInfo:
+ type: string
+ action:
+ type: string
+ pod:
+ type: string
+ dstMAC:
+ type: string
+ networkPolicy:
+ type: string
+ ttl:
+ type: integer
+ translatedSrcIP:
+ type: string
+ translatedDstIP:
+ type: string
+ tunnelDstIP:
+ type: string
+ capturedPacket:
+ properties:
+ srcIP:
+ type: string
+ dstIP:
+ type: string
+ length:
+ type: integer
+ ipHeader:
+ properties:
+ flags:
+ type: integer
+ protocol:
+ type: integer
+ ttl:
+ type: integer
+ type: object
+ ipv6Header:
+ properties:
+ hopLimit:
+ type: integer
+ nextHeader:
+ type: integer
+ type: object
+ transportHeader:
+ properties:
+ tcp:
+ properties:
+ dstPort:
+ type: integer
+ srcPort:
+ type: integer
+ flags:
+ type: integer
+ type: object
+ udp:
+ properties:
+ dstPort:
+ type: integer
+ srcPort:
+ type: integer
+ type: object
+ icmp:
+ properties:
+ id:
+ type: integer
+ sequence:
+ type: integer
+ type: object
+ type: object
+ type: object
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: traceflows
+ singular: traceflow
+ kind: Traceflow
+ shortNames:
+ - tf
+---
+# Source: antrea/templates/crds/trafficcontrol.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: trafficcontrols.crd.antrea.io
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ type: object
+ required:
+ - appliedTo
+ - direction
+ - action
+ - targetPort
+ properties:
+ appliedTo:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ direction:
+ type: string
+ enum:
+ - Ingress
+ - Egress
+ - Both
+ action:
+ type: string
+ enum:
+ - Mirror
+ - Redirect
+ targetPort:
+ type: object
+ oneOf:
+ - required: [ovsInternal]
+ - required: [device]
+ - required: [geneve]
+ - required: [vxlan]
+ - required: [gre]
+ - required: [erspan]
+ properties:
+ ovsInternal:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ device:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ geneve:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ vni:
+ type: integer
+ minimum: 0
+ maximum: 16777215
+ destinationPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ vxlan:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ vni:
+ type: integer
+ minimum: 0
+ maximum: 16777215
+ destinationPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ gre:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ key:
+ type: integer
+ minimum: 0
+ maximum: 4294967295
+ erspan:
+ type: object
+ required:
+ - remoteIP
+ - version
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ sessionID:
+ type: integer
+ minimum: 0
+ maximum: 1023
+ version:
+ type: integer
+ enum:
+ - 1
+ - 2
+ index:
+ type: integer
+ dir:
+ type: integer
+ enum:
+ - 0
+ - 1
+ hardwareID:
+ type: integer
+ returnPort:
+ type: object
+ oneOf:
+ - required: [ovsInternal]
+ - required: [device]
+ - required: [geneve]
+ - required: [vxlan]
+ - required: [gre]
+ properties:
+ ovsInternal:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ device:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ geneve:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ vni:
+ type: integer
+ minimum: 0
+ maximum: 16777215
+ destinationPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ vxlan:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ vni:
+ type: integer
+ minimum: 0
+ maximum: 16777215
+ destinationPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ gre:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ key:
+ type: integer
+ minimum: 0
+ maximum: 4294967295
+ additionalPrinterColumns:
+ - description: Specifies the direction of traffic that should be matched.
+ jsonPath: .spec.direction
+ name: Direction
+ type: string
+ - description: Specifies the action that should be taken for the traffic.
+ jsonPath: .spec.action
+ name: Action
+ type: string
+ - jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: trafficcontrols
+ singular: trafficcontrol
+ kind: TrafficControl
+ shortNames:
+ - tc
+---
+# Source: antrea/templates/agent/clusterrole.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antrea-agent
+ labels:
+ app: antrea
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - ""
+ resources:
+ - nodes/status
+ verbs:
+ - patch
+ - apiGroups:
+ - ""
+ resources:
+ - pods
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - ""
+ resources:
+ - pods/status
+ verbs:
+ - patch
+ - apiGroups:
+ - ""
+ resources:
+ - endpoints
+ - services
+ - namespaces
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - discovery.k8s.io
+ resources:
+ - endpointslices
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - antreaagentinfos
+ verbs:
+ - get
+ - create
+ - update
+ - delete
+ - apiGroups:
+ - controlplane.antrea.io
+ resources:
+ - networkpolicies
+ - appliedtogroups
+ - addressgroups
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - controlplane.antrea.io
+ resources:
+ - egressgroups
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - controlplane.antrea.io
+ resources:
+ - nodestatssummaries
+ verbs:
+ - create
+ - apiGroups:
+ - controlplane.antrea.io
+ resources:
+ - networkpolicies/status
+ verbs:
+ - create
+ - get
+ - apiGroups:
+ - authentication.k8s.io
+ resources:
+ - tokenreviews
+ verbs:
+ - create
+ - apiGroups:
+ - authorization.k8s.io
+ resources:
+ - subjectaccessreviews
+ verbs:
+ - create
+ # This is the content of built-in role kube-system/extension-apiserver-authentication-reader.
+ # But it doesn't have list/watch permission before K8s v1.17.0 so the extension apiserver (antrea-agent) will
+ # have permission issue after bumping up apiserver library to a version that supports dynamic authentication.
+ # See https://github.com/kubernetes/kubernetes/pull/85375
+ # To support K8s clusters older than v1.17.0, we grant the required permissions directly instead of relying on
+ # the extension-apiserver-authentication role.
+ - apiGroups:
+ - ""
+ resourceNames:
+ - extension-apiserver-authentication
+ resources:
+ - configmaps
+ verbs:
+ - get
+ - list
+ - watch
+ - apiGroups:
+ - ""
+ resources:
+ - configmaps
+ resourceNames:
+ - antrea-ca
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - traceflows
+ - traceflows/status
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - create
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - egresses
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - egresses/status
+ verbs:
+ - update
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - externalippools
+ - ippools
+ - trafficcontrols
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - ippools/status
+ verbs:
+ - update
+ - apiGroups:
+ - k8s.cni.cncf.io
+ resources:
+ - network-attachment-definitions
+ verbs:
+ - get
+ - list
+ - watch
+---
+# Source: antrea/templates/antctl/clusterrole.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antctl
+ labels:
+ app: antrea
+rules:
+ - apiGroups:
+ - controlplane.antrea.io
+ resources:
+ - networkpolicies
+ - appliedtogroups
+ - addressgroups
+ verbs:
+ - get
+ - list
+ - apiGroups:
+ - stats.antrea.io
+ resources:
+ - networkpolicystats
+ - antreaclusternetworkpolicystats
+ - antreanetworkpolicystats
+ verbs:
+ - get
+ - list
+ - apiGroups:
+ - system.antrea.io
+ resources:
+ - controllerinfos
+ - agentinfos
+ verbs:
+ - get
+ - apiGroups:
+ - system.antrea.io
+ resources:
+ - supportbundles
+ verbs:
+ - get
+ - post
+ - apiGroups:
+ - system.antrea.io
+ resources:
+ - supportbundles/download
+ verbs:
+ - get
+ - nonResourceURLs:
+ - /agentinfo
+ - /addressgroups
+ - /appliedtogroups
+ - /loglevel
+ - /networkpolicies
+ - /ovsflows
+ - /ovstracing
+ - /podinterfaces
+ - /featuregates
+ - /serviceexternalip
+ verbs:
+ - get
+---
+# Source: antrea/templates/cluster-identity-reader/clusterrolebinding.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antrea-cluster-identity-reader
+ labels:
+ app: antrea
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - configmaps
+ resourceNames:
+ - antrea-cluster-identity
+ verbs:
+ - get
+---
+# Source: antrea/templates/controller/clusterrole.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antrea-controller
+ labels:
+ app: antrea
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - pods
+ - services
+ - namespaces
+ - configmaps
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ verbs:
+ - get
+ - watch
+ - list
+ - patch
+ - apiGroups:
+ - ""
+ resources:
+ - services/status
+ verbs:
+ - update
+ - apiGroups:
+ - networking.k8s.io
+ resources:
+ - networkpolicies
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - authentication.k8s.io
+ resources:
+ - tokenreviews
+ verbs:
+ - create
+ - apiGroups:
+ - authorization.k8s.io
+ resources:
+ - subjectaccessreviews
+ verbs:
+ - create
+ - apiGroups:
+ - apiextensions.k8s.io
+ resources:
+ - customresourcedefinitions
+ verbs:
+ - get
+ - update
+ # This is the content of built-in role kube-system/extension-apiserver-authentication-reader.
+ # But it doesn't have list/watch permission before K8s v1.17.0 so the extension apiserver (antrea-controller) will
+ # have permission issue after bumping up apiserver library to a version that supports dynamic authentication.
+ # See https://github.com/kubernetes/kubernetes/pull/85375
+ # To support K8s clusters older than v1.17.0, we grant the required permissions directly instead of relying on
+ # the extension-apiserver-authentication role.
+ - apiGroups:
+ - ""
+ resourceNames:
+ - extension-apiserver-authentication
+ resources:
+ - configmaps
+ verbs:
+ - get
+ - list
+ - watch
+ - apiGroups:
+ - ""
+ resources:
+ - configmaps
+ resourceNames:
+ - antrea-ca
+ - antrea-cluster-identity
+ verbs:
+ - get
+ - update
+ - apiGroups:
+ - ""
+ resources:
+ - configmaps
+ verbs:
+ - create
+ - apiGroups:
+ - apiregistration.k8s.io
+ resources:
+ - apiservices
+ resourceNames:
+ - v1alpha1.stats.antrea.io
+ - v1beta1.system.antrea.io
+ - v1beta2.controlplane.antrea.io
+ verbs:
+ - get
+ - update
+ - apiGroups:
+ - apiregistration.k8s.io
+ resources:
+ - apiservices
+ resourceNames:
+ - v1beta1.networking.antrea.tanzu.vmware.com
+ - v1beta1.controlplane.antrea.tanzu.vmware.com
+ - v1alpha1.stats.antrea.tanzu.vmware.com
+ - v1beta1.system.antrea.tanzu.vmware.com
+ - v1beta2.controlplane.antrea.tanzu.vmware.com
+ verbs:
+ - delete
+ - apiGroups:
+ - admissionregistration.k8s.io
+ resources:
+ - mutatingwebhookconfigurations
+ - validatingwebhookconfigurations
+ resourceNames:
+ # always give permissions for labelsmutator.antrea.io, even when the
+ # feature is disabled, to avoid errors in antrea-controller when updating
+ # the CA cert.
+ - labelsmutator.antrea.io
+ - crdmutator.antrea.io
+ - crdvalidator.antrea.io
+ verbs:
+ - get
+ - update
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - antreacontrollerinfos
+ verbs:
+ - get
+ - create
+ - update
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - antreaagentinfos
+ verbs:
+ - list
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - clusternetworkpolicies
+ - networkpolicies
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - create
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - clusternetworkpolicies/status
+ - networkpolicies/status
+ verbs:
+ - update
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - tiers
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - create
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - traceflows
+ - traceflows/status
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - create
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - externalentities
+ - clustergroups
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - create
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - clustergroups/status
+ verbs:
+ - update
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - egresses
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - externalippools
+ - ippools
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - externalippools/status
+ - ippools/status
+ verbs:
+ - update
+ - apiGroups:
+ - apps
+ resources:
+ - statefulsets
+ verbs:
+ - get
+ - list
+ - watch
+---
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
metadata:
+ name: aggregate-antrea-policies-edit
labels:
app: antrea
- name: antrea-config-c9ck44454h
- namespace: kube-system
+ # Add these permissions to the "admin" and "edit" default roles.
+ rbac.authorization.k8s.io/aggregate-to-admin: "true"
+ rbac.authorization.k8s.io/aggregate-to-edit: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["clusternetworkpolicies", "networkpolicies"]
+ verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
---
-apiVersion: v1
-kind: Service
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: aggregate-antrea-policies-view
+ labels:
+ app: antrea
+ # Add these permissions to the "view" default role.
+ rbac.authorization.k8s.io/aggregate-to-view: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["clusternetworkpolicies", "networkpolicies"]
+ verbs: ["get", "list", "watch"]
+---
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: aggregate-traceflows-edit
+ labels:
+ app: antrea
+ # Add these permissions to the "admin" and "edit" default roles.
+ rbac.authorization.k8s.io/aggregate-to-admin: "true"
+ rbac.authorization.k8s.io/aggregate-to-edit: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["traceflows"]
+ verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
+---
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
metadata:
+ name: aggregate-traceflows-view
+ labels:
+ app: antrea
+ # Add these permissions to the "view" default role.
+ rbac.authorization.k8s.io/aggregate-to-view: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["traceflows"]
+ verbs: ["get", "list", "watch"]
+---
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: aggregate-antrea-clustergroups-edit
+ labels:
+ app: antrea
+ # Add these permissions to the "admin" and "edit" default roles.
+ rbac.authorization.k8s.io/aggregate-to-admin: "true"
+ rbac.authorization.k8s.io/aggregate-to-edit: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["clustergroups"]
+ verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
+---
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: aggregate-antrea-clustergroups-view
+ labels:
+ app: antrea
+ # Add these permissions to the "view" default role.
+ rbac.authorization.k8s.io/aggregate-to-view: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["clustergroups"]
+ verbs: ["get", "list", "watch"]
+---
+# Source: antrea/templates/agent/clusterrolebinding.yaml
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antrea-agent
+ labels:
+ app: antrea
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: antrea-agent
+subjects:
+ - kind: ServiceAccount
+ name: antrea-agent
+ namespace: kube-system
+---
+# Source: antrea/templates/antctl/clusterrolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ labels:
+ app: antrea
+ name: antctl
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: antctl
+subjects:
+ - kind: ServiceAccount
+ name: antctl
+ namespace: kube-system
+---
+# Source: antrea/templates/controller/clusterrolebinding.yaml
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antrea-controller
labels:
app: antrea
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: antrea-controller
+subjects:
+ - kind: ServiceAccount
+ name: antrea-controller
+ namespace: kube-system
+---
+# Source: antrea/templates/controller/service.yaml
+apiVersion: v1
+kind: Service
+metadata:
name: antrea
namespace: kube-system
+ labels:
+ app: antrea
spec:
ports:
- - port: 443
- protocol: TCP
- targetPort: api
+ - port: 443
+ protocol: TCP
+ targetPort: api
selector:
app: antrea
component: antrea-controller
---
+# Source: antrea/templates/agent/daemonset.yaml
apiVersion: apps/v1
-kind: Deployment
+kind: DaemonSet
metadata:
+ name: antrea-agent
+ namespace: kube-system
labels:
app: antrea
- component: antrea-controller
+ component: antrea-agent
+spec:
+ selector:
+ matchLabels:
+ app: antrea
+ component: antrea-agent
+ updateStrategy:
+ type: RollingUpdate
+ template:
+ metadata:
+ annotations:
+ # Starting with v1.21, Kubernetes supports default container annotation.
+ # Using "kubectl logs/exec/attach/cp" doesn't have to specify "-c antrea-agent" when troubleshooting.
+ kubectl.kubernetes.io/default-container: antrea-agent
+ # Automatically restart Pods with a RollingUpdate if the ConfigMap changes
+ # See https://helm.sh/docs/howto/charts_tips_and_tricks/#automatically-roll-deployments
+ checksum/config: 7e0d8c70d728f9f981756d8238d9b19a9c2321206b09a814a1cdb4ac604b190c
+ labels:
+ app: antrea
+ component: antrea-agent
+ spec:
+ hostNetwork: true
+ dnsPolicy: ClusterFirstWithHostNet
+ priorityClassName: system-node-critical
+ nodeSelector:
+ kubernetes.io/os: linux
+ tolerations:
+ - key: CriticalAddonsOnly
+ operator: Exists
+ - effect: NoSchedule
+ operator: Exists
+ - effect: NoExecute
+ operator: Exists
+ serviceAccountName: antrea-agent
+ initContainers:
+ - name: install-cni
+ image: "projects.registry.vmware.com/antrea/antrea-ubuntu:latest"
+ imagePullPolicy: IfNotPresent
+ resources:
+ requests:
+ cpu: 100m
+ command: ["install_cni"]
+ securityContext:
+ capabilities:
+ add:
+ # SYS_MODULE is required to load the OVS kernel module.
+ - SYS_MODULE
+ env:
+ # SKIP_CNI_BINARIES takes in values as a comma separated list of
+ # binaries that need to be skipped for installation, e.g. "portmap, bandwidth".
+ - name: SKIP_CNI_BINARIES
+ value: ""
+ volumeMounts:
+ - name: antrea-config
+ mountPath: /etc/antrea/antrea-cni.conflist
+ subPath: antrea-cni.conflist
+ readOnly: true
+ - name: host-cni-conf
+ mountPath: /host/etc/cni/net.d
+ - name: host-cni-bin
+ mountPath: /host/opt/cni/bin
+ # For loading the OVS kernel module.
+ - name: host-lib-modules
+ mountPath: /lib/modules
+ readOnly: true
+ # For changing the default permissions of the run directory.
+ - name: host-var-run-antrea
+ mountPath: /var/run/antrea
+ containers:
+ - name: antrea-agent
+ image: "projects.registry.vmware.com/antrea/antrea-ubuntu:latest"
+ imagePullPolicy: IfNotPresent
+ command: ["antrea-agent"]
+ # Log to both "/var/log/antrea/" and stderr (so "kubectl logs" can work).-
+ args:
+ - "--config=/etc/antrea/antrea-agent.conf"
+ - "--logtostderr=false"
+ - "--log_dir=/var/log/antrea"
+ - "--alsologtostderr"
+ - "--log_file_max_size=100"
+ - "--log_file_max_num=4"
+ env:
+ # Provide pod and node information for clusterinformation CRD.
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ resources:
+ requests:
+ cpu: 200m
+ ports:
+ - containerPort: 10350
+ name: api
+ protocol: TCP
+ livenessProbe:
+ exec:
+ command:
+ - /bin/sh
+ - -c
+ - container_liveness_probe agent
+ initialDelaySeconds: 5
+ timeoutSeconds: 5
+ periodSeconds: 10
+ failureThreshold: 5
+ readinessProbe:
+ httpGet:
+ host: localhost
+ path: /readyz
+ port: api
+ scheme: HTTPS
+ initialDelaySeconds: 5
+ timeoutSeconds: 5
+ periodSeconds: 10
+ # In large-scale clusters, it may take up to 40~50 seconds for the antrea-agent to reconnect to the antrea
+ # Service after the antrea-controller restarts. The antrea-agent shouldn't be reported as NotReady in this
+ # scenario, otherwise the DaemonSet controller would restart all agents at once, as opposed to performing a
+ # rolling update. Set failureThreshold to 8 so it can tolerate 70s of disconnection.
+ failureThreshold: 8
+ securityContext:
+ # antrea-agent needs to perform sysctl configuration.
+ privileged: true
+ volumeMounts:
+ - name: antrea-config
+ mountPath: /etc/antrea/antrea-agent.conf
+ subPath: antrea-agent.conf
+ readOnly: true
+ - name: host-var-run-antrea
+ mountPath: /var/run/antrea
+ - name: host-var-run-antrea
+ mountPath: /var/run/openvswitch
+ subPath: openvswitch
+ # host-local IPAM stores allocated IP addresses as files in /var/lib/cni/networks/$NETWORK_NAME.
+ # Mount a sub-directory of host-var-run-antrea to it for persistence of IP allocation.
+ - name: host-var-run-antrea
+ mountPath: /var/lib/cni
+ subPath: cni
+ # We need to mount both the /proc directory and the /var/run/netns directory so that
+ # antrea-agent can open the network namespace path when setting up Pod
+ # networking. Different container runtimes may use /proc or /var/run/netns when invoking
+ # the CNI commands. Docker uses /proc and containerd uses /var/run/netns.
+ - name: host-var-log-antrea
+ mountPath: /var/log/antrea
+ - name: host-proc
+ mountPath: /host/proc
+ readOnly: true
+ - name: host-var-run-netns
+ mountPath: /host/var/run/netns
+ readOnly: true
+ # When a container is created, a mount point for the network namespace is added under
+ # /var/run/netns on the host, which needs to be propagated to the antrea-agent container.
+ mountPropagation: HostToContainer
+ - name: xtables-lock
+ mountPath: /run/xtables.lock
+ - name: antrea-ovs
+ image: "projects.registry.vmware.com/antrea/antrea-ubuntu:latest"
+ imagePullPolicy: IfNotPresent
+ resources:
+ requests:
+ cpu: 200m
+ command: ["start_ovs"]
+ args:
+ - "--log_file_max_size=100"
+ - "--log_file_max_num=4"
+ securityContext:
+ # capabilities required by OVS daemons
+ capabilities:
+ add:
+ - SYS_NICE
+ - NET_ADMIN
+ - SYS_ADMIN
+ - IPC_LOCK
+ livenessProbe:
+ exec:
+ # docker CRI doesn't honor timeoutSeconds, add "timeout" to the command as a workaround.
+ # https://github.com/kubernetes/kubernetes/issues/51901
+ command:
+ - /bin/sh
+ - -c
+ - timeout 10 container_liveness_probe ovs
+ initialDelaySeconds: 5
+ timeoutSeconds: 10
+ periodSeconds: 10
+ failureThreshold: 5
+ volumeMounts:
+ - name: host-var-run-antrea
+ mountPath: /var/run/openvswitch
+ subPath: openvswitch
+ - name: host-var-log-antrea
+ mountPath: /var/log/openvswitch
+ subPath: openvswitch
+ volumes:
+ - name: antrea-config
+ configMap:
+ name: antrea-config
+ - name: host-cni-conf
+ hostPath:
+ path: /etc/cni/net.d
+ - name: host-cni-bin
+ hostPath:
+ path: /home/kubernetes/bin
+ - name: host-proc
+ hostPath:
+ path: /proc
+ - name: host-var-run-netns
+ hostPath:
+ path: /var/run/netns
+ - name: host-var-run-antrea
+ hostPath:
+ path: /var/run/antrea
+ # we use subPath to create run subdirectories for different component (e.g. OVS) and
+ # subPath requires the base volume to exist
+ type: DirectoryOrCreate
+ - name: host-var-log-antrea
+ hostPath:
+ path: /var/log/antrea
+ # we use subPath to create logging subdirectories for different component (e.g. OVS)
+ type: DirectoryOrCreate
+ - name: host-lib-modules
+ hostPath:
+ path: /lib/modules
+ - name: xtables-lock
+ hostPath:
+ path: /run/xtables.lock
+ type: FileOrCreate
+---
+# Source: antrea/templates/controller/deployment.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
name: antrea-controller
namespace: kube-system
+ labels:
+ app: antrea
+ component: antrea-controller
spec:
- replicas: 1
+ strategy:
+ # Ensure the existing Pod is stopped before the new one is created.
+ type: Recreate
selector:
matchLabels:
app: antrea
component: antrea-controller
- strategy:
- type: Recreate
+ replicas: 1
template:
metadata:
+ annotations:
+ # Automatically restart Pod if the ConfigMap changes
+ # See https://helm.sh/docs/howto/charts_tips_and_tricks/#automatically-roll-deployments
+ checksum/config: 7e0d8c70d728f9f981756d8238d9b19a9c2321206b09a814a1cdb4ac604b190c
labels:
app: antrea
component: antrea-controller
spec:
- containers:
- - args:
- - --config
- - /etc/antrea/antrea-controller.conf
- - --logtostderr=false
- - --log_dir=/var/log/antrea
- - --alsologtostderr
- - --log_file_max_size=100
- - --log_file_max_num=4
- - --v=0
- command:
- - antrea-controller
- env:
- - name: POD_NAME
- valueFrom:
- fieldRef:
- fieldPath: metadata.name
- - name: POD_NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- - name: NODE_NAME
- valueFrom:
- fieldRef:
- fieldPath: spec.nodeName
- - name: SERVICEACCOUNT_NAME
- valueFrom:
- fieldRef:
- fieldPath: spec.serviceAccountName
- - name: ANTREA_CONFIG_MAP_NAME
- value: antrea-config-c9ck44454h
- image: projects.registry.vmware.com/antrea/antrea-ubuntu:latest
- imagePullPolicy: IfNotPresent
- livenessProbe:
- failureThreshold: 5
- httpGet:
- host: localhost
- path: /livez
- port: api
- scheme: HTTPS
- periodSeconds: 10
- timeoutSeconds: 5
- name: antrea-controller
- ports:
- - containerPort: 10349
- name: api
- protocol: TCP
- readinessProbe:
- failureThreshold: 5
- httpGet:
- host: localhost
- path: /readyz
- port: api
- scheme: HTTPS
- initialDelaySeconds: 5
- periodSeconds: 10
- timeoutSeconds: 5
- resources:
- requests:
- cpu: 200m
- volumeMounts:
- - mountPath: /etc/antrea/antrea-controller.conf
- name: antrea-config
- readOnly: true
- subPath: antrea-controller.conf
- - mountPath: /var/run/antrea/antrea-controller-tls
- name: antrea-controller-tls
- - mountPath: /var/log/antrea
- name: host-var-log-antrea
- hostNetwork: true
nodeSelector:
kubernetes.io/os: linux
+ hostNetwork: true
priorityClassName: system-cluster-critical
- serviceAccountName: antrea-controller
tolerations:
- - key: CriticalAddonsOnly
- operator: Exists
- - effect: NoSchedule
- key: node-role.kubernetes.io/master
+ - key: CriticalAddonsOnly
+ operator: Exists
+ - effect: NoSchedule
+ key: node-role.kubernetes.io/master
+ - effect: NoSchedule
+ key: node-role.kubernetes.io/control-plane
+ serviceAccountName: antrea-controller
+ containers:
+ - name: antrea-controller
+ image: "projects.registry.vmware.com/antrea/antrea-ubuntu:latest"
+ imagePullPolicy: IfNotPresent
+ resources:
+ requests:
+ cpu: 200m
+ command: ["antrea-controller"]
+ # Log to both "/var/log/antrea/" and stderr (so "kubectl logs" can work).
+ args:
+ - "--config=/etc/antrea/antrea-controller.conf"
+ - "--logtostderr=false"
+ - "--log_dir=/var/log/antrea"
+ - "--alsologtostderr"
+ - "--log_file_max_size=100"
+ - "--log_file_max_num=4"
+ env:
+ # Provide pod and node information for clusterinformation CRD.
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ # Provide ServiceAccount name for validation webhook.
+ - name: SERVICEACCOUNT_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.serviceAccountName
+ - name: ANTREA_CONFIG_MAP_NAME
+ value: antrea-config
+ ports:
+ - containerPort: 10349
+ name: api
+ protocol: TCP
+ readinessProbe:
+ httpGet:
+ host: localhost
+ path: /readyz
+ port: api
+ scheme: HTTPS
+ initialDelaySeconds: 5
+ timeoutSeconds: 5
+ periodSeconds: 10
+ failureThreshold: 5
+ livenessProbe:
+ httpGet:
+ host: localhost
+ path: /livez
+ port: api
+ scheme: HTTPS
+ timeoutSeconds: 5
+ periodSeconds: 10
+ failureThreshold: 5
+ volumeMounts:
+ - name: antrea-config
+ mountPath: /etc/antrea/antrea-controller.conf
+ subPath: antrea-controller.conf
+ readOnly: true
+ - name: antrea-controller-tls
+ mountPath: /var/run/antrea/antrea-controller-tls
+ - name: host-var-log-antrea
+ mountPath: /var/log/antrea
volumes:
- - configMap:
- name: antrea-config-c9ck44454h
- name: antrea-config
- - name: antrea-controller-tls
- secret:
- defaultMode: 256
- optional: true
- secretName: antrea-controller-tls
- - hostPath:
- path: /var/log/antrea
- type: DirectoryOrCreate
- name: host-var-log-antrea
+ - name: antrea-config
+ configMap:
+ name: antrea-config
+ # Make it optional as we only read it when selfSignedCert=false.
+ - name: antrea-controller-tls
+ secret:
+ secretName: antrea-controller-tls
+ defaultMode: 0400
+ optional: true
+ - name: host-var-log-antrea
+ hostPath:
+ path: /var/log/antrea
+ type: DirectoryOrCreate
---
+# Source: antrea/templates/controller/apiservices.yaml
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
+ name: v1beta2.controlplane.antrea.io
labels:
app: antrea
- name: v1alpha1.stats.antrea.io
spec:
- group: stats.antrea.io
+ group: controlplane.antrea.io
groupPriorityMinimum: 100
+ version: v1beta2
+ versionPriority: 100
service:
name: antrea
namespace: kube-system
- version: v1alpha1
- versionPriority: 100
---
+# Source: antrea/templates/controller/apiservices.yaml
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
+ name: v1beta1.system.antrea.io
labels:
app: antrea
- name: v1beta1.system.antrea.io
spec:
group: system.antrea.io
groupPriorityMinimum: 100
+ version: v1beta1
+ versionPriority: 100
service:
name: antrea
namespace: kube-system
- version: v1beta1
- versionPriority: 100
---
+# Source: antrea/templates/controller/apiservices.yaml
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
+ name: v1alpha1.stats.antrea.io
labels:
app: antrea
- name: v1beta2.controlplane.antrea.io
spec:
- group: controlplane.antrea.io
+ group: stats.antrea.io
groupPriorityMinimum: 100
+ version: v1alpha1
+ versionPriority: 100
service:
name: antrea
namespace: kube-system
- version: v1beta2
- versionPriority: 100
----
-apiVersion: apps/v1
-kind: DaemonSet
-metadata:
- labels:
- app: antrea
- component: antrea-agent
- name: antrea-agent
- namespace: kube-system
-spec:
- selector:
- matchLabels:
- app: antrea
- component: antrea-agent
- template:
- metadata:
- annotations:
- kubectl.kubernetes.io/default-container: antrea-agent
- labels:
- app: antrea
- component: antrea-agent
- spec:
- containers:
- - args:
- - --config
- - /etc/antrea/antrea-agent.conf
- - --logtostderr=false
- - --log_dir=/var/log/antrea
- - --alsologtostderr
- - --log_file_max_size=100
- - --log_file_max_num=4
- - --v=0
- command:
- - antrea-agent
- env:
- - name: POD_NAME
- valueFrom:
- fieldRef:
- fieldPath: metadata.name
- - name: POD_NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- - name: NODE_NAME
- valueFrom:
- fieldRef:
- fieldPath: spec.nodeName
- image: projects.registry.vmware.com/antrea/antrea-ubuntu:latest
- imagePullPolicy: IfNotPresent
- livenessProbe:
- exec:
- command:
- - /bin/sh
- - -c
- - container_liveness_probe agent
- failureThreshold: 5
- initialDelaySeconds: 5
- periodSeconds: 10
- timeoutSeconds: 5
- name: antrea-agent
- ports:
- - containerPort: 10350
- name: api
- protocol: TCP
- readinessProbe:
- failureThreshold: 8
- httpGet:
- host: localhost
- path: /readyz
- port: api
- scheme: HTTPS
- initialDelaySeconds: 5
- periodSeconds: 10
- timeoutSeconds: 5
- resources:
- requests:
- cpu: 200m
- securityContext:
- privileged: true
- volumeMounts:
- - mountPath: /etc/antrea/antrea-agent.conf
- name: antrea-config
- readOnly: true
- subPath: antrea-agent.conf
- - mountPath: /var/run/antrea
- name: host-var-run-antrea
- - mountPath: /var/run/openvswitch
- name: host-var-run-antrea
- subPath: openvswitch
- - mountPath: /var/lib/cni
- name: host-var-run-antrea
- subPath: cni
- - mountPath: /var/log/antrea
- name: host-var-log-antrea
- - mountPath: /host/proc
- name: host-proc
- readOnly: true
- - mountPath: /host/var/run/netns
- mountPropagation: HostToContainer
- name: host-var-run-netns
- readOnly: true
- - mountPath: /run/xtables.lock
- name: xtables-lock
- - args:
- - --log_file_max_size=100
- - --log_file_max_num=4
- command:
- - start_ovs
- image: projects.registry.vmware.com/antrea/antrea-ubuntu:latest
- imagePullPolicy: IfNotPresent
- livenessProbe:
- exec:
- command:
- - /bin/sh
- - -c
- - timeout 10 container_liveness_probe ovs
- failureThreshold: 5
- initialDelaySeconds: 5
- periodSeconds: 10
- timeoutSeconds: 10
- name: antrea-ovs
- resources:
- requests:
- cpu: 200m
- securityContext:
- capabilities:
- add:
- - SYS_NICE
- - NET_ADMIN
- - SYS_ADMIN
- - IPC_LOCK
- volumeMounts:
- - mountPath: /var/run/openvswitch
- name: host-var-run-antrea
- subPath: openvswitch
- - mountPath: /var/log/openvswitch
- name: host-var-log-antrea
- subPath: openvswitch
- dnsPolicy: ClusterFirstWithHostNet
- hostNetwork: true
- initContainers:
- - command:
- - install_cni
- env:
- - name: SKIP_CNI_BINARIES
- value: ""
- image: projects.registry.vmware.com/antrea/antrea-ubuntu:latest
- imagePullPolicy: IfNotPresent
- name: install-cni
- resources:
- requests:
- cpu: 100m
- securityContext:
- capabilities:
- add:
- - SYS_MODULE
- volumeMounts:
- - mountPath: /etc/antrea/antrea-cni.conflist
- name: antrea-config
- readOnly: true
- subPath: antrea-cni.conflist
- - mountPath: /host/etc/cni/net.d
- name: host-cni-conf
- - mountPath: /host/opt/cni/bin
- name: host-cni-bin
- - mountPath: /lib/modules
- name: host-lib-modules
- readOnly: true
- - mountPath: /var/run/antrea
- name: host-var-run-antrea
- nodeSelector:
- kubernetes.io/os: linux
- priorityClassName: system-node-critical
- serviceAccountName: antrea-agent
- tolerations:
- - key: CriticalAddonsOnly
- operator: Exists
- - effect: NoSchedule
- operator: Exists
- - effect: NoExecute
- operator: Exists
- volumes:
- - hostPath:
- path: /home/kubernetes/bin
- name: host-cni-bin
- - configMap:
- name: antrea-config-c9ck44454h
- name: antrea-config
- - hostPath:
- path: /etc/cni/net.d
- name: host-cni-conf
- - hostPath:
- path: /proc
- name: host-proc
- - hostPath:
- path: /var/run/netns
- name: host-var-run-netns
- - hostPath:
- path: /var/run/antrea
- type: DirectoryOrCreate
- name: host-var-run-antrea
- - hostPath:
- path: /var/log/antrea
- type: DirectoryOrCreate
- name: host-var-log-antrea
- - hostPath:
- path: /lib/modules
- name: host-lib-modules
- - hostPath:
- path: /run/xtables.lock
- type: FileOrCreate
- name: xtables-lock
- updateStrategy:
- type: RollingUpdate
---
+# Source: antrea/templates/webhooks/mutating/crdmutator.yaml
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata:
+ name: "crdmutator.antrea.io"
labels:
app: antrea
- name: crdmutator.antrea.io
webhooks:
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /mutate/acnp
- name: acnpmutator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - clusternetworkpolicies
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /mutate/anp
- name: anpmutator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - networkpolicies
- scope: Namespaced
- sideEffects: None
- timeoutSeconds: 5
+ - name: "acnpmutator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/mutate/acnp"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["clusternetworkpolicies"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "anpmutator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/mutate/anp"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["networkpolicies"]
+ scope: "Namespaced"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
---
+# Source: antrea/templates/webhooks/validating/crdvalidator.yaml
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
+ name: "crdvalidator.antrea.io"
labels:
app: antrea
- name: crdvalidator.antrea.io
webhooks:
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/tier
- name: tiervalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- - DELETE
- resources:
- - tiers
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/acnp
- name: acnpvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - clusternetworkpolicies
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/anp
- name: anpvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - networkpolicies
- scope: Namespaced
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/clustergroup
- name: clustergroupvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha3
- - v1alpha2
- operations:
- - CREATE
- - UPDATE
- resources:
- - clustergroups
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/externalippool
- name: externalippoolvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha2
- operations:
- - UPDATE
- resources:
- - externalippools
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/egress
- name: egressvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha2
- operations:
- - CREATE
- - UPDATE
- resources:
- - egresses
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/ippool
- name: ippoolvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha2
- operations:
- - CREATE
- - UPDATE
- - DELETE
- resources:
- - ippools
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
+ - name: "tiervalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/tier"
+ rules:
+ - operations: ["CREATE", "UPDATE", "DELETE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["tiers"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "acnpvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/acnp"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["clusternetworkpolicies"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "anpvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/anp"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["networkpolicies"]
+ scope: "Namespaced"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "clustergroupvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/clustergroup"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha3", "v1alpha2"]
+ resources: ["clustergroups"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "externalippoolvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/externalippool"
+ rules:
+ - operations: ["UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha2"]
+ resources: ["externalippools"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "egressvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/egress"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha2"]
+ resources: ["egresses"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "ippoolvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/ippool"
+ rules:
+ - operations: ["CREATE", "UPDATE", "DELETE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha2"]
+ resources: ["ippools"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
diff --git a/build/yamls/antrea-ipsec.yml b/build/yamls/antrea-ipsec.yml
index 9241703a4f8..2047b52f63d 100644
--- a/build/yamls/antrea-ipsec.yml
+++ b/build/yamls/antrea-ipsec.yml
@@ -1,2740 +1,72 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
+---
+# Source: antrea/templates/agent/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
metadata:
+ name: antrea-agent
+ namespace: kube-system
labels:
app: antrea
- name: antreaagentinfos.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: AntreaAgentInfo
- plural: antreaagentinfos
- shortNames:
- - aai
- singular: antreaagentinfo
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: Health status of this Agent
- jsonPath: .agentConditions[?(@.type=='AgentHealthy')].status
- name: Healthy
- type: string
- - description: Last time the Healthy Condition was updated
- jsonPath: .agentConditions[?(@.type=='AgentHealthy')].lastHeartbeatTime
- name: Last Heartbeat
- type: date
- - description: Version of this Agent
- jsonPath: .version
- name: Version
- priority: 1
- type: string
- - description: Node on which this Agent is running
- jsonPath: .nodeRef.name
- name: Node
- priority: 1
- type: string
- - description: Number of local Pods managed by this Agent
- jsonPath: .localPodNum
- name: Num Pods
- priority: 2
- type: integer
- - description: Subnets used by this Agent for Pod IPAM
- jsonPath: .nodeSubnets
- name: Subnets
- priority: 2
- type: string
- name: v1beta1
- schema:
- openAPIV3Schema:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- served: true
- storage: true
---
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
+# Source: antrea/templates/antctl/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
metadata:
+ name: antctl
+ namespace: kube-system
labels:
app: antrea
- name: antreacontrollerinfos.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: AntreaControllerInfo
- plural: antreacontrollerinfos
- shortNames:
- - aci
- singular: antreacontrollerinfo
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: Health status of the Controller
- jsonPath: .controllerConditions[?(@.type=='ControllerHealthy')].status
- name: Healthy
- type: string
- - description: Last time the Healthy Condition was updated
- jsonPath: .controllerConditions[?(@.type=='ControllerHealthy')].lastHeartbeatTime
- name: Last Heartbeat
- type: date
- - description: Version of the Controller
- jsonPath: .version
- name: Version
- priority: 1
- type: string
- - description: Number of Agents connected to the Controller
- jsonPath: .connectedAgentNum
- name: Connected Agents
- priority: 1
- type: integer
- - description: Node on which the Controller is running
- jsonPath: .nodeRef.name
- name: Node
- priority: 1
- type: string
- - description: Number of Network Policies computed by Controller
- jsonPath: .networkPolicyControllerInfo.networkPolicyNum
- name: Num Network Policies
- priority: 2
- type: integer
- name: v1beta1
- schema:
- openAPIV3Schema:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- served: true
- storage: true
---
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
+# Source: antrea/templates/controller/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
metadata:
+ name: antrea-controller
+ namespace: kube-system
labels:
app: antrea
- name: clustergroups.crd.antrea.io
-spec:
- conversion:
- strategy: Webhook
- webhook:
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /convert/clustergroup
- conversionReviewVersions:
- - v1
- - v1beta1
- group: crd.antrea.io
- names:
- kind: ClusterGroup
- plural: clustergroups
- shortNames:
- - cg
- singular: clustergroup
- scope: Cluster
- versions:
- - name: v1alpha2
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- childGroups:
- items:
- type: string
- type: array
- externalEntitySelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- ipBlock:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- ipBlocks:
- items:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- type: array
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceReference:
- properties:
- name:
- type: string
- namespace:
- type: string
- type: object
- type: object
- status:
- properties:
- conditions:
- items:
- properties:
- lastTransitionTime:
- type: string
- status:
- type: string
- type:
- type: string
- type: object
- type: array
- type: object
- type: object
- served: true
- storage: false
- - name: v1alpha3
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- childGroups:
- items:
- type: string
- type: array
- externalEntitySelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- ipBlocks:
- items:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- type: array
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceReference:
- properties:
- name:
- type: string
- namespace:
- type: string
- type: object
- type: object
- status:
- properties:
- conditions:
- items:
- properties:
- lastTransitionTime:
- type: string
- status:
- type: string
- type:
- type: string
- type: object
- type: array
- type: object
- type: object
- served: true
- storage: true
- subresources:
- status: {}
---
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
+# Source: antrea/templates/agent/ipsec-secret.yaml
+apiVersion: v1
+kind: Secret
metadata:
+ name: antrea-ipsec
+ namespace: kube-system
labels:
app: antrea
- name: clusternetworkpolicies.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: ClusterNetworkPolicy
- plural: clusternetworkpolicies
- shortNames:
- - acnp
- singular: clusternetworkpolicy
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: The Tier to which this ClusterNetworkPolicy belongs to.
- jsonPath: .spec.tier
- name: Tier
- type: string
- - description: The Priority of this ClusterNetworkPolicy relative to other policies.
- format: float
- jsonPath: .spec.priority
- name: Priority
- type: number
- - description: The total number of Nodes that should realize the NetworkPolicy.
- format: int32
- jsonPath: .status.desiredNodesRealized
- name: Desired Nodes
- type: number
- - description: The number of Nodes that have realized the NetworkPolicy.
- format: int32
- jsonPath: .status.currentNodesRealized
- name: Current Nodes
- type: number
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- appliedTo:
- items:
- properties:
- group:
- type: string
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceAccount:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: object
- type: array
- egress:
- items:
- properties:
- action:
- enum:
- - Allow
- - Drop
- - Reject
- - Pass
- type: string
- appliedTo:
- items:
- properties:
- group:
- type: string
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceAccount:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: object
- type: array
- enableLogging:
- type: boolean
- name:
- type: string
- ports:
- items:
- properties:
- endPort:
- type: integer
- port:
- x-kubernetes-int-or-string: true
- protocol:
- enum:
- - TCP
- - UDP
- - SCTP
- type: string
- type: object
- type: array
- to:
- items:
- properties:
- fqdn:
- type: string
- group:
- type: string
- ipBlock:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- namespaces:
- properties:
- match:
- type: string
- type: object
- nodeSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceAccount:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: object
- type: array
- toServices:
- items:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: array
- required:
- - action
- type: object
- type: array
- ingress:
- items:
- properties:
- action:
- enum:
- - Allow
- - Drop
- - Reject
- - Pass
- type: string
- appliedTo:
- items:
- properties:
- group:
- type: string
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceAccount:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: object
- type: array
- enableLogging:
- type: boolean
- from:
- items:
- properties:
- group:
- type: string
- ipBlock:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- namespaces:
- properties:
- match:
- enum:
- - Self
- type: string
- type: object
- nodeSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceAccount:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: object
- type: array
- name:
- type: string
- ports:
- items:
- properties:
- endPort:
- type: integer
- port:
- x-kubernetes-int-or-string: true
- protocol:
- enum:
- - TCP
- - UDP
- - SCTP
- type: string
- type: object
- type: array
- required:
- - action
- type: object
- type: array
- priority:
- format: float
- maximum: 10000
- minimum: 1
- type: number
- tier:
- type: string
- required:
- - priority
- type: object
- status:
- properties:
- currentNodesRealized:
- type: integer
- desiredNodesRealized:
- type: integer
- observedGeneration:
- type: integer
- phase:
- type: string
- type: object
- type: object
- served: true
- storage: true
- subresources:
- status: {}
+type: Opaque
+stringData:
+ # Preshared Key used by IKE for authentication with peers.
+ psk: "changeme"
---
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
+# Source: antrea/templates/agent/secret.yaml
+apiVersion: v1
+kind: Secret
+metadata:
+ name: antrea-agent-service-account-token
+ namespace: kube-system
+ annotations:
+ kubernetes.io/service-account.name: antrea-agent
+type: kubernetes.io/service-account-token
+---
+# Source: antrea/templates/antctl/secret.yaml
+apiVersion: v1
+kind: Secret
+metadata:
+ name: antctl-service-account-token
+ namespace: kube-system
+ annotations:
+ kubernetes.io/service-account.name: antctl
+type: kubernetes.io/service-account-token
+---
+# Source: antrea/templates/configmap.yaml
+apiVersion: v1
+kind: ConfigMap
metadata:
+ name: antrea-config
+ namespace: kube-system
labels:
app: antrea
- name: egresses.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: Egress
- plural: egresses
- shortNames:
- - eg
- singular: egress
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: Specifies the SNAT IP address for the selected workloads.
- jsonPath: .spec.egressIP
- name: EgressIP
- type: string
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- - description: The Owner Node of egress IP
- jsonPath: .status.egressNode
- name: Node
- type: string
- name: v1alpha2
- schema:
- openAPIV3Schema:
- properties:
- spec:
- anyOf:
- - required:
- - egressIP
- - required:
- - externalIPPool
- properties:
- appliedTo:
- properties:
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- egressIP:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- externalIPPool:
- type: string
- required:
- - appliedTo
- type: object
- status:
- properties:
- egressNode:
- type: string
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: externalentities.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: ExternalEntity
- plural: externalentities
- shortNames:
- - ee
- singular: externalentity
- scope: Namespaced
- versions:
- - name: v1alpha2
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- endpoints:
- items:
- properties:
- ip:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- name:
- type: string
- type: object
- type: array
- externalNode:
- type: string
- ports:
- items:
- properties:
- name:
- type: string
- port:
- x-kubernetes-int-or-string: true
- protocol:
- enum:
- - TCP
- - UDP
- - SCTP
- type: string
- type: object
- type: array
- type: object
- type: object
- served: true
- storage: true
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- type: object
- served: false
- storage: false
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: externalippools.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: ExternalIPPool
- plural: externalippools
- shortNames:
- - eip
- singular: externalippool
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: The number of total IPs
- jsonPath: .status.usage.total
- name: Total
- type: integer
- - description: The number of allocated IPs
- jsonPath: .status.usage.used
- name: Used
- type: integer
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha2
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- ipRanges:
- items:
- oneOf:
- - required:
- - cidr
- - required:
- - start
- - end
- properties:
- cidr:
- format: cidr
- type: string
- end:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- start:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- type: object
- type: array
- nodeSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- required:
- - ipRanges
- - nodeSelector
- type: object
- status:
- properties:
- usage:
- properties:
- total:
- type: integer
- used:
- type: integer
- type: object
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: ippools.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: IPPool
- plural: ippools
- shortNames:
- - ipp
- singular: ippool
- scope: Cluster
- versions:
- - name: v1alpha2
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- ipRanges:
- items:
- oneOf:
- - required:
- - cidr
- - gateway
- - prefixLength
- - required:
- - start
- - end
- - gateway
- - prefixLength
- properties:
- cidr:
- format: cidr
- type: string
- end:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- gateway:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- prefixLength:
- type: integer
- start:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- vlan:
- maximum: 4094
- minimum: 0
- type: integer
- type: object
- type: array
- ipVersion:
- type: integer
- required:
- - ipVersion
- - ipRanges
- type: object
- status:
- properties:
- ipAddresses:
- items:
- properties:
- ipAddress:
- type: string
- owner:
- properties:
- pod:
- properties:
- containerID:
- type: string
- name:
- type: string
- namespace:
- type: string
- type: object
- statefulSet:
- properties:
- index:
- type: integer
- name:
- type: string
- namespace:
- type: string
- type: object
- type: object
- phase:
- type: string
- type: object
- type: array
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: networkpolicies.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: NetworkPolicy
- plural: networkpolicies
- shortNames:
- - anp
- singular: networkpolicy
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - description: The Tier to which this Antrea NetworkPolicy belongs to.
- jsonPath: .spec.tier
- name: Tier
- type: string
- - description: The Priority of this Antrea NetworkPolicy relative to other policies.
- format: float
- jsonPath: .spec.priority
- name: Priority
- type: number
- - description: The total number of Nodes that should realize the NetworkPolicy.
- format: int32
- jsonPath: .status.desiredNodesRealized
- name: Desired Nodes
- type: number
- - description: The number of Nodes that have realized the NetworkPolicy.
- format: int32
- jsonPath: .status.currentNodesRealized
- name: Current Nodes
- type: number
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- appliedTo:
- items:
- properties:
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: array
- egress:
- items:
- properties:
- action:
- enum:
- - Allow
- - Drop
- - Reject
- - Pass
- type: string
- appliedTo:
- items:
- properties:
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: array
- enableLogging:
- type: boolean
- name:
- type: string
- ports:
- items:
- properties:
- endPort:
- type: integer
- port:
- x-kubernetes-int-or-string: true
- protocol:
- enum:
- - TCP
- - UDP
- - SCTP
- type: string
- type: object
- type: array
- to:
- items:
- properties:
- externalEntitySelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- fqdn:
- type: string
- ipBlock:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- nodeSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: array
- toServices:
- items:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- type: object
- type: array
- required:
- - action
- type: object
- type: array
- ingress:
- items:
- properties:
- action:
- enum:
- - Allow
- - Drop
- - Reject
- - Pass
- type: string
- appliedTo:
- items:
- properties:
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: array
- enableLogging:
- type: boolean
- from:
- items:
- properties:
- externalEntitySelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- ipBlock:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- nodeSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: array
- name:
- type: string
- ports:
- items:
- properties:
- endPort:
- type: integer
- port:
- x-kubernetes-int-or-string: true
- protocol:
- enum:
- - TCP
- - UDP
- - SCTP
- type: string
- type: object
- type: array
- required:
- - action
- type: object
- type: array
- priority:
- format: float
- maximum: 10000
- minimum: 1
- type: number
- tier:
- type: string
- required:
- - priority
- type: object
- status:
- properties:
- currentNodesRealized:
- type: integer
- desiredNodesRealized:
- type: integer
- observedGeneration:
- type: integer
- phase:
- type: string
- type: object
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: tiers.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: Tier
- plural: tiers
- shortNames:
- - tr
- singular: tier
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: The Priority of this Tier relative to other Tiers.
- jsonPath: .spec.priority
- name: Priority
- type: integer
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- description:
- type: string
- priority:
- maximum: 255
- minimum: 0
- type: integer
- required:
- - priority
- type: object
- type: object
- served: true
- storage: true
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: traceflows.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: Traceflow
- plural: traceflows
- shortNames:
- - tf
- singular: traceflow
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: The phase of the Traceflow.
- jsonPath: .status.phase
- name: Phase
- type: string
- - description: The name of the source Pod.
- jsonPath: .spec.source.pod
- name: Source-Pod
- priority: 10
- type: string
- - description: The name of the destination Pod.
- jsonPath: .spec.destination.pod
- name: Destination-Pod
- priority: 10
- type: string
- - description: The IP address of the destination.
- jsonPath: .spec.destination.ip
- name: Destination-IP
- priority: 10
- type: string
- - description: Trace live traffic.
- jsonPath: .spec.liveTraffic
- name: Live-Traffic
- priority: 10
- type: boolean
- - description: Capture only the dropped packet.
- jsonPath: .spec.droppedOnly
- name: Dropped-Only
- priority: 10
- type: boolean
- - description: Timeout in seconds.
- jsonPath: .spec.timeout
- name: Timeout
- priority: 10
- type: integer
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- destination:
- properties:
- ip:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- namespace:
- type: string
- pod:
- type: string
- service:
- type: string
- type: object
- droppedOnly:
- type: boolean
- liveTraffic:
- type: boolean
- packet:
- properties:
- ipHeader:
- properties:
- flags:
- type: integer
- protocol:
- type: integer
- srcIP:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- ttl:
- type: integer
- type: object
- ipv6Header:
- properties:
- hopLimit:
- type: integer
- nextHeader:
- type: integer
- srcIP:
- format: ipv6
- type: string
- type: object
- transportHeader:
- properties:
- icmp:
- properties:
- id:
- type: integer
- sequence:
- type: integer
- type: object
- tcp:
- properties:
- dstPort:
- type: integer
- flags:
- type: integer
- srcPort:
- type: integer
- type: object
- udp:
- properties:
- dstPort:
- type: integer
- srcPort:
- type: integer
- type: object
- type: object
- type: object
- source:
- properties:
- ip:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- namespace:
- type: string
- pod:
- type: string
- type: object
- timeout:
- type: integer
- type: object
- status:
- properties:
- capturedPacket:
- properties:
- dstIP:
- type: string
- ipHeader:
- properties:
- flags:
- type: integer
- protocol:
- type: integer
- ttl:
- type: integer
- type: object
- ipv6Header:
- properties:
- hopLimit:
- type: integer
- nextHeader:
- type: integer
- type: object
- length:
- type: integer
- srcIP:
- type: string
- transportHeader:
- properties:
- icmp:
- properties:
- id:
- type: integer
- sequence:
- type: integer
- type: object
- tcp:
- properties:
- dstPort:
- type: integer
- flags:
- type: integer
- srcPort:
- type: integer
- type: object
- udp:
- properties:
- dstPort:
- type: integer
- srcPort:
- type: integer
- type: object
- type: object
- type: object
- dataplaneTag:
- type: integer
- phase:
- type: string
- reason:
- type: string
- results:
- items:
- properties:
- node:
- type: string
- observations:
- items:
- properties:
- action:
- type: string
- component:
- type: string
- componentInfo:
- type: string
- dstMAC:
- type: string
- networkPolicy:
- type: string
- pod:
- type: string
- translatedDstIP:
- type: string
- translatedSrcIP:
- type: string
- ttl:
- type: integer
- tunnelDstIP:
- type: string
- type: object
- type: array
- role:
- type: string
- timestamp:
- type: integer
- type: object
- type: array
- startTime:
- type: string
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- labels:
- app: antrea
- name: antctl
- namespace: kube-system
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- labels:
- app: antrea
- name: antrea-agent
- namespace: kube-system
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- labels:
- app: antrea
- name: antrea-controller
- namespace: kube-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-admin: "true"
- rbac.authorization.k8s.io/aggregate-to-edit: "true"
- name: aggregate-antrea-clustergroups-edit
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - clustergroups
- verbs:
- - get
- - list
- - watch
- - create
- - update
- - patch
- - delete
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-view: "true"
- name: aggregate-antrea-clustergroups-view
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - clustergroups
- verbs:
- - get
- - list
- - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-admin: "true"
- rbac.authorization.k8s.io/aggregate-to-edit: "true"
- name: aggregate-antrea-policies-edit
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - clusternetworkpolicies
- - networkpolicies
- verbs:
- - get
- - list
- - watch
- - create
- - update
- - patch
- - delete
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-view: "true"
- name: aggregate-antrea-policies-view
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - clusternetworkpolicies
- - networkpolicies
- verbs:
- - get
- - list
- - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-admin: "true"
- rbac.authorization.k8s.io/aggregate-to-edit: "true"
- name: aggregate-traceflows-edit
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - traceflows
- verbs:
- - get
- - list
- - watch
- - create
- - update
- - patch
- - delete
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-view: "true"
- name: aggregate-traceflows-view
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - traceflows
- verbs:
- - get
- - list
- - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- name: antctl
-rules:
-- apiGroups:
- - controlplane.antrea.io
- resources:
- - networkpolicies
- - appliedtogroups
- - addressgroups
- verbs:
- - get
- - list
-- apiGroups:
- - stats.antrea.io
- resources:
- - networkpolicystats
- - antreaclusternetworkpolicystats
- - antreanetworkpolicystats
- verbs:
- - get
- - list
-- apiGroups:
- - system.antrea.io
- resources:
- - controllerinfos
- - agentinfos
- verbs:
- - get
-- apiGroups:
- - system.antrea.io
- resources:
- - supportbundles
- verbs:
- - get
- - post
-- apiGroups:
- - system.antrea.io
- resources:
- - supportbundles/download
- verbs:
- - get
-- nonResourceURLs:
- - /agentinfo
- - /addressgroups
- - /appliedtogroups
- - /loglevel
- - /networkpolicies
- - /ovsflows
- - /ovstracing
- - /podinterfaces
- - /featuregates
- verbs:
- - get
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- name: antrea-agent
-rules:
-- apiGroups:
- - ""
- resources:
- - nodes
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - ""
- resources:
- - nodes/status
- verbs:
- - patch
-- apiGroups:
- - ""
- resources:
- - pods
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - ""
- resources:
- - pods/status
- verbs:
- - patch
-- apiGroups:
- - ""
- resources:
- - endpoints
- - services
- - namespaces
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - ""
- resources:
- - services/status
- verbs:
- - update
-- apiGroups:
- - discovery.k8s.io
- resources:
- - endpointslices
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - crd.antrea.io
- resources:
- - antreaagentinfos
- verbs:
- - get
- - create
- - update
- - delete
-- apiGroups:
- - controlplane.antrea.io
- resources:
- - networkpolicies
- - appliedtogroups
- - addressgroups
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - controlplane.antrea.io
- resources:
- - egressgroups
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - controlplane.antrea.io
- resources:
- - nodestatssummaries
- verbs:
- - create
-- apiGroups:
- - controlplane.antrea.io
- resources:
- - networkpolicies/status
- verbs:
- - create
- - get
-- apiGroups:
- - authentication.k8s.io
- resources:
- - tokenreviews
- verbs:
- - create
-- apiGroups:
- - authorization.k8s.io
- resources:
- - subjectaccessreviews
- verbs:
- - create
-- apiGroups:
- - ""
- resourceNames:
- - extension-apiserver-authentication
- resources:
- - configmaps
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - ""
- resourceNames:
- - antrea-ca
- resources:
- - configmaps
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - crd.antrea.io
- resources:
- - traceflows
- - traceflows/status
- verbs:
- - get
- - watch
- - list
- - update
- - patch
- - create
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - egresses
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - crd.antrea.io
- resources:
- - egresses/status
- verbs:
- - update
-- apiGroups:
- - crd.antrea.io
- resources:
- - externalippools
- - ippools
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - crd.antrea.io
- resources:
- - ippools/status
- verbs:
- - update
-- apiGroups:
- - k8s.cni.cncf.io
- resources:
- - network-attachment-definitions
- verbs:
- - get
- - list
- - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- name: antrea-cluster-identity-reader
-rules:
-- apiGroups:
- - ""
- resourceNames:
- - antrea-cluster-identity
- resources:
- - configmaps
- verbs:
- - get
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- name: antrea-controller
-rules:
-- apiGroups:
- - ""
- resources:
- - pods
- - services
- - namespaces
- - configmaps
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - ""
- resources:
- - nodes
- verbs:
- - get
- - watch
- - list
- - patch
-- apiGroups:
- - ""
- resources:
- - services/status
- verbs:
- - update
-- apiGroups:
- - networking.k8s.io
- resources:
- - networkpolicies
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - authentication.k8s.io
- resources:
- - tokenreviews
- verbs:
- - create
-- apiGroups:
- - authorization.k8s.io
- resources:
- - subjectaccessreviews
- verbs:
- - create
-- apiGroups:
- - apiextensions.k8s.io
- resources:
- - customresourcedefinitions
- verbs:
- - get
- - update
-- apiGroups:
- - ""
- resourceNames:
- - extension-apiserver-authentication
- resources:
- - configmaps
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - ""
- resourceNames:
- - antrea-ca
- - antrea-cluster-identity
- resources:
- - configmaps
- verbs:
- - get
- - update
-- apiGroups:
- - ""
- resources:
- - configmaps
- verbs:
- - create
-- apiGroups:
- - apiregistration.k8s.io
- resourceNames:
- - v1alpha1.stats.antrea.io
- - v1beta1.system.antrea.io
- - v1beta2.controlplane.antrea.io
- resources:
- - apiservices
- verbs:
- - get
- - update
-- apiGroups:
- - apiregistration.k8s.io
- resourceNames:
- - v1beta1.networking.antrea.tanzu.vmware.com
- - v1beta1.controlplane.antrea.tanzu.vmware.com
- - v1alpha1.stats.antrea.tanzu.vmware.com
- - v1beta1.system.antrea.tanzu.vmware.com
- - v1beta2.controlplane.antrea.tanzu.vmware.com
- resources:
- - apiservices
- verbs:
- - delete
-- apiGroups:
- - admissionregistration.k8s.io
- resourceNames:
- - labelsmutator.antrea.io
- - crdmutator.antrea.io
- - crdvalidator.antrea.io
- resources:
- - mutatingwebhookconfigurations
- - validatingwebhookconfigurations
- verbs:
- - get
- - update
-- apiGroups:
- - crd.antrea.io
- resources:
- - antreacontrollerinfos
- verbs:
- - get
- - create
- - update
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - antreaagentinfos
- verbs:
- - list
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - clusternetworkpolicies
- - networkpolicies
- verbs:
- - get
- - watch
- - list
- - update
- - patch
- - create
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - clusternetworkpolicies/status
- - networkpolicies/status
- verbs:
- - update
-- apiGroups:
- - crd.antrea.io
- resources:
- - tiers
- verbs:
- - get
- - watch
- - list
- - update
- - patch
- - create
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - traceflows
- - traceflows/status
- verbs:
- - get
- - watch
- - list
- - update
- - patch
- - create
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - externalentities
- - clustergroups
- verbs:
- - get
- - watch
- - list
- - update
- - patch
- - create
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - clustergroups/status
- verbs:
- - update
-- apiGroups:
- - crd.antrea.io
- resources:
- - egresses
- verbs:
- - get
- - watch
- - list
- - update
- - patch
-- apiGroups:
- - crd.antrea.io
- resources:
- - externalippools
- - ippools
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - crd.antrea.io
- resources:
- - externalippools/status
- - ippools/status
- verbs:
- - update
-- apiGroups:
- - apps
- resources:
- - statefulsets
- verbs:
- - get
- - list
- - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- labels:
- app: antrea
- name: antctl
- namespace: kube-system
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: antctl
-subjects:
-- kind: ServiceAccount
- name: antctl
- namespace: kube-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- labels:
- app: antrea
- name: antrea-agent
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: antrea-agent
-subjects:
-- kind: ServiceAccount
- name: antrea-agent
- namespace: kube-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- labels:
- app: antrea
- name: antrea-controller
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: antrea-controller
-subjects:
-- kind: ServiceAccount
- name: antrea-controller
- namespace: kube-system
----
-apiVersion: v1
data:
antrea-agent.conf: |
# FeatureGates is a map of feature names to bools that enable or disable experimental features.
@@ -2771,7 +103,8 @@ data:
# Egress: true
# Enable AntreaIPAM, which can allocate IP addresses from IPPools. AntreaIPAM is required by the
- # bridging mode and allocates IPs to Pods in bridging mode.
+ # bridging mode and allocates IPs to Pods in bridging mode. It is also required to use Antrea for
+ # IPAM when configuring secondary network interfaces with Multus.
# AntreaIPAM: false
# Enable multicast traffic. This feature is supported only with noEncap mode.
@@ -2785,21 +118,23 @@ data:
# Enable managing external IPs of Services of LoadBalancer type.
# ServiceExternalIP: false
+ # Enable mirroring or redirecting the traffic Pods send or receive.
+ # TrafficControl: false
+
# Name of the OpenVSwitch bridge antrea-agent will create and use.
# Make sure it doesn't conflict with your existing OpenVSwitch bridges.
- #ovsBridge: br-int
+ ovsBridge: "br-int"
# Datapath type to use for the OpenVSwitch bridge created by Antrea. Supported values are:
# - system
# - netdev
# 'system' is the default value and corresponds to the kernel datapath. Use 'netdev' to run
- # OVS in userspace mode (not fully supported yet). Userspace mode requires the tun device driver to
- # be available.
+ # OVS in userspace mode. Userspace mode requires the tun device driver to be available.
#ovsDatapathType: system
# Name of the interface antrea-agent will create and use for host <--> pod communication.
# Make sure it doesn't conflict with your existing interfaces.
- #hostGateway: antrea-gw0
+ hostGateway: "antrea-gw0"
# Determines how traffic is encapsulated. It has the following options:
# encap(default): Inter-node Pod traffic is always encapsulated and Pod to external network
@@ -2811,14 +146,14 @@ data:
# networkPolicyOnly: Antrea enforces NetworkPolicy only, and utilizes CNI chaining and delegates Pod
# IPAM and connectivity to the primary CNI.
#
- #trafficEncapMode: encap
+ trafficEncapMode: "encap"
# Whether or not to SNAT (using the Node IP) the egress traffic from a Pod to the external network.
# This option is for the noEncap traffic mode only, and the default value is false. In the noEncap
# mode, if the cluster's Pod CIDR is reachable from the external network, then the Pod traffic to
# the external network needs not be SNAT'd. In the networkPolicyOnly mode, antrea-agent never
# performs SNAT and this option will be ignored; for other modes it must be set to false.
- #noSNAT: false
+ noSNAT: false
# Tunnel protocols used for encapsulating traffic across Nodes. If WireGuard is enabled in trafficEncryptionMode,
# this option will not take effect. Supported values:
@@ -2827,7 +162,7 @@ data:
# - gre
# - stt
# Note that "gre" is not supported for IPv6 clusters (IPv6-only or dual-stack clusters).
- tunnelType: gre
+ tunnelType: "gre"
# Determines how tunnel traffic is encrypted. Currently encryption only works with encap mode.
# It has the following options:
@@ -2837,49 +172,54 @@ data:
# the PSK value must be passed to Antrea Agent through an environment
# variable: ANTREA_IPSEC_PSK.
# - wireGuard: Enable WireGuard for tunnel traffic encryption.
- trafficEncryptionMode: ipsec
+ trafficEncryptionMode: "ipsec"
# Enable bridging mode of Pod network on Nodes, in which the Node's transport interface is connected
- # to the OVS bridge, and cross-Node/VLAN traffic from AntreaIPAM Pods (Pods whose IP addresses are
- # allocated by AntreaIPAM from IPPools) is sent to the underlay network via the uplink, and
- # forwarded/routed by the underlay network.
+ # to the OVS bridge, and cross-Node/VLAN traffic of AntreaIPAM Pods (Pods whose IP addresses are
+ # allocated by AntreaIPAM from IPPools) is sent to the underlay network, and forwarded/routed by the
+ # underlay network.
# This option requires the `AntreaIPAM` feature gate to be enabled. At this moment, it supports only
# IPv4 and Linux Nodes, and can be enabled only when `ovsDatapathType` is `system`,
# `trafficEncapMode` is `noEncap`, and `noSNAT` is true.
- #enableBridgingMode: false
+ enableBridgingMode: false
+
+ # Disable TX checksum offloading for container network interfaces. It's supposed to be set to true when the
+ # datapath doesn't support TX checksum offloading, which causes packets to be dropped due to bad checksum.
+ # It affects Pods running on Linux Nodes only.
+ disableTXChecksumOffload: false
# Default MTU to use for the host gateway interface and the network interface of each Pod.
# If omitted, antrea-agent will discover the MTU of the Node's primary interface and
# also adjust MTU to accommodate for tunnel encapsulation overhead (if applicable).
- #defaultMTU: 0
+ defaultMTU: 0
# wireGuard specifies WireGuard related configurations.
wireGuard:
- # The port for WireGuard to receive traffic.
- # port: 51820
+ # The port for WireGuard to receive traffic.
+ port: 51820
egress:
- # exceptCIDRs is the CIDR ranges to which outbound Pod traffic will not be SNAT'd by Egresses.
- # exceptCIDRs: []
+ # exceptCIDRs is the CIDR ranges to which outbound Pod traffic will not be SNAT'd by Egresses.
+ exceptCIDRs:
# ClusterIP CIDR range for Services. It's required when AntreaProxy is not enabled, and should be
# set to the same value as the one specified by --service-cluster-ip-range for kube-apiserver. When
# AntreaProxy is enabled, this parameter is not needed and will be ignored if provided.
- #serviceCIDR: 10.96.0.0/12
+ serviceCIDR: ""
# ClusterIP CIDR range for IPv6 Services. It's required when using kube-proxy to provide IPv6 Service in a Dual-Stack
# cluster or an IPv6 only cluster. The value should be the same as the configuration for kube-apiserver specified by
# --service-cluster-ip-range. When AntreaProxy is enabled, this parameter is not needed.
# No default value for this field.
- #serviceCIDRv6:
+ serviceCIDRv6: ""
# The port for the antrea-agent APIServer to serve on.
# Note that if it's set to another value, the `containerPort` of the `api` port of the
# `antrea-agent` container must be set to the same value.
- #apiPort: 10350
+ apiPort: 10350
# Enable metrics exposure via Prometheus. Initializes Prometheus metrics listener.
- #enablePrometheusMetrics: true
+ enablePrometheusMetrics: true
# Provide the IPFIX collector address as a string with format :[][:].
# HOST can either be the DNS name or the IP of the Flow Collector. For example,
@@ -2890,50 +230,50 @@ data:
# If no PROTO is given, we consider "tls" as default. We support "tls", "tcp" and
# "udp" protocols. "tls" is used for securing communication between flow exporter and
# flow aggregator.
- #flowCollectorAddr: "flow-aggregator.flow-aggregator.svc:4739:tls"
+ flowCollectorAddr: "flow-aggregator.flow-aggregator.svc:4739:tls"
# Provide flow poll interval as a duration string. This determines how often the
# flow exporter dumps connections from the conntrack module. Flow poll interval
# should be greater than or equal to 1s (one second).
# Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
- #flowPollInterval: "5s"
+ flowPollInterval: "5s"
# Provide the active flow export timeout, which is the timeout after which a flow
# record is sent to the collector for active flows. Thus, for flows with a continuous
# stream of packets, a flow record will be exported to the collector once the elapsed
# time since the last export event is equal to the value of this timeout.
# Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
- #activeFlowExportTimeout: "30s"
+ activeFlowExportTimeout: "5s"
# Provide the idle flow export timeout, which is the timeout after which a flow
# record is sent to the collector for idle flows. A flow is considered idle if no
# packet matching this flow has been observed since the last export event.
# Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
- #idleFlowExportTimeout: "15s"
+ idleFlowExportTimeout: "15s"
nodePortLocal:
# Enable NodePortLocal, a feature used to make Pods reachable using port forwarding on the host. To
# enable this feature, you need to set "enable" to true, and ensure that the NodePortLocal feature
# gate is also enabled (which is the default).
- # enable: false
+ enable: false
# Provide the port range used by NodePortLocal. When the NodePortLocal feature is enabled, a port
# from that range will be assigned whenever a Pod's container defines a specific port to be exposed
# (each container can define a list of ports as pod.spec.containers[].ports), and all Node traffic
# directed to that port will be forwarded to the Pod.
- # portRange: 61000-62000
+ portRange: "61000-62000"
# Provide the address of Kubernetes apiserver, to override any value provided in kubeconfig or InClusterConfig.
# Defaults to "". It must be a host string, a host:port pair, or a URL to the base of the apiserver.
- #kubeAPIServerOverride: ""
+ kubeAPIServerOverride: ""
# Comma-separated list of Cipher Suites. If omitted, the default Go Cipher Suites will be used.
# https://golang.org/pkg/crypto/tls/#pkg-constants
# Note that TLS1.3 Cipher Suites cannot be added to the list. But the apiserver will always
# prefer TLS1.3 Cipher Suites whenever possible.
- #tlsCipherSuites:
+ tlsCipherSuites: ""
# TLS min version from: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13.
- #tlsMinVersion:
+ tlsMinVersion: ""
# The name of the interface on Node which is used for tunneling or routing the traffic across Nodes.
# If there are multiple IP addresses configured on the interface, the first one is used. The IP
@@ -2942,11 +282,16 @@ data:
# 1. transportInterface
# 2. transportInterfaceCIDRs
# 3. The Node IP
- #transportInterface:
+ transportInterface: ""
+ multicast:
# The names of the interfaces on Nodes that are used to forward multicast traffic.
# Defaults to transport interface if not set.
- #multicastInterfaces: []
+ multicastInterfaces:
+
+ # The interval at which the antrea-agent sends IGMP queries to Pods.
+ # Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
+ igmpQueryInterval: "125s"
# The network CIDRs of the interface on Node which is used for tunneling or routing the traffic across
# Nodes. If there are multiple interfaces configured the same network CIDR, the first one is used. The
@@ -2955,7 +300,7 @@ data:
# 1. transportInterface
# 2. transportInterfaceCIDRs
# 3. The Node IP
- #transportInterfaceCIDRs: [,]
+ transportInterfaceCIDRs:
# Option antreaProxy contains AntreaProxy related configuration options.
antreaProxy:
@@ -2964,22 +309,22 @@ data:
# feature to be enabled.
# Note that this option is experimental. If kube-proxy is removed, option kubeAPIServerOverride must be used to access
# apiserver directly.
- #proxyAll: false
+ proxyAll: false
# A string array of values which specifies the host IPv4/IPv6 addresses for NodePort. Values can be valid IP blocks.
# (e.g. 1.2.3.0/24, 1.2.3.4/32). An empty string slice is meant to select all host IPv4/IPv6 addresses.
# Note that the option is only valid when proxyAll is true.
- #nodePortAddresses: []
+ nodePortAddresses:
# An array of string values to specify a list of Services which should be ignored by AntreaProxy (traffic to these
# Services will not be load-balanced). Values can be a valid ClusterIP (e.g. 10.11.1.2) or a Service name
# with Namespace (e.g. kube-system/kube-dns)
- #skipServices: []
+ skipServices:
# When ProxyLoadBalancerIPs is set to false, AntreaProxy no longer load-balances traffic destined to the
# External IPs of LoadBalancer Services. This is useful when the external LoadBalancer provides additional
# capabilities (e.g. TLS termination) and it is desirable for Pod-to-ExternalIP traffic to be sent to the
# external LoadBalancer instead of being load-balanced to an Endpoint directly by AntreaProxy.
# Note that setting ProxyLoadBalancerIPs to false usually only makes sense when ProxyAll is set to true and
# kube-proxy is removed from the cluser, otherwise kube-proxy will still load-balance this traffic.
- #proxyLoadBalancerIPs: true
+ proxyLoadBalancerIPs: true
antrea-cni.conflist: |
{
"cniVersion":"0.3.0",
@@ -2990,11 +335,13 @@ data:
"ipam": {
"type": "host-local"
}
- },
+ }
+ ,
{
"type": "portmap",
"capabilities": {"portMappings": true}
- },
+ }
+ ,
{
"type": "bandwidth",
"capabilities": {"bandwidth": true}
@@ -3021,8 +368,9 @@ data:
# Run Kubernetes NodeIPAMController with Antrea.
# NodeIPAM: false
- # Enable flexible IPAM mode for Antrea. This mode allows to assign IP Ranges to Namespaces,
- # Deployments and StatefulSets via IP Pool annotation.
+ # Enable AntreaIPAM, which can allocate IP addresses from IPPools. AntreaIPAM is required by the
+ # bridging mode and allocates IPs to Pods in bridging mode. It is also required to use Antrea for
+ # IPAM when configuring secondary network interfaces with Multus.
# AntreaIPAM: false
# Enable managing external IPs of Services of LoadBalancer type.
@@ -3031,703 +379,3710 @@ data:
# The port for the antrea-controller APIServer to serve on.
# Note that if it's set to another value, the `containerPort` of the `api` port of the
# `antrea-controller` container must be set to the same value.
- #apiPort: 10349
+ apiPort: 10349
# Enable metrics exposure via Prometheus. Initializes Prometheus metrics listener.
- #enablePrometheusMetrics: true
+ enablePrometheusMetrics: true
# Indicates whether to use auto-generated self-signed TLS certificate.
- # If false, A Secret named "antrea-controller-tls" must be provided with the following keys:
+ # If false, a Secret named "antrea-controller-tls" must be provided with the following keys:
# ca.crt:
# tls.crt:
# tls.key:
- # And the Secret must be mounted to directory "/var/run/antrea/antrea-controller-tls" of the
- # antrea-controller container.
- #selfSignedCert: true
+ selfSignedCert: true
# Comma-separated list of Cipher Suites. If omitted, the default Go Cipher Suites will be used.
# https://golang.org/pkg/crypto/tls/#pkg-constants
# Note that TLS1.3 Cipher Suites cannot be added to the list. But the apiserver will always
# prefer TLS1.3 Cipher Suites whenever possible.
- #tlsCipherSuites:
+ tlsCipherSuites: ""
# TLS min version from: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13.
- #tlsMinVersion:
+ tlsMinVersion: ""
nodeIPAM:
- # Enable the integrated Node IPAM controller within the Antrea controller.
- # enableNodeIPAM: false
-
- # CIDR ranges for Pods in cluster. String array containing single CIDR range, or multiple ranges.
- # The CIDRs could be either IPv4 or IPv6. At most one CIDR may be specified for each IP family.
- # Value ignored when enableNodeIPAM is false.
- # clusterCIDRs: []
-
- # CIDR ranges for Services in cluster. It is not necessary to specify it when there is no overlap with clusterCIDRs.
- # Value ignored when enableNodeIPAM is false.
- # serviceCIDR:
- # serviceCIDRv6:
-
- # Mask size for IPv4 Node CIDR in IPv4 or dual-stack cluster. Value ignored when enableNodeIPAM is false
- # or when IPv4 Pod CIDR is not configured. Valid range is 16 to 30.
- # nodeCIDRMaskSizeIPv4: 24
-
- # Mask size for IPv6 Node CIDR in IPv6 or dual-stack cluster. Value ignored when enableNodeIPAM is false
- # or when IPv6 Pod CIDR is not configured. Valid range is 64 to 126.
- # nodeCIDRMaskSizeIPv6: 64
-kind: ConfigMap
+ # Enable the integrated Node IPAM controller within the Antrea controller.
+ enableNodeIPAM: false
+ # CIDR ranges for Pods in cluster. String array containing single CIDR range, or multiple ranges.
+ # The CIDRs could be either IPv4 or IPv6. At most one CIDR may be specified for each IP family.
+ # Value ignored when enableNodeIPAM is false.
+ clusterCIDRs:
+ # CIDR ranges for Services in cluster. It is not necessary to specify it when there is no overlap with clusterCIDRs.
+ # Value ignored when enableNodeIPAM is false.
+ serviceCIDR: ""
+ serviceCIDRv6: ""
+ # Mask size for IPv4 Node CIDR in IPv4 or dual-stack cluster. Value ignored when enableNodeIPAM is false
+ # or when IPv4 Pod CIDR is not configured. Valid range is 16 to 30.
+ nodeCIDRMaskSizeIPv4: 24
+ # Mask size for IPv6 Node CIDR in IPv6 or dual-stack cluster. Value ignored when enableNodeIPAM is false
+ # or when IPv6 Pod CIDR is not configured. Valid range is 64 to 126.
+ nodeCIDRMaskSizeIPv6: 64
+---
+# Source: antrea/templates/crds/antreaagentinfo.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: antreaagentinfos.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1beta1
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ additionalPrinterColumns:
+ - description: Health status of this Agent
+ jsonPath: ".agentConditions[?(@.type=='AgentHealthy')].status"
+ name: Healthy
+ type: string
+ - description: Last time the Healthy Condition was updated
+ jsonPath: ".agentConditions[?(@.type=='AgentHealthy')].lastHeartbeatTime"
+ name: Last Heartbeat
+ type: date
+ - description: Version of this Agent
+ jsonPath: ".version"
+ name: Version
+ type: string
+ priority: 1
+ - description: Node on which this Agent is running
+ jsonPath: ".nodeRef.name"
+ name: Node
+ type: string
+ priority: 1
+ - description: Number of local Pods managed by this Agent
+ jsonPath: ".localPodNum"
+ name: Num Pods
+ type: integer
+ priority: 2
+ - description: Subnets used by this Agent for Pod IPAM
+ jsonPath: ".nodeSubnets"
+ name: Subnets
+ type: string
+ priority: 2
+ scope: Cluster
+ names:
+ plural: antreaagentinfos
+ singular: antreaagentinfo
+ kind: AntreaAgentInfo
+ shortNames:
+ - aai
+---
+# Source: antrea/templates/crds/antreacontrollerinfo.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: antreacontrollerinfos.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1beta1
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ additionalPrinterColumns:
+ - description: Health status of the Controller
+ jsonPath: ".controllerConditions[?(@.type=='ControllerHealthy')].status"
+ name: Healthy
+ type: string
+ - description: Last time the Healthy Condition was updated
+ jsonPath: ".controllerConditions[?(@.type=='ControllerHealthy')].lastHeartbeatTime"
+ name: Last Heartbeat
+ type: date
+ - description: Version of the Controller
+ jsonPath: ".version"
+ name: Version
+ type: string
+ priority: 1
+ - description: Number of Agents connected to the Controller
+ jsonPath: ".connectedAgentNum"
+ name: Connected Agents
+ type: integer
+ priority: 1
+ - description: Node on which the Controller is running
+ jsonPath: ".nodeRef.name"
+ name: Node
+ type: string
+ priority: 1
+ - description: Number of Network Policies computed by Controller
+ jsonPath: ".networkPolicyControllerInfo.networkPolicyNum"
+ name: Num Network Policies
+ type: integer
+ priority: 2
+ scope: Cluster
+ names:
+ plural: antreacontrollerinfos
+ singular: antreacontrollerinfo
+ kind: AntreaControllerInfo
+ shortNames:
+ - aci
+---
+# Source: antrea/templates/crds/clustergroup.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: clustergroups.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: false
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ properties:
+ childGroups:
+ type: array
+ items:
+ type: string
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ externalEntitySelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ ipBlocks:
+ type: array
+ items:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ serviceReference:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ status:
+ type: object
+ properties:
+ conditions:
+ type: array
+ items:
+ type: object
+ properties:
+ type:
+ type: string
+ status:
+ type: string
+ lastTransitionTime:
+ type: string
+ - name: v1alpha3
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ properties:
+ childGroups:
+ type: array
+ items:
+ type: string
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ externalEntitySelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ipBlocks:
+ type: array
+ items:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ serviceReference:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ status:
+ type: object
+ properties:
+ conditions:
+ type: array
+ items:
+ type: object
+ properties:
+ type:
+ type: string
+ status:
+ type: string
+ lastTransitionTime:
+ type: string
+ subresources:
+ status: {}
+ conversion:
+ strategy: Webhook
+ webhook:
+ conversionReviewVersions: ["v1", "v1beta1"]
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: "kube-system"
+ path: "/convert/clustergroup"
+ scope: Cluster
+ names:
+ plural: clustergroups
+ singular: clustergroup
+ kind: ClusterGroup
+ shortNames:
+ - cg
+---
+# Source: antrea/templates/crds/clusternetworkpolicy.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: clusternetworkpolicies.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha1
+ served: true
+ storage: true
+ additionalPrinterColumns:
+ - name: Tier
+ type: string
+ description: The Tier to which this ClusterNetworkPolicy belongs to.
+ jsonPath: .spec.tier
+ - name: Priority
+ type: number
+ format: float
+ description: The Priority of this ClusterNetworkPolicy relative to other policies.
+ jsonPath: .spec.priority
+ - name: Desired Nodes
+ type: number
+ format: int32
+ description: The total number of Nodes that should realize the NetworkPolicy.
+ jsonPath: .status.desiredNodesRealized
+ - name: Current Nodes
+ type: number
+ format: int32
+ description: The number of Nodes that have realized the NetworkPolicy.
+ jsonPath: .status.currentNodesRealized
+ - name: Age
+ type: date
+ jsonPath: .metadata.creationTimestamp
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ # Ensure that Spec.Priority field is set
+ required:
+ - priority
+ type: object
+ properties:
+ tier:
+ type: string
+ priority:
+ type: number
+ format: float
+ # Ensure that Spec.Priority field is between 1 and 10000
+ minimum: 1.0
+ maximum: 10000.0
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that Spec.AppliedTo does not allow IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ group:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ ingress:
+ type: array
+ items:
+ type: object
+ required:
+ - action
+ properties:
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that rule AppliedTo does not allow IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ group:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ # Ensure that Action field allows only ALLOW, DROP, REJECT and PASS values
+ action:
+ type: string
+ enum: ['Allow', 'Drop', 'Reject', 'Pass']
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ endPort:
+ type: integer
+ protocols:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required: [icmp]
+ properties:
+ icmp:
+ type: object
+ properties:
+ icmpType:
+ type: integer
+ minimum: 0
+ maximum: 255
+ icmpCode:
+ type: integer
+ minimum: 0
+ maximum: 255
+ from:
+ type: array
+ items:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaces:
+ type: object
+ properties:
+ match:
+ enum:
+ - Self
+ type: string
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ group:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ name:
+ type: string
+ enableLogging:
+ type: boolean
+ egress:
+ type: array
+ items:
+ type: object
+ required:
+ - action
+ properties:
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that rule AppliedTo does not allow IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ group:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ # Ensure that Action field allows only ALLOW, DROP, REJECT and PASS values
+ action:
+ type: string
+ enum: ['Allow', 'Drop', 'Reject', 'Pass']
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ endPort:
+ type: integer
+ protocols:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required: [icmp]
+ properties:
+ icmp:
+ type: object
+ properties:
+ icmpType:
+ type: integer
+ minimum: 0
+ maximum: 255
+ icmpCode:
+ type: integer
+ minimum: 0
+ maximum: 255
+ to:
+ type: array
+ items:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaces:
+ type: object
+ properties:
+ match:
+ enum:
+ - Self
+ type: string
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ group:
+ type: string
+ fqdn:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ toServices:
+ type: array
+ items:
+ type: object
+ required:
+ - name
+ - namespace
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ name:
+ type: string
+ enableLogging:
+ type: boolean
+ status:
+ type: object
+ properties:
+ phase:
+ type: string
+ observedGeneration:
+ type: integer
+ currentNodesRealized:
+ type: integer
+ desiredNodesRealized:
+ type: integer
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: clusternetworkpolicies
+ singular: clusternetworkpolicy
+ kind: ClusterNetworkPolicy
+ shortNames:
+ - acnp
+---
+# Source: antrea/templates/crds/egress.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: egresses.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ type: object
+ required:
+ - appliedTo
+ anyOf:
+ - required:
+ - egressIP
+ - required:
+ - externalIPPool
+ properties:
+ appliedTo:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ egressIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ externalIPPool:
+ type: string
+ status:
+ type: object
+ properties:
+ egressNode:
+ type: string
+ additionalPrinterColumns:
+ - description: Specifies the SNAT IP address for the selected workloads.
+ jsonPath: .spec.egressIP
+ name: EgressIP
+ type: string
+ - jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ - description: The Owner Node of egress IP
+ jsonPath: .status.egressNode
+ name: Node
+ type: string
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: egresses
+ singular: egress
+ kind: Egress
+ shortNames:
+ - eg
+---
+# Source: antrea/templates/crds/externalentity.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: externalentities.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ properties:
+ endpoints:
+ type: array
+ items:
+ type: object
+ properties:
+ ip:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ name:
+ type: string
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ name:
+ type: string
+ externalNode:
+ type: string
+ - name: v1alpha1
+ served: false
+ storage: false
+ schema:
+ openAPIV3Schema:
+ type: object
+ scope: Namespaced
+ names:
+ plural: externalentities
+ singular: externalentity
+ kind: ExternalEntity
+ shortNames:
+ - ee
+---
+# Source: antrea/templates/crds/externalippool.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: externalippools.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ type: object
+ required:
+ - ipRanges
+ - nodeSelector
+ properties:
+ ipRanges:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required:
+ - cidr
+ - required:
+ - start
+ - end
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ start:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ end:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ status:
+ type: object
+ properties:
+ usage:
+ type: object
+ properties:
+ total:
+ type: integer
+ used:
+ type: integer
+ additionalPrinterColumns:
+ - description: The number of total IPs
+ jsonPath: .status.usage.total
+ name: Total
+ type: integer
+ - description: The number of allocated IPs
+ jsonPath: .status.usage.used
+ name: Used
+ type: integer
+ - jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: externalippools
+ singular: externalippool
+ kind: ExternalIPPool
+ shortNames:
+ - eip
+---
+# Source: antrea/templates/crds/ippool.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: ippools.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ required:
+ - ipVersion
+ - ipRanges
+ type: object
+ properties:
+ ipVersion:
+ type: integer
+ ipRanges:
+ items:
+ oneOf:
+ - required:
+ - cidr
+ - gateway
+ - prefixLength
+ - required:
+ - start
+ - end
+ - gateway
+ - prefixLength
+ properties:
+ cidr:
+ format: cidr
+ type: string
+ start:
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ type: string
+ end:
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ type: string
+ gateway:
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ type: string
+ prefixLength:
+ type: integer
+ vlan:
+ type: integer
+ minimum: 0
+ maximum: 4094
+ type: object
+ type: array
+ status:
+ properties:
+ ipAddresses:
+ items:
+ properties:
+ ipAddress:
+ type: string
+ owner:
+ properties:
+ pod:
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ containerID:
+ type: string
+ ifName:
+ type: string
+ type: object
+ statefulSet:
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ index:
+ type: integer
+ type: object
+ type: object
+ phase:
+ type: string
+ type: object
+ type: array
+ type: object
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: ippools
+ singular: ippool
+ kind: IPPool
+ shortNames:
+ - ipp
+---
+# Source: antrea/templates/crds/networkpolicy.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: networkpolicies.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha1
+ served: true
+ storage: true
+ additionalPrinterColumns:
+ - name: Tier
+ type: string
+ description: The Tier to which this Antrea NetworkPolicy belongs to.
+ jsonPath: .spec.tier
+ - name: Priority
+ type: number
+ format: float
+ description: The Priority of this Antrea NetworkPolicy relative to other policies.
+ jsonPath: .spec.priority
+ - name: Desired Nodes
+ type: number
+ format: int32
+ description: The total number of Nodes that should realize the NetworkPolicy.
+ jsonPath: .status.desiredNodesRealized
+ - name: Current Nodes
+ type: number
+ format: int32
+ description: The number of Nodes that have realized the NetworkPolicy.
+ jsonPath: .status.currentNodesRealized
+ - name: Age
+ type: date
+ jsonPath: .metadata.creationTimestamp
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ # Ensure that Spec.Priority field is set
+ required:
+ - priority
+ type: object
+ properties:
+ tier:
+ type: string
+ priority:
+ type: number
+ format: float
+ # Ensure that Spec.Priority field is between 1 and 10000
+ minimum: 1.0
+ maximum: 10000.0
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that Spec.AppliedTo does not allow NamespaceSelector/IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ingress:
+ type: array
+ items:
+ type: object
+ required:
+ - action
+ properties:
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that rule AppliedTo does not allow NamespaceSelector/IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ # Ensure that Action field allows only ALLOW, DROP, REJECT and PASS values
+ action:
+ type: string
+ enum: ['Allow', 'Drop', 'Reject', 'Pass']
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ endPort:
+ type: integer
+ protocols:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required: [icmp]
+ properties:
+ icmp:
+ type: object
+ properties:
+ icmpType:
+ type: integer
+ minimum: 0
+ maximum: 255
+ icmpCode:
+ type: integer
+ minimum: 0
+ maximum: 255
+ from:
+ type: array
+ items:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ externalEntitySelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ name:
+ type: string
+ enableLogging:
+ type: boolean
+ egress:
+ type: array
+ items:
+ type: object
+ required:
+ - action
+ properties:
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that rule AppliedTo does not allow NamespaceSelector/IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ # Ensure that Action field allows only ALLOW, DROP, REJECT and PASS values
+ action:
+ type: string
+ enum: ['Allow', 'Drop', 'Reject', 'Pass']
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ endPort:
+ type: integer
+ protocols:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required: [icmp]
+ properties:
+ icmp:
+ type: object
+ properties:
+ icmpType:
+ type: integer
+ minimum: 0
+ maximum: 255
+ icmpCode:
+ type: integer
+ minimum: 0
+ maximum: 255
+ to:
+ type: array
+ items:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ externalEntitySelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ fqdn:
+ type: string
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ toServices:
+ type: array
+ items:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ name:
+ type: string
+ enableLogging:
+ type: boolean
+ status:
+ type: object
+ properties:
+ phase:
+ type: string
+ observedGeneration:
+ type: integer
+ currentNodesRealized:
+ type: integer
+ desiredNodesRealized:
+ type: integer
+ subresources:
+ status: {}
+ scope: Namespaced
+ names:
+ plural: networkpolicies
+ singular: networkpolicy
+ kind: NetworkPolicy
+ shortNames:
+ - anp
+---
+# Source: antrea/templates/crds/tier.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: tiers.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha1
+ served: true
+ storage: true
+ additionalPrinterColumns:
+ - name: Priority
+ type: integer
+ description: The Priority of this Tier relative to other Tiers.
+ jsonPath: .spec.priority
+ - name: Age
+ type: date
+ jsonPath: .metadata.creationTimestamp
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ required:
+ - priority
+ type: object
+ properties:
+ priority:
+ type: integer
+ minimum: 0
+ maximum: 255
+ description:
+ type: string
+ scope: Cluster
+ names:
+ plural: tiers
+ singular: tier
+ kind: Tier
+ shortNames:
+ - tr
+---
+# Source: antrea/templates/crds/traceflow.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: traceflows.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha1
+ served: true
+ storage: true
+ additionalPrinterColumns:
+ - jsonPath: .status.phase
+ description: The phase of the Traceflow.
+ name: Phase
+ type: string
+ - jsonPath: .spec.source.pod
+ description: The name of the source Pod.
+ name: Source-Pod
+ type: string
+ priority: 10
+ - jsonPath: .spec.destination.pod
+ description: The name of the destination Pod.
+ name: Destination-Pod
+ type: string
+ priority: 10
+ - jsonPath: .spec.destination.ip
+ description: The IP address of the destination.
+ name: Destination-IP
+ type: string
+ priority: 10
+ - jsonPath: .spec.liveTraffic
+ description: Trace live traffic.
+ name: Live-Traffic
+ type: boolean
+ priority: 10
+ - jsonPath: .spec.droppedOnly
+ description: Capture only the dropped packet.
+ name: Dropped-Only
+ type: boolean
+ priority: 10
+ - jsonPath: .spec.timeout
+ description: Timeout in seconds.
+ name: Timeout
+ type: integer
+ priority: 10
+ - jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ type: object
+ properties:
+ source:
+ type: object
+ properties:
+ pod:
+ type: string
+ namespace:
+ type: string
+ ip:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ destination:
+ type: object
+ properties:
+ pod:
+ type: string
+ service:
+ type: string
+ namespace:
+ type: string
+ ip:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ packet:
+ type: object
+ properties:
+ ipHeader:
+ type: object
+ properties:
+ srcIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ protocol:
+ type: integer
+ ttl:
+ type: integer
+ flags:
+ type: integer
+ ipv6Header:
+ type: object
+ properties:
+ srcIP:
+ type: string
+ format: ipv6
+ nextHeader:
+ type: integer
+ hopLimit:
+ type: integer
+ transportHeader:
+ type: object
+ properties:
+ icmp:
+ type: object
+ properties:
+ id:
+ type: integer
+ sequence:
+ type: integer
+ udp:
+ type: object
+ properties:
+ srcPort:
+ type: integer
+ dstPort:
+ type: integer
+ tcp:
+ type: object
+ properties:
+ srcPort:
+ type: integer
+ dstPort:
+ type: integer
+ flags:
+ type: integer
+ liveTraffic:
+ type: boolean
+ droppedOnly:
+ type: boolean
+ timeout:
+ type: integer
+ status:
+ type: object
+ properties:
+ reason:
+ type: string
+ dataplaneTag:
+ type: integer
+ phase:
+ type: string
+ startTime:
+ type: string
+ results:
+ type: array
+ items:
+ type: object
+ properties:
+ node:
+ type: string
+ role:
+ type: string
+ timestamp:
+ type: integer
+ observations:
+ type: array
+ items:
+ type: object
+ properties:
+ component:
+ type: string
+ componentInfo:
+ type: string
+ action:
+ type: string
+ pod:
+ type: string
+ dstMAC:
+ type: string
+ networkPolicy:
+ type: string
+ ttl:
+ type: integer
+ translatedSrcIP:
+ type: string
+ translatedDstIP:
+ type: string
+ tunnelDstIP:
+ type: string
+ capturedPacket:
+ properties:
+ srcIP:
+ type: string
+ dstIP:
+ type: string
+ length:
+ type: integer
+ ipHeader:
+ properties:
+ flags:
+ type: integer
+ protocol:
+ type: integer
+ ttl:
+ type: integer
+ type: object
+ ipv6Header:
+ properties:
+ hopLimit:
+ type: integer
+ nextHeader:
+ type: integer
+ type: object
+ transportHeader:
+ properties:
+ tcp:
+ properties:
+ dstPort:
+ type: integer
+ srcPort:
+ type: integer
+ flags:
+ type: integer
+ type: object
+ udp:
+ properties:
+ dstPort:
+ type: integer
+ srcPort:
+ type: integer
+ type: object
+ icmp:
+ properties:
+ id:
+ type: integer
+ sequence:
+ type: integer
+ type: object
+ type: object
+ type: object
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: traceflows
+ singular: traceflow
+ kind: Traceflow
+ shortNames:
+ - tf
+---
+# Source: antrea/templates/crds/trafficcontrol.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: trafficcontrols.crd.antrea.io
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ type: object
+ required:
+ - appliedTo
+ - direction
+ - action
+ - targetPort
+ properties:
+ appliedTo:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ direction:
+ type: string
+ enum:
+ - Ingress
+ - Egress
+ - Both
+ action:
+ type: string
+ enum:
+ - Mirror
+ - Redirect
+ targetPort:
+ type: object
+ oneOf:
+ - required: [ovsInternal]
+ - required: [device]
+ - required: [geneve]
+ - required: [vxlan]
+ - required: [gre]
+ - required: [erspan]
+ properties:
+ ovsInternal:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ device:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ geneve:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ vni:
+ type: integer
+ minimum: 0
+ maximum: 16777215
+ destinationPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ vxlan:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ vni:
+ type: integer
+ minimum: 0
+ maximum: 16777215
+ destinationPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ gre:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ key:
+ type: integer
+ minimum: 0
+ maximum: 4294967295
+ erspan:
+ type: object
+ required:
+ - remoteIP
+ - version
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ sessionID:
+ type: integer
+ minimum: 0
+ maximum: 1023
+ version:
+ type: integer
+ enum:
+ - 1
+ - 2
+ index:
+ type: integer
+ dir:
+ type: integer
+ enum:
+ - 0
+ - 1
+ hardwareID:
+ type: integer
+ returnPort:
+ type: object
+ oneOf:
+ - required: [ovsInternal]
+ - required: [device]
+ - required: [geneve]
+ - required: [vxlan]
+ - required: [gre]
+ properties:
+ ovsInternal:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ device:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ geneve:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ vni:
+ type: integer
+ minimum: 0
+ maximum: 16777215
+ destinationPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ vxlan:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ vni:
+ type: integer
+ minimum: 0
+ maximum: 16777215
+ destinationPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ gre:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ key:
+ type: integer
+ minimum: 0
+ maximum: 4294967295
+ additionalPrinterColumns:
+ - description: Specifies the direction of traffic that should be matched.
+ jsonPath: .spec.direction
+ name: Direction
+ type: string
+ - description: Specifies the action that should be taken for the traffic.
+ jsonPath: .spec.action
+ name: Action
+ type: string
+ - jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: trafficcontrols
+ singular: trafficcontrol
+ kind: TrafficControl
+ shortNames:
+ - tc
+---
+# Source: antrea/templates/agent/clusterrole.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antrea-agent
+ labels:
+ app: antrea
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - ""
+ resources:
+ - nodes/status
+ verbs:
+ - patch
+ - apiGroups:
+ - ""
+ resources:
+ - pods
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - ""
+ resources:
+ - pods/status
+ verbs:
+ - patch
+ - apiGroups:
+ - ""
+ resources:
+ - endpoints
+ - services
+ - namespaces
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - discovery.k8s.io
+ resources:
+ - endpointslices
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - antreaagentinfos
+ verbs:
+ - get
+ - create
+ - update
+ - delete
+ - apiGroups:
+ - controlplane.antrea.io
+ resources:
+ - networkpolicies
+ - appliedtogroups
+ - addressgroups
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - controlplane.antrea.io
+ resources:
+ - egressgroups
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - controlplane.antrea.io
+ resources:
+ - nodestatssummaries
+ verbs:
+ - create
+ - apiGroups:
+ - controlplane.antrea.io
+ resources:
+ - networkpolicies/status
+ verbs:
+ - create
+ - get
+ - apiGroups:
+ - authentication.k8s.io
+ resources:
+ - tokenreviews
+ verbs:
+ - create
+ - apiGroups:
+ - authorization.k8s.io
+ resources:
+ - subjectaccessreviews
+ verbs:
+ - create
+ # This is the content of built-in role kube-system/extension-apiserver-authentication-reader.
+ # But it doesn't have list/watch permission before K8s v1.17.0 so the extension apiserver (antrea-agent) will
+ # have permission issue after bumping up apiserver library to a version that supports dynamic authentication.
+ # See https://github.com/kubernetes/kubernetes/pull/85375
+ # To support K8s clusters older than v1.17.0, we grant the required permissions directly instead of relying on
+ # the extension-apiserver-authentication role.
+ - apiGroups:
+ - ""
+ resourceNames:
+ - extension-apiserver-authentication
+ resources:
+ - configmaps
+ verbs:
+ - get
+ - list
+ - watch
+ - apiGroups:
+ - ""
+ resources:
+ - configmaps
+ resourceNames:
+ - antrea-ca
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - traceflows
+ - traceflows/status
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - create
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - egresses
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - egresses/status
+ verbs:
+ - update
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - externalippools
+ - ippools
+ - trafficcontrols
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - ippools/status
+ verbs:
+ - update
+ - apiGroups:
+ - k8s.cni.cncf.io
+ resources:
+ - network-attachment-definitions
+ verbs:
+ - get
+ - list
+ - watch
+---
+# Source: antrea/templates/antctl/clusterrole.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antctl
+ labels:
+ app: antrea
+rules:
+ - apiGroups:
+ - controlplane.antrea.io
+ resources:
+ - networkpolicies
+ - appliedtogroups
+ - addressgroups
+ verbs:
+ - get
+ - list
+ - apiGroups:
+ - stats.antrea.io
+ resources:
+ - networkpolicystats
+ - antreaclusternetworkpolicystats
+ - antreanetworkpolicystats
+ verbs:
+ - get
+ - list
+ - apiGroups:
+ - system.antrea.io
+ resources:
+ - controllerinfos
+ - agentinfos
+ verbs:
+ - get
+ - apiGroups:
+ - system.antrea.io
+ resources:
+ - supportbundles
+ verbs:
+ - get
+ - post
+ - apiGroups:
+ - system.antrea.io
+ resources:
+ - supportbundles/download
+ verbs:
+ - get
+ - nonResourceURLs:
+ - /agentinfo
+ - /addressgroups
+ - /appliedtogroups
+ - /loglevel
+ - /networkpolicies
+ - /ovsflows
+ - /ovstracing
+ - /podinterfaces
+ - /featuregates
+ - /serviceexternalip
+ verbs:
+ - get
+---
+# Source: antrea/templates/cluster-identity-reader/clusterrolebinding.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antrea-cluster-identity-reader
+ labels:
+ app: antrea
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - configmaps
+ resourceNames:
+ - antrea-cluster-identity
+ verbs:
+ - get
+---
+# Source: antrea/templates/controller/clusterrole.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antrea-controller
+ labels:
+ app: antrea
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - pods
+ - services
+ - namespaces
+ - configmaps
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ verbs:
+ - get
+ - watch
+ - list
+ - patch
+ - apiGroups:
+ - ""
+ resources:
+ - services/status
+ verbs:
+ - update
+ - apiGroups:
+ - networking.k8s.io
+ resources:
+ - networkpolicies
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - authentication.k8s.io
+ resources:
+ - tokenreviews
+ verbs:
+ - create
+ - apiGroups:
+ - authorization.k8s.io
+ resources:
+ - subjectaccessreviews
+ verbs:
+ - create
+ - apiGroups:
+ - apiextensions.k8s.io
+ resources:
+ - customresourcedefinitions
+ verbs:
+ - get
+ - update
+ # This is the content of built-in role kube-system/extension-apiserver-authentication-reader.
+ # But it doesn't have list/watch permission before K8s v1.17.0 so the extension apiserver (antrea-controller) will
+ # have permission issue after bumping up apiserver library to a version that supports dynamic authentication.
+ # See https://github.com/kubernetes/kubernetes/pull/85375
+ # To support K8s clusters older than v1.17.0, we grant the required permissions directly instead of relying on
+ # the extension-apiserver-authentication role.
+ - apiGroups:
+ - ""
+ resourceNames:
+ - extension-apiserver-authentication
+ resources:
+ - configmaps
+ verbs:
+ - get
+ - list
+ - watch
+ - apiGroups:
+ - ""
+ resources:
+ - configmaps
+ resourceNames:
+ - antrea-ca
+ - antrea-cluster-identity
+ verbs:
+ - get
+ - update
+ - apiGroups:
+ - ""
+ resources:
+ - configmaps
+ verbs:
+ - create
+ - apiGroups:
+ - apiregistration.k8s.io
+ resources:
+ - apiservices
+ resourceNames:
+ - v1alpha1.stats.antrea.io
+ - v1beta1.system.antrea.io
+ - v1beta2.controlplane.antrea.io
+ verbs:
+ - get
+ - update
+ - apiGroups:
+ - apiregistration.k8s.io
+ resources:
+ - apiservices
+ resourceNames:
+ - v1beta1.networking.antrea.tanzu.vmware.com
+ - v1beta1.controlplane.antrea.tanzu.vmware.com
+ - v1alpha1.stats.antrea.tanzu.vmware.com
+ - v1beta1.system.antrea.tanzu.vmware.com
+ - v1beta2.controlplane.antrea.tanzu.vmware.com
+ verbs:
+ - delete
+ - apiGroups:
+ - admissionregistration.k8s.io
+ resources:
+ - mutatingwebhookconfigurations
+ - validatingwebhookconfigurations
+ resourceNames:
+ # always give permissions for labelsmutator.antrea.io, even when the
+ # feature is disabled, to avoid errors in antrea-controller when updating
+ # the CA cert.
+ - labelsmutator.antrea.io
+ - crdmutator.antrea.io
+ - crdvalidator.antrea.io
+ verbs:
+ - get
+ - update
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - antreacontrollerinfos
+ verbs:
+ - get
+ - create
+ - update
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - antreaagentinfos
+ verbs:
+ - list
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - clusternetworkpolicies
+ - networkpolicies
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - create
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - clusternetworkpolicies/status
+ - networkpolicies/status
+ verbs:
+ - update
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - tiers
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - create
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - traceflows
+ - traceflows/status
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - create
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - externalentities
+ - clustergroups
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - create
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - clustergroups/status
+ verbs:
+ - update
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - egresses
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - externalippools
+ - ippools
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - externalippools/status
+ - ippools/status
+ verbs:
+ - update
+ - apiGroups:
+ - apps
+ resources:
+ - statefulsets
+ verbs:
+ - get
+ - list
+ - watch
+---
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
metadata:
+ name: aggregate-antrea-policies-edit
labels:
app: antrea
- name: antrea-config-tmhkc66d6c
- namespace: kube-system
+ # Add these permissions to the "admin" and "edit" default roles.
+ rbac.authorization.k8s.io/aggregate-to-admin: "true"
+ rbac.authorization.k8s.io/aggregate-to-edit: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["clusternetworkpolicies", "networkpolicies"]
+ verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
---
-apiVersion: v1
-kind: Secret
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
metadata:
- name: antrea-ipsec
- namespace: kube-system
-stringData:
- psk: changeme
-type: Opaque
+ name: aggregate-antrea-policies-view
+ labels:
+ app: antrea
+ # Add these permissions to the "view" default role.
+ rbac.authorization.k8s.io/aggregate-to-view: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["clusternetworkpolicies", "networkpolicies"]
+ verbs: ["get", "list", "watch"]
---
-apiVersion: v1
-kind: Service
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: aggregate-traceflows-edit
+ labels:
+ app: antrea
+ # Add these permissions to the "admin" and "edit" default roles.
+ rbac.authorization.k8s.io/aggregate-to-admin: "true"
+ rbac.authorization.k8s.io/aggregate-to-edit: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["traceflows"]
+ verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
+---
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
metadata:
+ name: aggregate-traceflows-view
+ labels:
+ app: antrea
+ # Add these permissions to the "view" default role.
+ rbac.authorization.k8s.io/aggregate-to-view: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["traceflows"]
+ verbs: ["get", "list", "watch"]
+---
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: aggregate-antrea-clustergroups-edit
+ labels:
+ app: antrea
+ # Add these permissions to the "admin" and "edit" default roles.
+ rbac.authorization.k8s.io/aggregate-to-admin: "true"
+ rbac.authorization.k8s.io/aggregate-to-edit: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["clustergroups"]
+ verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
+---
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: aggregate-antrea-clustergroups-view
+ labels:
+ app: antrea
+ # Add these permissions to the "view" default role.
+ rbac.authorization.k8s.io/aggregate-to-view: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["clustergroups"]
+ verbs: ["get", "list", "watch"]
+---
+# Source: antrea/templates/agent/clusterrolebinding.yaml
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antrea-agent
+ labels:
+ app: antrea
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: antrea-agent
+subjects:
+ - kind: ServiceAccount
+ name: antrea-agent
+ namespace: kube-system
+---
+# Source: antrea/templates/antctl/clusterrolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ labels:
+ app: antrea
+ name: antctl
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: antctl
+subjects:
+ - kind: ServiceAccount
+ name: antctl
+ namespace: kube-system
+---
+# Source: antrea/templates/controller/clusterrolebinding.yaml
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antrea-controller
labels:
app: antrea
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: antrea-controller
+subjects:
+ - kind: ServiceAccount
+ name: antrea-controller
+ namespace: kube-system
+---
+# Source: antrea/templates/controller/service.yaml
+apiVersion: v1
+kind: Service
+metadata:
name: antrea
namespace: kube-system
+ labels:
+ app: antrea
spec:
ports:
- - port: 443
- protocol: TCP
- targetPort: api
+ - port: 443
+ protocol: TCP
+ targetPort: api
selector:
app: antrea
component: antrea-controller
---
+# Source: antrea/templates/agent/daemonset.yaml
apiVersion: apps/v1
-kind: Deployment
+kind: DaemonSet
metadata:
+ name: antrea-agent
+ namespace: kube-system
labels:
app: antrea
- component: antrea-controller
+ component: antrea-agent
+spec:
+ selector:
+ matchLabels:
+ app: antrea
+ component: antrea-agent
+ updateStrategy:
+ type: RollingUpdate
+ template:
+ metadata:
+ annotations:
+ # Starting with v1.21, Kubernetes supports default container annotation.
+ # Using "kubectl logs/exec/attach/cp" doesn't have to specify "-c antrea-agent" when troubleshooting.
+ kubectl.kubernetes.io/default-container: antrea-agent
+ # Automatically restart Pods with a RollingUpdate if the ConfigMap changes
+ # See https://helm.sh/docs/howto/charts_tips_and_tricks/#automatically-roll-deployments
+ checksum/config: d5038309e5a226d5d860b167b95e0d8ed55af1914526f52e5ef8600e527695e5
+ checksum/ipsec-secret: d0eb9c52d0cd4311b6d252a951126bf9bea27ec05590bed8a394f0f792dcb2a4
+ labels:
+ app: antrea
+ component: antrea-agent
+ spec:
+ hostNetwork: true
+ dnsPolicy: ClusterFirstWithHostNet
+ priorityClassName: system-node-critical
+ nodeSelector:
+ kubernetes.io/os: linux
+ tolerations:
+ - key: CriticalAddonsOnly
+ operator: Exists
+ - effect: NoSchedule
+ operator: Exists
+ - effect: NoExecute
+ operator: Exists
+ serviceAccountName: antrea-agent
+ initContainers:
+ - name: install-cni
+ image: "projects.registry.vmware.com/antrea/antrea-ubuntu:latest"
+ imagePullPolicy: IfNotPresent
+ resources:
+ requests:
+ cpu: 100m
+ command: ["install_cni"]
+ securityContext:
+ capabilities:
+ add:
+ # SYS_MODULE is required to load the OVS kernel module.
+ - SYS_MODULE
+ env:
+ # SKIP_CNI_BINARIES takes in values as a comma separated list of
+ # binaries that need to be skipped for installation, e.g. "portmap, bandwidth".
+ - name: SKIP_CNI_BINARIES
+ value: ""
+ volumeMounts:
+ - name: antrea-config
+ mountPath: /etc/antrea/antrea-cni.conflist
+ subPath: antrea-cni.conflist
+ readOnly: true
+ - name: host-cni-conf
+ mountPath: /host/etc/cni/net.d
+ - name: host-cni-bin
+ mountPath: /host/opt/cni/bin
+ # For loading the OVS kernel module.
+ - name: host-lib-modules
+ mountPath: /lib/modules
+ readOnly: true
+ # For changing the default permissions of the run directory.
+ - name: host-var-run-antrea
+ mountPath: /var/run/antrea
+ containers:
+ - name: antrea-agent
+ image: "projects.registry.vmware.com/antrea/antrea-ubuntu:latest"
+ imagePullPolicy: IfNotPresent
+ command: ["antrea-agent"]
+ # Log to both "/var/log/antrea/" and stderr (so "kubectl logs" can work).-
+ args:
+ - "--config=/etc/antrea/antrea-agent.conf"
+ - "--logtostderr=false"
+ - "--log_dir=/var/log/antrea"
+ - "--alsologtostderr"
+ - "--log_file_max_size=100"
+ - "--log_file_max_num=4"
+ env:
+ # Provide pod and node information for clusterinformation CRD.
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ # Pre-shared key for IPsec IKE.
+ - name: ANTREA_IPSEC_PSK
+ valueFrom:
+ secretKeyRef:
+ name: antrea-ipsec
+ key: psk
+ resources:
+ requests:
+ cpu: 200m
+ ports:
+ - containerPort: 10350
+ name: api
+ protocol: TCP
+ livenessProbe:
+ exec:
+ command:
+ - /bin/sh
+ - -c
+ - container_liveness_probe agent
+ initialDelaySeconds: 5
+ timeoutSeconds: 5
+ periodSeconds: 10
+ failureThreshold: 5
+ readinessProbe:
+ httpGet:
+ host: localhost
+ path: /readyz
+ port: api
+ scheme: HTTPS
+ initialDelaySeconds: 5
+ timeoutSeconds: 5
+ periodSeconds: 10
+ # In large-scale clusters, it may take up to 40~50 seconds for the antrea-agent to reconnect to the antrea
+ # Service after the antrea-controller restarts. The antrea-agent shouldn't be reported as NotReady in this
+ # scenario, otherwise the DaemonSet controller would restart all agents at once, as opposed to performing a
+ # rolling update. Set failureThreshold to 8 so it can tolerate 70s of disconnection.
+ failureThreshold: 8
+ securityContext:
+ # antrea-agent needs to perform sysctl configuration.
+ privileged: true
+ volumeMounts:
+ - name: antrea-config
+ mountPath: /etc/antrea/antrea-agent.conf
+ subPath: antrea-agent.conf
+ readOnly: true
+ - name: host-var-run-antrea
+ mountPath: /var/run/antrea
+ - name: host-var-run-antrea
+ mountPath: /var/run/openvswitch
+ subPath: openvswitch
+ # host-local IPAM stores allocated IP addresses as files in /var/lib/cni/networks/$NETWORK_NAME.
+ # Mount a sub-directory of host-var-run-antrea to it for persistence of IP allocation.
+ - name: host-var-run-antrea
+ mountPath: /var/lib/cni
+ subPath: cni
+ # We need to mount both the /proc directory and the /var/run/netns directory so that
+ # antrea-agent can open the network namespace path when setting up Pod
+ # networking. Different container runtimes may use /proc or /var/run/netns when invoking
+ # the CNI commands. Docker uses /proc and containerd uses /var/run/netns.
+ - name: host-var-log-antrea
+ mountPath: /var/log/antrea
+ - name: host-proc
+ mountPath: /host/proc
+ readOnly: true
+ - name: host-var-run-netns
+ mountPath: /host/var/run/netns
+ readOnly: true
+ # When a container is created, a mount point for the network namespace is added under
+ # /var/run/netns on the host, which needs to be propagated to the antrea-agent container.
+ mountPropagation: HostToContainer
+ - name: xtables-lock
+ mountPath: /run/xtables.lock
+ - name: antrea-ovs
+ image: "projects.registry.vmware.com/antrea/antrea-ubuntu:latest"
+ imagePullPolicy: IfNotPresent
+ resources:
+ requests:
+ cpu: 200m
+ command: ["start_ovs"]
+ args:
+ - "--log_file_max_size=100"
+ - "--log_file_max_num=4"
+ securityContext:
+ # capabilities required by OVS daemons
+ capabilities:
+ add:
+ - SYS_NICE
+ - NET_ADMIN
+ - SYS_ADMIN
+ - IPC_LOCK
+ livenessProbe:
+ exec:
+ # docker CRI doesn't honor timeoutSeconds, add "timeout" to the command as a workaround.
+ # https://github.com/kubernetes/kubernetes/issues/51901
+ command:
+ - /bin/sh
+ - -c
+ - timeout 10 container_liveness_probe ovs
+ initialDelaySeconds: 5
+ timeoutSeconds: 10
+ periodSeconds: 10
+ failureThreshold: 5
+ volumeMounts:
+ - name: host-var-run-antrea
+ mountPath: /var/run/openvswitch
+ subPath: openvswitch
+ - name: host-var-log-antrea
+ mountPath: /var/log/openvswitch
+ subPath: openvswitch
+ - name: antrea-ipsec
+ image: "projects.registry.vmware.com/antrea/antrea-ubuntu:latest"
+ imagePullPolicy: IfNotPresent
+ resources:
+ requests:
+ cpu: 50m
+ command: ["start_ovs_ipsec"]
+ livenessProbe:
+ exec:
+ command:
+ - /bin/sh
+ - -c
+ - timeout 5 container_liveness_probe ovs-ipsec
+ initialDelaySeconds: 5
+ periodSeconds: 5
+ securityContext:
+ capabilities:
+ add:
+ - NET_ADMIN
+ volumeMounts:
+ - name: host-var-run-antrea
+ mountPath: /var/run/openvswitch
+ subPath: openvswitch
+ - name: host-var-log-antrea
+ mountPath: /var/log/openvswitch
+ subPath: openvswitch
+ - name: host-var-log-antrea
+ mountPath: /var/log/strongswan
+ subPath: strongswan
+ volumes:
+ - name: antrea-config
+ configMap:
+ name: antrea-config
+ - name: host-cni-conf
+ hostPath:
+ path: /etc/cni/net.d
+ - name: host-cni-bin
+ hostPath:
+ path: /opt/cni/bin
+ - name: host-proc
+ hostPath:
+ path: /proc
+ - name: host-var-run-netns
+ hostPath:
+ path: /var/run/netns
+ - name: host-var-run-antrea
+ hostPath:
+ path: /var/run/antrea
+ # we use subPath to create run subdirectories for different component (e.g. OVS) and
+ # subPath requires the base volume to exist
+ type: DirectoryOrCreate
+ - name: host-var-log-antrea
+ hostPath:
+ path: /var/log/antrea
+ # we use subPath to create logging subdirectories for different component (e.g. OVS)
+ type: DirectoryOrCreate
+ - name: host-lib-modules
+ hostPath:
+ path: /lib/modules
+ - name: xtables-lock
+ hostPath:
+ path: /run/xtables.lock
+ type: FileOrCreate
+---
+# Source: antrea/templates/controller/deployment.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
name: antrea-controller
namespace: kube-system
+ labels:
+ app: antrea
+ component: antrea-controller
spec:
- replicas: 1
+ strategy:
+ # Ensure the existing Pod is stopped before the new one is created.
+ type: Recreate
selector:
matchLabels:
app: antrea
component: antrea-controller
- strategy:
- type: Recreate
+ replicas: 1
template:
metadata:
+ annotations:
+ # Automatically restart Pod if the ConfigMap changes
+ # See https://helm.sh/docs/howto/charts_tips_and_tricks/#automatically-roll-deployments
+ checksum/config: d5038309e5a226d5d860b167b95e0d8ed55af1914526f52e5ef8600e527695e5
labels:
app: antrea
component: antrea-controller
spec:
- containers:
- - args:
- - --config
- - /etc/antrea/antrea-controller.conf
- - --logtostderr=false
- - --log_dir=/var/log/antrea
- - --alsologtostderr
- - --log_file_max_size=100
- - --log_file_max_num=4
- - --v=0
- command:
- - antrea-controller
- env:
- - name: POD_NAME
- valueFrom:
- fieldRef:
- fieldPath: metadata.name
- - name: POD_NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- - name: NODE_NAME
- valueFrom:
- fieldRef:
- fieldPath: spec.nodeName
- - name: SERVICEACCOUNT_NAME
- valueFrom:
- fieldRef:
- fieldPath: spec.serviceAccountName
- - name: ANTREA_CONFIG_MAP_NAME
- value: antrea-config-tmhkc66d6c
- image: projects.registry.vmware.com/antrea/antrea-ubuntu:latest
- imagePullPolicy: IfNotPresent
- livenessProbe:
- failureThreshold: 5
- httpGet:
- host: localhost
- path: /livez
- port: api
- scheme: HTTPS
- periodSeconds: 10
- timeoutSeconds: 5
- name: antrea-controller
- ports:
- - containerPort: 10349
- name: api
- protocol: TCP
- readinessProbe:
- failureThreshold: 5
- httpGet:
- host: localhost
- path: /readyz
- port: api
- scheme: HTTPS
- initialDelaySeconds: 5
- periodSeconds: 10
- timeoutSeconds: 5
- resources:
- requests:
- cpu: 200m
- volumeMounts:
- - mountPath: /etc/antrea/antrea-controller.conf
- name: antrea-config
- readOnly: true
- subPath: antrea-controller.conf
- - mountPath: /var/run/antrea/antrea-controller-tls
- name: antrea-controller-tls
- - mountPath: /var/log/antrea
- name: host-var-log-antrea
- hostNetwork: true
nodeSelector:
kubernetes.io/os: linux
+ hostNetwork: true
priorityClassName: system-cluster-critical
- serviceAccountName: antrea-controller
tolerations:
- - key: CriticalAddonsOnly
- operator: Exists
- - effect: NoSchedule
- key: node-role.kubernetes.io/master
+ - key: CriticalAddonsOnly
+ operator: Exists
+ - effect: NoSchedule
+ key: node-role.kubernetes.io/master
+ - effect: NoSchedule
+ key: node-role.kubernetes.io/control-plane
+ serviceAccountName: antrea-controller
+ containers:
+ - name: antrea-controller
+ image: "projects.registry.vmware.com/antrea/antrea-ubuntu:latest"
+ imagePullPolicy: IfNotPresent
+ resources:
+ requests:
+ cpu: 200m
+ command: ["antrea-controller"]
+ # Log to both "/var/log/antrea/" and stderr (so "kubectl logs" can work).
+ args:
+ - "--config=/etc/antrea/antrea-controller.conf"
+ - "--logtostderr=false"
+ - "--log_dir=/var/log/antrea"
+ - "--alsologtostderr"
+ - "--log_file_max_size=100"
+ - "--log_file_max_num=4"
+ env:
+ # Provide pod and node information for clusterinformation CRD.
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ # Provide ServiceAccount name for validation webhook.
+ - name: SERVICEACCOUNT_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.serviceAccountName
+ - name: ANTREA_CONFIG_MAP_NAME
+ value: antrea-config
+ ports:
+ - containerPort: 10349
+ name: api
+ protocol: TCP
+ readinessProbe:
+ httpGet:
+ host: localhost
+ path: /readyz
+ port: api
+ scheme: HTTPS
+ initialDelaySeconds: 5
+ timeoutSeconds: 5
+ periodSeconds: 10
+ failureThreshold: 5
+ livenessProbe:
+ httpGet:
+ host: localhost
+ path: /livez
+ port: api
+ scheme: HTTPS
+ timeoutSeconds: 5
+ periodSeconds: 10
+ failureThreshold: 5
+ volumeMounts:
+ - name: antrea-config
+ mountPath: /etc/antrea/antrea-controller.conf
+ subPath: antrea-controller.conf
+ readOnly: true
+ - name: antrea-controller-tls
+ mountPath: /var/run/antrea/antrea-controller-tls
+ - name: host-var-log-antrea
+ mountPath: /var/log/antrea
volumes:
- - configMap:
- name: antrea-config-tmhkc66d6c
- name: antrea-config
- - name: antrea-controller-tls
- secret:
- defaultMode: 256
- optional: true
- secretName: antrea-controller-tls
- - hostPath:
- path: /var/log/antrea
- type: DirectoryOrCreate
- name: host-var-log-antrea
+ - name: antrea-config
+ configMap:
+ name: antrea-config
+ # Make it optional as we only read it when selfSignedCert=false.
+ - name: antrea-controller-tls
+ secret:
+ secretName: antrea-controller-tls
+ defaultMode: 0400
+ optional: true
+ - name: host-var-log-antrea
+ hostPath:
+ path: /var/log/antrea
+ type: DirectoryOrCreate
---
+# Source: antrea/templates/controller/apiservices.yaml
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
+ name: v1beta2.controlplane.antrea.io
labels:
app: antrea
- name: v1alpha1.stats.antrea.io
spec:
- group: stats.antrea.io
+ group: controlplane.antrea.io
groupPriorityMinimum: 100
+ version: v1beta2
+ versionPriority: 100
service:
name: antrea
namespace: kube-system
- version: v1alpha1
- versionPriority: 100
---
+# Source: antrea/templates/controller/apiservices.yaml
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
+ name: v1beta1.system.antrea.io
labels:
app: antrea
- name: v1beta1.system.antrea.io
spec:
group: system.antrea.io
groupPriorityMinimum: 100
+ version: v1beta1
+ versionPriority: 100
service:
name: antrea
namespace: kube-system
- version: v1beta1
- versionPriority: 100
---
+# Source: antrea/templates/controller/apiservices.yaml
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
+ name: v1alpha1.stats.antrea.io
labels:
app: antrea
- name: v1beta2.controlplane.antrea.io
spec:
- group: controlplane.antrea.io
+ group: stats.antrea.io
groupPriorityMinimum: 100
+ version: v1alpha1
+ versionPriority: 100
service:
name: antrea
namespace: kube-system
- version: v1beta2
- versionPriority: 100
----
-apiVersion: apps/v1
-kind: DaemonSet
-metadata:
- labels:
- app: antrea
- component: antrea-agent
- name: antrea-agent
- namespace: kube-system
-spec:
- selector:
- matchLabels:
- app: antrea
- component: antrea-agent
- template:
- metadata:
- annotations:
- kubectl.kubernetes.io/default-container: antrea-agent
- labels:
- app: antrea
- component: antrea-agent
- spec:
- containers:
- - command:
- - start_ovs_ipsec
- image: projects.registry.vmware.com/antrea/antrea-ubuntu:latest
- imagePullPolicy: IfNotPresent
- livenessProbe:
- exec:
- command:
- - /bin/sh
- - -c
- - timeout 5 container_liveness_probe ovs-ipsec
- initialDelaySeconds: 5
- periodSeconds: 5
- name: antrea-ipsec
- resources:
- requests:
- cpu: 50m
- securityContext:
- capabilities:
- add:
- - NET_ADMIN
- volumeMounts:
- - mountPath: /var/run/openvswitch
- name: host-var-run-antrea
- subPath: openvswitch
- - mountPath: /var/log/openvswitch
- name: host-var-log-antrea
- subPath: openvswitch
- - mountPath: /var/log/strongswan
- name: host-var-log-antrea
- subPath: strongswan
- - args:
- - --config
- - /etc/antrea/antrea-agent.conf
- - --logtostderr=false
- - --log_dir=/var/log/antrea
- - --alsologtostderr
- - --log_file_max_size=100
- - --log_file_max_num=4
- - --v=0
- command:
- - antrea-agent
- env:
- - name: ANTREA_IPSEC_PSK
- valueFrom:
- secretKeyRef:
- key: psk
- name: antrea-ipsec
- - name: POD_NAME
- valueFrom:
- fieldRef:
- fieldPath: metadata.name
- - name: POD_NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- - name: NODE_NAME
- valueFrom:
- fieldRef:
- fieldPath: spec.nodeName
- image: projects.registry.vmware.com/antrea/antrea-ubuntu:latest
- imagePullPolicy: IfNotPresent
- livenessProbe:
- exec:
- command:
- - /bin/sh
- - -c
- - container_liveness_probe agent
- failureThreshold: 5
- initialDelaySeconds: 5
- periodSeconds: 10
- timeoutSeconds: 5
- name: antrea-agent
- ports:
- - containerPort: 10350
- name: api
- protocol: TCP
- readinessProbe:
- failureThreshold: 8
- httpGet:
- host: localhost
- path: /readyz
- port: api
- scheme: HTTPS
- initialDelaySeconds: 5
- periodSeconds: 10
- timeoutSeconds: 5
- resources:
- requests:
- cpu: 200m
- securityContext:
- privileged: true
- volumeMounts:
- - mountPath: /etc/antrea/antrea-agent.conf
- name: antrea-config
- readOnly: true
- subPath: antrea-agent.conf
- - mountPath: /var/run/antrea
- name: host-var-run-antrea
- - mountPath: /var/run/openvswitch
- name: host-var-run-antrea
- subPath: openvswitch
- - mountPath: /var/lib/cni
- name: host-var-run-antrea
- subPath: cni
- - mountPath: /var/log/antrea
- name: host-var-log-antrea
- - mountPath: /host/proc
- name: host-proc
- readOnly: true
- - mountPath: /host/var/run/netns
- mountPropagation: HostToContainer
- name: host-var-run-netns
- readOnly: true
- - mountPath: /run/xtables.lock
- name: xtables-lock
- - args:
- - --log_file_max_size=100
- - --log_file_max_num=4
- command:
- - start_ovs
- image: projects.registry.vmware.com/antrea/antrea-ubuntu:latest
- imagePullPolicy: IfNotPresent
- livenessProbe:
- exec:
- command:
- - /bin/sh
- - -c
- - timeout 10 container_liveness_probe ovs
- failureThreshold: 5
- initialDelaySeconds: 5
- periodSeconds: 10
- timeoutSeconds: 10
- name: antrea-ovs
- resources:
- requests:
- cpu: 200m
- securityContext:
- capabilities:
- add:
- - SYS_NICE
- - NET_ADMIN
- - SYS_ADMIN
- - IPC_LOCK
- volumeMounts:
- - mountPath: /var/run/openvswitch
- name: host-var-run-antrea
- subPath: openvswitch
- - mountPath: /var/log/openvswitch
- name: host-var-log-antrea
- subPath: openvswitch
- dnsPolicy: ClusterFirstWithHostNet
- hostNetwork: true
- initContainers:
- - command:
- - install_cni
- env:
- - name: SKIP_CNI_BINARIES
- value: ""
- image: projects.registry.vmware.com/antrea/antrea-ubuntu:latest
- imagePullPolicy: IfNotPresent
- name: install-cni
- resources:
- requests:
- cpu: 100m
- securityContext:
- capabilities:
- add:
- - SYS_MODULE
- volumeMounts:
- - mountPath: /etc/antrea/antrea-cni.conflist
- name: antrea-config
- readOnly: true
- subPath: antrea-cni.conflist
- - mountPath: /host/etc/cni/net.d
- name: host-cni-conf
- - mountPath: /host/opt/cni/bin
- name: host-cni-bin
- - mountPath: /lib/modules
- name: host-lib-modules
- readOnly: true
- - mountPath: /var/run/antrea
- name: host-var-run-antrea
- nodeSelector:
- kubernetes.io/os: linux
- priorityClassName: system-node-critical
- serviceAccountName: antrea-agent
- tolerations:
- - key: CriticalAddonsOnly
- operator: Exists
- - effect: NoSchedule
- operator: Exists
- - effect: NoExecute
- operator: Exists
- volumes:
- - configMap:
- name: antrea-config-tmhkc66d6c
- name: antrea-config
- - hostPath:
- path: /etc/cni/net.d
- name: host-cni-conf
- - hostPath:
- path: /opt/cni/bin
- name: host-cni-bin
- - hostPath:
- path: /proc
- name: host-proc
- - hostPath:
- path: /var/run/netns
- name: host-var-run-netns
- - hostPath:
- path: /var/run/antrea
- type: DirectoryOrCreate
- name: host-var-run-antrea
- - hostPath:
- path: /var/log/antrea
- type: DirectoryOrCreate
- name: host-var-log-antrea
- - hostPath:
- path: /lib/modules
- name: host-lib-modules
- - hostPath:
- path: /run/xtables.lock
- type: FileOrCreate
- name: xtables-lock
- updateStrategy:
- type: RollingUpdate
---
+# Source: antrea/templates/webhooks/mutating/crdmutator.yaml
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata:
+ name: "crdmutator.antrea.io"
labels:
app: antrea
- name: crdmutator.antrea.io
webhooks:
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /mutate/acnp
- name: acnpmutator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - clusternetworkpolicies
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /mutate/anp
- name: anpmutator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - networkpolicies
- scope: Namespaced
- sideEffects: None
- timeoutSeconds: 5
+ - name: "acnpmutator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/mutate/acnp"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["clusternetworkpolicies"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "anpmutator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/mutate/anp"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["networkpolicies"]
+ scope: "Namespaced"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
---
+# Source: antrea/templates/webhooks/validating/crdvalidator.yaml
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
+ name: "crdvalidator.antrea.io"
labels:
app: antrea
- name: crdvalidator.antrea.io
webhooks:
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/tier
- name: tiervalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- - DELETE
- resources:
- - tiers
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/acnp
- name: acnpvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - clusternetworkpolicies
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/anp
- name: anpvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - networkpolicies
- scope: Namespaced
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/clustergroup
- name: clustergroupvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha3
- - v1alpha2
- operations:
- - CREATE
- - UPDATE
- resources:
- - clustergroups
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/externalippool
- name: externalippoolvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha2
- operations:
- - UPDATE
- resources:
- - externalippools
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/egress
- name: egressvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha2
- operations:
- - CREATE
- - UPDATE
- resources:
- - egresses
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/ippool
- name: ippoolvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha2
- operations:
- - CREATE
- - UPDATE
- - DELETE
- resources:
- - ippools
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
+ - name: "tiervalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/tier"
+ rules:
+ - operations: ["CREATE", "UPDATE", "DELETE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["tiers"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "acnpvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/acnp"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["clusternetworkpolicies"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "anpvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/anp"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["networkpolicies"]
+ scope: "Namespaced"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "clustergroupvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/clustergroup"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha3", "v1alpha2"]
+ resources: ["clustergroups"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "externalippoolvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/externalippool"
+ rules:
+ - operations: ["UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha2"]
+ resources: ["externalippools"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "egressvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/egress"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha2"]
+ resources: ["egresses"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "ippoolvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/ippool"
+ rules:
+ - operations: ["CREATE", "UPDATE", "DELETE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha2"]
+ resources: ["ippools"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
diff --git a/build/yamls/antrea-prometheus.yml b/build/yamls/antrea-prometheus.yml
index 3ee508fa0c9..84a5bbbb7b7 100644
--- a/build/yamls/antrea-prometheus.yml
+++ b/build/yamls/antrea-prometheus.yml
@@ -12,6 +12,16 @@ metadata:
name: prometheus
namespace: monitoring
---
+# This is useful for testing and manual access to the /metrics endpoints
+apiVersion: v1
+kind: Secret
+metadata:
+ name: prometheus-service-account-token
+ namespace: monitoring
+ annotations:
+ kubernetes.io/service-account.name: prometheus
+type: kubernetes.io/service-account-token
+---
# Authorize Prometheus to view Kubernetes cluster components for service discovery purposes
# Authorize Prometheus to retrieve metrics
apiVersion: rbac.authorization.k8s.io/v1
diff --git a/build/yamls/antrea-windows.yml b/build/yamls/antrea-windows.yml
index 100e0c7783b..7af06ec8e24 100644
--- a/build/yamls/antrea-windows.yml
+++ b/build/yamls/antrea-windows.yml
@@ -5,12 +5,12 @@ data:
# wins will rename the binary when executing it. So we need to copy the binary everytime before running it.
mkdir -force /host/k/antrea/bin
cp /k/antrea/bin/* /host/k/antrea/bin/
- C:/k/antrea/utils/wins.exe cli process run --path /k/antrea/bin/antrea-agent.exe --args "--config=/k/antrea/etc/antrea-agent.conf --logtostderr=false --log_dir=/k/antrea/logs/ --alsologtostderr --log_file_max_size=100 --log_file_max_num=4 --v=0" --envs "KUBERNETES_SERVICE_HOST=$env:KUBERNETES_SERVICE_HOST KUBERNETES_SERVICE_PORT=$env:KUBERNETES_SERVICE_PORT ANTREA_SERVICE_HOST=$env:ANTREA_SERVICE_HOST ANTREA_SERVICE_PORT=$env:ANTREA_SERVICE_PORT NODE_NAME=$env:NODE_NAME KUBE_DNS_SERVICE_HOST=$env:KUBE_DNS_SERVICE_HOST KUBE_DNS_SERVICE_PORT=$env:KUBE_DNS_SERVICE_PORT"
+ C:/k/antrea/utils/wins.exe cli process run --path /k/antrea/bin/antrea-agent.exe --args "--config=/k/antrea/etc/antrea-agent.conf --logtostderr=false --log_dir=/var/log/antrea/ --alsologtostderr --log_file_max_size=100 --log_file_max_num=4 --v=0" --envs "KUBERNETES_SERVICE_HOST=$env:KUBERNETES_SERVICE_HOST KUBERNETES_SERVICE_PORT=$env:KUBERNETES_SERVICE_PORT ANTREA_SERVICE_HOST=$env:ANTREA_SERVICE_HOST ANTREA_SERVICE_PORT=$env:ANTREA_SERVICE_PORT NODE_NAME=$env:NODE_NAME KUBE_DNS_SERVICE_HOST=$env:KUBE_DNS_SERVICE_HOST KUBE_DNS_SERVICE_PORT=$env:KUBE_DNS_SERVICE_PORT"
kind: ConfigMap
metadata:
labels:
app: antrea
- name: antrea-agent-windows-d99k4g5264
+ name: antrea-agent-windows-kht6m7hthm
namespace: kube-system
---
apiVersion: v1
@@ -28,6 +28,9 @@ data:
# this flag will not take effect.
# EndpointSlice: false
+ # Enable NodePortLocal feature to make the Pods reachable externally through NodePort
+ # NodePortLocal: true
+
# Enable flowexporter which exports polled conntrack connections as IPFIX flow records from each agent to a configured collector.
# FlowExporter: false
@@ -131,6 +134,17 @@ data:
# Note that this option is experimental. If kube-proxy is removed, option kubeAPIServerOverride must be used to access
# apiserver directly.
#proxyAll: false
+
+ nodePortLocal:
+ # Enable NodePortLocal, a feature used to make Pods reachable using port forwarding on the host. To
+ # enable this feature, you need to set "enable" to true, and ensure that the NodePortLocal feature
+ # gate is also enabled (which is the default).
+ # enable: false
+ # Provide the port range used by NodePortLocal. When the NodePortLocal feature is enabled, a port
+ # from that range will be assigned whenever a Pod's container defines a specific port to be exposed
+ # (each container can define a list of ports as pod.spec.containers[].ports), and all Node traffic
+ # directed to that port will be forwarded to the Pod.
+ # portRange: 61000-62000
antrea-cni.conflist: |
{
"cniVersion":"0.3.0",
@@ -149,7 +163,7 @@ kind: ConfigMap
metadata:
labels:
app: antrea
- name: antrea-windows-config-mf82kffb45
+ name: antrea-windows-config-8kfkb8t957
namespace: kube-system
---
apiVersion: apps/v1
@@ -194,8 +208,6 @@ spec:
imagePullPolicy: IfNotPresent
name: antrea-agent
volumeMounts:
- - mountPath: /host
- name: host
- mountPath: \\.\pipe\rancher_wins
name: wins
- mountPath: /etc/antrea
@@ -204,6 +216,8 @@ spec:
name: antrea-agent-windows
- mountPath: /host/k/antrea/
name: host-antrea-home
+ - mountPath: /var/log/antrea/
+ name: var-log-antrea
hostNetwork: true
initContainers:
- args:
@@ -224,8 +238,8 @@ spec:
name: host-cni-bin
- mountPath: /host/k/antrea/
name: host-antrea-home
- - mountPath: /host
- name: host
+ - mountPath: /host/var/run/secrets/
+ name: host-secrets-path
nodeSelector:
kubernetes.io/os: windows
priorityClassName: system-node-critical
@@ -237,11 +251,11 @@ spec:
operator: Exists
volumes:
- configMap:
- name: antrea-windows-config-mf82kffb45
+ name: antrea-windows-config-8kfkb8t957
name: antrea-windows-config
- configMap:
defaultMode: 420
- name: antrea-agent-windows-d99k4g5264
+ name: antrea-agent-windows-kht6m7hthm
name: antrea-agent-windows
- hostPath:
path: /etc/cni/net.d
@@ -255,11 +269,16 @@ spec:
path: /k/antrea
type: DirectoryOrCreate
name: host-antrea-home
- - hostPath:
- path: /
- name: host
- hostPath:
path: \\.\pipe\rancher_wins
name: wins
+ - hostPath:
+ path: /var/log/antrea/
+ type: DirectoryOrCreate
+ name: var-log-antrea
+ - hostPath:
+ path: /var/run/secrets/
+ type: DirectoryOrCreate
+ name: host-secrets-path
updateStrategy:
type: RollingUpdate
diff --git a/build/yamls/antrea.yml b/build/yamls/antrea.yml
index d5a7d4db29f..2b02024377d 100644
--- a/build/yamls/antrea.yml
+++ b/build/yamls/antrea.yml
@@ -1,2740 +1,59 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
+---
+# Source: antrea/templates/agent/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
metadata:
+ name: antrea-agent
+ namespace: kube-system
labels:
app: antrea
- name: antreaagentinfos.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: AntreaAgentInfo
- plural: antreaagentinfos
- shortNames:
- - aai
- singular: antreaagentinfo
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: Health status of this Agent
- jsonPath: .agentConditions[?(@.type=='AgentHealthy')].status
- name: Healthy
- type: string
- - description: Last time the Healthy Condition was updated
- jsonPath: .agentConditions[?(@.type=='AgentHealthy')].lastHeartbeatTime
- name: Last Heartbeat
- type: date
- - description: Version of this Agent
- jsonPath: .version
- name: Version
- priority: 1
- type: string
- - description: Node on which this Agent is running
- jsonPath: .nodeRef.name
- name: Node
- priority: 1
- type: string
- - description: Number of local Pods managed by this Agent
- jsonPath: .localPodNum
- name: Num Pods
- priority: 2
- type: integer
- - description: Subnets used by this Agent for Pod IPAM
- jsonPath: .nodeSubnets
- name: Subnets
- priority: 2
- type: string
- name: v1beta1
- schema:
- openAPIV3Schema:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- served: true
- storage: true
---
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
+# Source: antrea/templates/antctl/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
metadata:
+ name: antctl
+ namespace: kube-system
labels:
app: antrea
- name: antreacontrollerinfos.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: AntreaControllerInfo
- plural: antreacontrollerinfos
- shortNames:
- - aci
- singular: antreacontrollerinfo
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: Health status of the Controller
- jsonPath: .controllerConditions[?(@.type=='ControllerHealthy')].status
- name: Healthy
- type: string
- - description: Last time the Healthy Condition was updated
- jsonPath: .controllerConditions[?(@.type=='ControllerHealthy')].lastHeartbeatTime
- name: Last Heartbeat
- type: date
- - description: Version of the Controller
- jsonPath: .version
- name: Version
- priority: 1
- type: string
- - description: Number of Agents connected to the Controller
- jsonPath: .connectedAgentNum
- name: Connected Agents
- priority: 1
- type: integer
- - description: Node on which the Controller is running
- jsonPath: .nodeRef.name
- name: Node
- priority: 1
- type: string
- - description: Number of Network Policies computed by Controller
- jsonPath: .networkPolicyControllerInfo.networkPolicyNum
- name: Num Network Policies
- priority: 2
- type: integer
- name: v1beta1
- schema:
- openAPIV3Schema:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- served: true
- storage: true
---
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
+# Source: antrea/templates/controller/serviceaccount.yaml
+apiVersion: v1
+kind: ServiceAccount
metadata:
+ name: antrea-controller
+ namespace: kube-system
labels:
app: antrea
- name: clustergroups.crd.antrea.io
-spec:
- conversion:
- strategy: Webhook
- webhook:
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /convert/clustergroup
- conversionReviewVersions:
- - v1
- - v1beta1
- group: crd.antrea.io
- names:
- kind: ClusterGroup
- plural: clustergroups
- shortNames:
- - cg
- singular: clustergroup
- scope: Cluster
- versions:
- - name: v1alpha2
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- childGroups:
- items:
- type: string
- type: array
- externalEntitySelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- ipBlock:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- ipBlocks:
- items:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- type: array
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceReference:
- properties:
- name:
- type: string
- namespace:
- type: string
- type: object
- type: object
- status:
- properties:
- conditions:
- items:
- properties:
- lastTransitionTime:
- type: string
- status:
- type: string
- type:
- type: string
- type: object
- type: array
- type: object
- type: object
- served: true
- storage: false
- - name: v1alpha3
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- childGroups:
- items:
- type: string
- type: array
- externalEntitySelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- ipBlocks:
- items:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- type: array
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceReference:
- properties:
- name:
- type: string
- namespace:
- type: string
- type: object
- type: object
- status:
- properties:
- conditions:
- items:
- properties:
- lastTransitionTime:
- type: string
- status:
- type: string
- type:
- type: string
- type: object
- type: array
- type: object
- type: object
- served: true
- storage: true
- subresources:
- status: {}
---
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
+# Source: antrea/templates/agent/secret.yaml
+apiVersion: v1
+kind: Secret
+metadata:
+ name: antrea-agent-service-account-token
+ namespace: kube-system
+ annotations:
+ kubernetes.io/service-account.name: antrea-agent
+type: kubernetes.io/service-account-token
+---
+# Source: antrea/templates/antctl/secret.yaml
+apiVersion: v1
+kind: Secret
+metadata:
+ name: antctl-service-account-token
+ namespace: kube-system
+ annotations:
+ kubernetes.io/service-account.name: antctl
+type: kubernetes.io/service-account-token
+---
+# Source: antrea/templates/configmap.yaml
+apiVersion: v1
+kind: ConfigMap
metadata:
+ name: antrea-config
+ namespace: kube-system
labels:
app: antrea
- name: clusternetworkpolicies.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: ClusterNetworkPolicy
- plural: clusternetworkpolicies
- shortNames:
- - acnp
- singular: clusternetworkpolicy
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: The Tier to which this ClusterNetworkPolicy belongs to.
- jsonPath: .spec.tier
- name: Tier
- type: string
- - description: The Priority of this ClusterNetworkPolicy relative to other policies.
- format: float
- jsonPath: .spec.priority
- name: Priority
- type: number
- - description: The total number of Nodes that should realize the NetworkPolicy.
- format: int32
- jsonPath: .status.desiredNodesRealized
- name: Desired Nodes
- type: number
- - description: The number of Nodes that have realized the NetworkPolicy.
- format: int32
- jsonPath: .status.currentNodesRealized
- name: Current Nodes
- type: number
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- appliedTo:
- items:
- properties:
- group:
- type: string
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceAccount:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: object
- type: array
- egress:
- items:
- properties:
- action:
- enum:
- - Allow
- - Drop
- - Reject
- - Pass
- type: string
- appliedTo:
- items:
- properties:
- group:
- type: string
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceAccount:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: object
- type: array
- enableLogging:
- type: boolean
- name:
- type: string
- ports:
- items:
- properties:
- endPort:
- type: integer
- port:
- x-kubernetes-int-or-string: true
- protocol:
- enum:
- - TCP
- - UDP
- - SCTP
- type: string
- type: object
- type: array
- to:
- items:
- properties:
- fqdn:
- type: string
- group:
- type: string
- ipBlock:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- namespaces:
- properties:
- match:
- type: string
- type: object
- nodeSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceAccount:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: object
- type: array
- toServices:
- items:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: array
- required:
- - action
- type: object
- type: array
- ingress:
- items:
- properties:
- action:
- enum:
- - Allow
- - Drop
- - Reject
- - Pass
- type: string
- appliedTo:
- items:
- properties:
- group:
- type: string
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceAccount:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: object
- type: array
- enableLogging:
- type: boolean
- from:
- items:
- properties:
- group:
- type: string
- ipBlock:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- namespaces:
- properties:
- match:
- enum:
- - Self
- type: string
- type: object
- nodeSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- serviceAccount:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- type: object
- type: object
- type: array
- name:
- type: string
- ports:
- items:
- properties:
- endPort:
- type: integer
- port:
- x-kubernetes-int-or-string: true
- protocol:
- enum:
- - TCP
- - UDP
- - SCTP
- type: string
- type: object
- type: array
- required:
- - action
- type: object
- type: array
- priority:
- format: float
- maximum: 10000
- minimum: 1
- type: number
- tier:
- type: string
- required:
- - priority
- type: object
- status:
- properties:
- currentNodesRealized:
- type: integer
- desiredNodesRealized:
- type: integer
- observedGeneration:
- type: integer
- phase:
- type: string
- type: object
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: egresses.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: Egress
- plural: egresses
- shortNames:
- - eg
- singular: egress
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: Specifies the SNAT IP address for the selected workloads.
- jsonPath: .spec.egressIP
- name: EgressIP
- type: string
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- - description: The Owner Node of egress IP
- jsonPath: .status.egressNode
- name: Node
- type: string
- name: v1alpha2
- schema:
- openAPIV3Schema:
- properties:
- spec:
- anyOf:
- - required:
- - egressIP
- - required:
- - externalIPPool
- properties:
- appliedTo:
- properties:
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- egressIP:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- externalIPPool:
- type: string
- required:
- - appliedTo
- type: object
- status:
- properties:
- egressNode:
- type: string
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: externalentities.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: ExternalEntity
- plural: externalentities
- shortNames:
- - ee
- singular: externalentity
- scope: Namespaced
- versions:
- - name: v1alpha2
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- endpoints:
- items:
- properties:
- ip:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- name:
- type: string
- type: object
- type: array
- externalNode:
- type: string
- ports:
- items:
- properties:
- name:
- type: string
- port:
- x-kubernetes-int-or-string: true
- protocol:
- enum:
- - TCP
- - UDP
- - SCTP
- type: string
- type: object
- type: array
- type: object
- type: object
- served: true
- storage: true
- - name: v1alpha1
- schema:
- openAPIV3Schema:
- type: object
- served: false
- storage: false
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: externalippools.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: ExternalIPPool
- plural: externalippools
- shortNames:
- - eip
- singular: externalippool
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: The number of total IPs
- jsonPath: .status.usage.total
- name: Total
- type: integer
- - description: The number of allocated IPs
- jsonPath: .status.usage.used
- name: Used
- type: integer
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha2
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- ipRanges:
- items:
- oneOf:
- - required:
- - cidr
- - required:
- - start
- - end
- properties:
- cidr:
- format: cidr
- type: string
- end:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- start:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- type: object
- type: array
- nodeSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- required:
- - ipRanges
- - nodeSelector
- type: object
- status:
- properties:
- usage:
- properties:
- total:
- type: integer
- used:
- type: integer
- type: object
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: ippools.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: IPPool
- plural: ippools
- shortNames:
- - ipp
- singular: ippool
- scope: Cluster
- versions:
- - name: v1alpha2
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- ipRanges:
- items:
- oneOf:
- - required:
- - cidr
- - gateway
- - prefixLength
- - required:
- - start
- - end
- - gateway
- - prefixLength
- properties:
- cidr:
- format: cidr
- type: string
- end:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- gateway:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- prefixLength:
- type: integer
- start:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- vlan:
- maximum: 4094
- minimum: 0
- type: integer
- type: object
- type: array
- ipVersion:
- type: integer
- required:
- - ipVersion
- - ipRanges
- type: object
- status:
- properties:
- ipAddresses:
- items:
- properties:
- ipAddress:
- type: string
- owner:
- properties:
- pod:
- properties:
- containerID:
- type: string
- name:
- type: string
- namespace:
- type: string
- type: object
- statefulSet:
- properties:
- index:
- type: integer
- name:
- type: string
- namespace:
- type: string
- type: object
- type: object
- phase:
- type: string
- type: object
- type: array
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: networkpolicies.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: NetworkPolicy
- plural: networkpolicies
- shortNames:
- - anp
- singular: networkpolicy
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - description: The Tier to which this Antrea NetworkPolicy belongs to.
- jsonPath: .spec.tier
- name: Tier
- type: string
- - description: The Priority of this Antrea NetworkPolicy relative to other policies.
- format: float
- jsonPath: .spec.priority
- name: Priority
- type: number
- - description: The total number of Nodes that should realize the NetworkPolicy.
- format: int32
- jsonPath: .status.desiredNodesRealized
- name: Desired Nodes
- type: number
- - description: The number of Nodes that have realized the NetworkPolicy.
- format: int32
- jsonPath: .status.currentNodesRealized
- name: Current Nodes
- type: number
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- appliedTo:
- items:
- properties:
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: array
- egress:
- items:
- properties:
- action:
- enum:
- - Allow
- - Drop
- - Reject
- - Pass
- type: string
- appliedTo:
- items:
- properties:
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: array
- enableLogging:
- type: boolean
- name:
- type: string
- ports:
- items:
- properties:
- endPort:
- type: integer
- port:
- x-kubernetes-int-or-string: true
- protocol:
- enum:
- - TCP
- - UDP
- - SCTP
- type: string
- type: object
- type: array
- to:
- items:
- properties:
- externalEntitySelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- fqdn:
- type: string
- ipBlock:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- nodeSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: array
- toServices:
- items:
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- type: object
- type: array
- required:
- - action
- type: object
- type: array
- ingress:
- items:
- properties:
- action:
- enum:
- - Allow
- - Drop
- - Reject
- - Pass
- type: string
- appliedTo:
- items:
- properties:
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: array
- enableLogging:
- type: boolean
- from:
- items:
- properties:
- externalEntitySelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- ipBlock:
- properties:
- cidr:
- format: cidr
- type: string
- type: object
- namespaceSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- nodeSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- podSelector:
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$
- type: string
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- type: object
- type: object
- type: array
- name:
- type: string
- ports:
- items:
- properties:
- endPort:
- type: integer
- port:
- x-kubernetes-int-or-string: true
- protocol:
- enum:
- - TCP
- - UDP
- - SCTP
- type: string
- type: object
- type: array
- required:
- - action
- type: object
- type: array
- priority:
- format: float
- maximum: 10000
- minimum: 1
- type: number
- tier:
- type: string
- required:
- - priority
- type: object
- status:
- properties:
- currentNodesRealized:
- type: integer
- desiredNodesRealized:
- type: integer
- observedGeneration:
- type: integer
- phase:
- type: string
- type: object
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: tiers.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: Tier
- plural: tiers
- shortNames:
- - tr
- singular: tier
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: The Priority of this Tier relative to other Tiers.
- jsonPath: .spec.priority
- name: Priority
- type: integer
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- description:
- type: string
- priority:
- maximum: 255
- minimum: 0
- type: integer
- required:
- - priority
- type: object
- type: object
- served: true
- storage: true
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- labels:
- app: antrea
- name: traceflows.crd.antrea.io
-spec:
- group: crd.antrea.io
- names:
- kind: Traceflow
- plural: traceflows
- shortNames:
- - tf
- singular: traceflow
- scope: Cluster
- versions:
- - additionalPrinterColumns:
- - description: The phase of the Traceflow.
- jsonPath: .status.phase
- name: Phase
- type: string
- - description: The name of the source Pod.
- jsonPath: .spec.source.pod
- name: Source-Pod
- priority: 10
- type: string
- - description: The name of the destination Pod.
- jsonPath: .spec.destination.pod
- name: Destination-Pod
- priority: 10
- type: string
- - description: The IP address of the destination.
- jsonPath: .spec.destination.ip
- name: Destination-IP
- priority: 10
- type: string
- - description: Trace live traffic.
- jsonPath: .spec.liveTraffic
- name: Live-Traffic
- priority: 10
- type: boolean
- - description: Capture only the dropped packet.
- jsonPath: .spec.droppedOnly
- name: Dropped-Only
- priority: 10
- type: boolean
- - description: Timeout in seconds.
- jsonPath: .spec.timeout
- name: Timeout
- priority: 10
- type: integer
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1alpha1
- schema:
- openAPIV3Schema:
- properties:
- spec:
- properties:
- destination:
- properties:
- ip:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- namespace:
- type: string
- pod:
- type: string
- service:
- type: string
- type: object
- droppedOnly:
- type: boolean
- liveTraffic:
- type: boolean
- packet:
- properties:
- ipHeader:
- properties:
- flags:
- type: integer
- protocol:
- type: integer
- srcIP:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- ttl:
- type: integer
- type: object
- ipv6Header:
- properties:
- hopLimit:
- type: integer
- nextHeader:
- type: integer
- srcIP:
- format: ipv6
- type: string
- type: object
- transportHeader:
- properties:
- icmp:
- properties:
- id:
- type: integer
- sequence:
- type: integer
- type: object
- tcp:
- properties:
- dstPort:
- type: integer
- flags:
- type: integer
- srcPort:
- type: integer
- type: object
- udp:
- properties:
- dstPort:
- type: integer
- srcPort:
- type: integer
- type: object
- type: object
- type: object
- source:
- properties:
- ip:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- namespace:
- type: string
- pod:
- type: string
- type: object
- timeout:
- type: integer
- type: object
- status:
- properties:
- capturedPacket:
- properties:
- dstIP:
- type: string
- ipHeader:
- properties:
- flags:
- type: integer
- protocol:
- type: integer
- ttl:
- type: integer
- type: object
- ipv6Header:
- properties:
- hopLimit:
- type: integer
- nextHeader:
- type: integer
- type: object
- length:
- type: integer
- srcIP:
- type: string
- transportHeader:
- properties:
- icmp:
- properties:
- id:
- type: integer
- sequence:
- type: integer
- type: object
- tcp:
- properties:
- dstPort:
- type: integer
- flags:
- type: integer
- srcPort:
- type: integer
- type: object
- udp:
- properties:
- dstPort:
- type: integer
- srcPort:
- type: integer
- type: object
- type: object
- type: object
- dataplaneTag:
- type: integer
- phase:
- type: string
- reason:
- type: string
- results:
- items:
- properties:
- node:
- type: string
- observations:
- items:
- properties:
- action:
- type: string
- component:
- type: string
- componentInfo:
- type: string
- dstMAC:
- type: string
- networkPolicy:
- type: string
- pod:
- type: string
- translatedDstIP:
- type: string
- translatedSrcIP:
- type: string
- ttl:
- type: integer
- tunnelDstIP:
- type: string
- type: object
- type: array
- role:
- type: string
- timestamp:
- type: integer
- type: object
- type: array
- startTime:
- type: string
- type: object
- required:
- - spec
- type: object
- served: true
- storage: true
- subresources:
- status: {}
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- labels:
- app: antrea
- name: antctl
- namespace: kube-system
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- labels:
- app: antrea
- name: antrea-agent
- namespace: kube-system
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- labels:
- app: antrea
- name: antrea-controller
- namespace: kube-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-admin: "true"
- rbac.authorization.k8s.io/aggregate-to-edit: "true"
- name: aggregate-antrea-clustergroups-edit
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - clustergroups
- verbs:
- - get
- - list
- - watch
- - create
- - update
- - patch
- - delete
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-view: "true"
- name: aggregate-antrea-clustergroups-view
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - clustergroups
- verbs:
- - get
- - list
- - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-admin: "true"
- rbac.authorization.k8s.io/aggregate-to-edit: "true"
- name: aggregate-antrea-policies-edit
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - clusternetworkpolicies
- - networkpolicies
- verbs:
- - get
- - list
- - watch
- - create
- - update
- - patch
- - delete
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-view: "true"
- name: aggregate-antrea-policies-view
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - clusternetworkpolicies
- - networkpolicies
- verbs:
- - get
- - list
- - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-admin: "true"
- rbac.authorization.k8s.io/aggregate-to-edit: "true"
- name: aggregate-traceflows-edit
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - traceflows
- verbs:
- - get
- - list
- - watch
- - create
- - update
- - patch
- - delete
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- rbac.authorization.k8s.io/aggregate-to-view: "true"
- name: aggregate-traceflows-view
-rules:
-- apiGroups:
- - crd.antrea.io
- resources:
- - traceflows
- verbs:
- - get
- - list
- - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- name: antctl
-rules:
-- apiGroups:
- - controlplane.antrea.io
- resources:
- - networkpolicies
- - appliedtogroups
- - addressgroups
- verbs:
- - get
- - list
-- apiGroups:
- - stats.antrea.io
- resources:
- - networkpolicystats
- - antreaclusternetworkpolicystats
- - antreanetworkpolicystats
- verbs:
- - get
- - list
-- apiGroups:
- - system.antrea.io
- resources:
- - controllerinfos
- - agentinfos
- verbs:
- - get
-- apiGroups:
- - system.antrea.io
- resources:
- - supportbundles
- verbs:
- - get
- - post
-- apiGroups:
- - system.antrea.io
- resources:
- - supportbundles/download
- verbs:
- - get
-- nonResourceURLs:
- - /agentinfo
- - /addressgroups
- - /appliedtogroups
- - /loglevel
- - /networkpolicies
- - /ovsflows
- - /ovstracing
- - /podinterfaces
- - /featuregates
- verbs:
- - get
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- name: antrea-agent
-rules:
-- apiGroups:
- - ""
- resources:
- - nodes
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - ""
- resources:
- - nodes/status
- verbs:
- - patch
-- apiGroups:
- - ""
- resources:
- - pods
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - ""
- resources:
- - pods/status
- verbs:
- - patch
-- apiGroups:
- - ""
- resources:
- - endpoints
- - services
- - namespaces
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - ""
- resources:
- - services/status
- verbs:
- - update
-- apiGroups:
- - discovery.k8s.io
- resources:
- - endpointslices
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - crd.antrea.io
- resources:
- - antreaagentinfos
- verbs:
- - get
- - create
- - update
- - delete
-- apiGroups:
- - controlplane.antrea.io
- resources:
- - networkpolicies
- - appliedtogroups
- - addressgroups
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - controlplane.antrea.io
- resources:
- - egressgroups
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - controlplane.antrea.io
- resources:
- - nodestatssummaries
- verbs:
- - create
-- apiGroups:
- - controlplane.antrea.io
- resources:
- - networkpolicies/status
- verbs:
- - create
- - get
-- apiGroups:
- - authentication.k8s.io
- resources:
- - tokenreviews
- verbs:
- - create
-- apiGroups:
- - authorization.k8s.io
- resources:
- - subjectaccessreviews
- verbs:
- - create
-- apiGroups:
- - ""
- resourceNames:
- - extension-apiserver-authentication
- resources:
- - configmaps
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - ""
- resourceNames:
- - antrea-ca
- resources:
- - configmaps
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - crd.antrea.io
- resources:
- - traceflows
- - traceflows/status
- verbs:
- - get
- - watch
- - list
- - update
- - patch
- - create
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - egresses
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - crd.antrea.io
- resources:
- - egresses/status
- verbs:
- - update
-- apiGroups:
- - crd.antrea.io
- resources:
- - externalippools
- - ippools
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - crd.antrea.io
- resources:
- - ippools/status
- verbs:
- - update
-- apiGroups:
- - k8s.cni.cncf.io
- resources:
- - network-attachment-definitions
- verbs:
- - get
- - list
- - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- name: antrea-cluster-identity-reader
-rules:
-- apiGroups:
- - ""
- resourceNames:
- - antrea-cluster-identity
- resources:
- - configmaps
- verbs:
- - get
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
- labels:
- app: antrea
- name: antrea-controller
-rules:
-- apiGroups:
- - ""
- resources:
- - pods
- - services
- - namespaces
- - configmaps
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - ""
- resources:
- - nodes
- verbs:
- - get
- - watch
- - list
- - patch
-- apiGroups:
- - ""
- resources:
- - services/status
- verbs:
- - update
-- apiGroups:
- - networking.k8s.io
- resources:
- - networkpolicies
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - authentication.k8s.io
- resources:
- - tokenreviews
- verbs:
- - create
-- apiGroups:
- - authorization.k8s.io
- resources:
- - subjectaccessreviews
- verbs:
- - create
-- apiGroups:
- - apiextensions.k8s.io
- resources:
- - customresourcedefinitions
- verbs:
- - get
- - update
-- apiGroups:
- - ""
- resourceNames:
- - extension-apiserver-authentication
- resources:
- - configmaps
- verbs:
- - get
- - list
- - watch
-- apiGroups:
- - ""
- resourceNames:
- - antrea-ca
- - antrea-cluster-identity
- resources:
- - configmaps
- verbs:
- - get
- - update
-- apiGroups:
- - ""
- resources:
- - configmaps
- verbs:
- - create
-- apiGroups:
- - apiregistration.k8s.io
- resourceNames:
- - v1alpha1.stats.antrea.io
- - v1beta1.system.antrea.io
- - v1beta2.controlplane.antrea.io
- resources:
- - apiservices
- verbs:
- - get
- - update
-- apiGroups:
- - apiregistration.k8s.io
- resourceNames:
- - v1beta1.networking.antrea.tanzu.vmware.com
- - v1beta1.controlplane.antrea.tanzu.vmware.com
- - v1alpha1.stats.antrea.tanzu.vmware.com
- - v1beta1.system.antrea.tanzu.vmware.com
- - v1beta2.controlplane.antrea.tanzu.vmware.com
- resources:
- - apiservices
- verbs:
- - delete
-- apiGroups:
- - admissionregistration.k8s.io
- resourceNames:
- - labelsmutator.antrea.io
- - crdmutator.antrea.io
- - crdvalidator.antrea.io
- resources:
- - mutatingwebhookconfigurations
- - validatingwebhookconfigurations
- verbs:
- - get
- - update
-- apiGroups:
- - crd.antrea.io
- resources:
- - antreacontrollerinfos
- verbs:
- - get
- - create
- - update
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - antreaagentinfos
- verbs:
- - list
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - clusternetworkpolicies
- - networkpolicies
- verbs:
- - get
- - watch
- - list
- - update
- - patch
- - create
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - clusternetworkpolicies/status
- - networkpolicies/status
- verbs:
- - update
-- apiGroups:
- - crd.antrea.io
- resources:
- - tiers
- verbs:
- - get
- - watch
- - list
- - update
- - patch
- - create
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - traceflows
- - traceflows/status
- verbs:
- - get
- - watch
- - list
- - update
- - patch
- - create
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - externalentities
- - clustergroups
- verbs:
- - get
- - watch
- - list
- - update
- - patch
- - create
- - delete
-- apiGroups:
- - crd.antrea.io
- resources:
- - clustergroups/status
- verbs:
- - update
-- apiGroups:
- - crd.antrea.io
- resources:
- - egresses
- verbs:
- - get
- - watch
- - list
- - update
- - patch
-- apiGroups:
- - crd.antrea.io
- resources:
- - externalippools
- - ippools
- verbs:
- - get
- - watch
- - list
-- apiGroups:
- - crd.antrea.io
- resources:
- - externalippools/status
- - ippools/status
- verbs:
- - update
-- apiGroups:
- - apps
- resources:
- - statefulsets
- verbs:
- - get
- - list
- - watch
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- labels:
- app: antrea
- name: antctl
- namespace: kube-system
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: antctl
-subjects:
-- kind: ServiceAccount
- name: antctl
- namespace: kube-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- labels:
- app: antrea
- name: antrea-agent
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: antrea-agent
-subjects:
-- kind: ServiceAccount
- name: antrea-agent
- namespace: kube-system
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
- labels:
- app: antrea
- name: antrea-controller
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: antrea-controller
-subjects:
-- kind: ServiceAccount
- name: antrea-controller
- namespace: kube-system
----
-apiVersion: v1
data:
antrea-agent.conf: |
# FeatureGates is a map of feature names to bools that enable or disable experimental features.
@@ -2771,7 +90,8 @@ data:
# Egress: true
# Enable AntreaIPAM, which can allocate IP addresses from IPPools. AntreaIPAM is required by the
- # bridging mode and allocates IPs to Pods in bridging mode.
+ # bridging mode and allocates IPs to Pods in bridging mode. It is also required to use Antrea for
+ # IPAM when configuring secondary network interfaces with Multus.
# AntreaIPAM: false
# Enable multicast traffic. This feature is supported only with noEncap mode.
@@ -2785,21 +105,23 @@ data:
# Enable managing external IPs of Services of LoadBalancer type.
# ServiceExternalIP: false
+ # Enable mirroring or redirecting the traffic Pods send or receive.
+ # TrafficControl: false
+
# Name of the OpenVSwitch bridge antrea-agent will create and use.
# Make sure it doesn't conflict with your existing OpenVSwitch bridges.
- #ovsBridge: br-int
+ ovsBridge: "br-int"
# Datapath type to use for the OpenVSwitch bridge created by Antrea. Supported values are:
# - system
# - netdev
# 'system' is the default value and corresponds to the kernel datapath. Use 'netdev' to run
- # OVS in userspace mode (not fully supported yet). Userspace mode requires the tun device driver to
- # be available.
+ # OVS in userspace mode. Userspace mode requires the tun device driver to be available.
#ovsDatapathType: system
# Name of the interface antrea-agent will create and use for host <--> pod communication.
# Make sure it doesn't conflict with your existing interfaces.
- #hostGateway: antrea-gw0
+ hostGateway: "antrea-gw0"
# Determines how traffic is encapsulated. It has the following options:
# encap(default): Inter-node Pod traffic is always encapsulated and Pod to external network
@@ -2811,14 +133,14 @@ data:
# networkPolicyOnly: Antrea enforces NetworkPolicy only, and utilizes CNI chaining and delegates Pod
# IPAM and connectivity to the primary CNI.
#
- #trafficEncapMode: encap
+ trafficEncapMode: "encap"
# Whether or not to SNAT (using the Node IP) the egress traffic from a Pod to the external network.
# This option is for the noEncap traffic mode only, and the default value is false. In the noEncap
# mode, if the cluster's Pod CIDR is reachable from the external network, then the Pod traffic to
# the external network needs not be SNAT'd. In the networkPolicyOnly mode, antrea-agent never
# performs SNAT and this option will be ignored; for other modes it must be set to false.
- #noSNAT: false
+ noSNAT: false
# Tunnel protocols used for encapsulating traffic across Nodes. If WireGuard is enabled in trafficEncryptionMode,
# this option will not take effect. Supported values:
@@ -2827,7 +149,7 @@ data:
# - gre
# - stt
# Note that "gre" is not supported for IPv6 clusters (IPv6-only or dual-stack clusters).
- #tunnelType: geneve
+ tunnelType: "geneve"
# Determines how tunnel traffic is encrypted. Currently encryption only works with encap mode.
# It has the following options:
@@ -2837,49 +159,54 @@ data:
# the PSK value must be passed to Antrea Agent through an environment
# variable: ANTREA_IPSEC_PSK.
# - wireGuard: Enable WireGuard for tunnel traffic encryption.
- #trafficEncryptionMode: none
+ trafficEncryptionMode: "none"
# Enable bridging mode of Pod network on Nodes, in which the Node's transport interface is connected
- # to the OVS bridge, and cross-Node/VLAN traffic from AntreaIPAM Pods (Pods whose IP addresses are
- # allocated by AntreaIPAM from IPPools) is sent to the underlay network via the uplink, and
- # forwarded/routed by the underlay network.
+ # to the OVS bridge, and cross-Node/VLAN traffic of AntreaIPAM Pods (Pods whose IP addresses are
+ # allocated by AntreaIPAM from IPPools) is sent to the underlay network, and forwarded/routed by the
+ # underlay network.
# This option requires the `AntreaIPAM` feature gate to be enabled. At this moment, it supports only
# IPv4 and Linux Nodes, and can be enabled only when `ovsDatapathType` is `system`,
# `trafficEncapMode` is `noEncap`, and `noSNAT` is true.
- #enableBridgingMode: false
+ enableBridgingMode: false
+
+ # Disable TX checksum offloading for container network interfaces. It's supposed to be set to true when the
+ # datapath doesn't support TX checksum offloading, which causes packets to be dropped due to bad checksum.
+ # It affects Pods running on Linux Nodes only.
+ disableTXChecksumOffload: false
# Default MTU to use for the host gateway interface and the network interface of each Pod.
# If omitted, antrea-agent will discover the MTU of the Node's primary interface and
# also adjust MTU to accommodate for tunnel encapsulation overhead (if applicable).
- #defaultMTU: 0
+ defaultMTU: 0
# wireGuard specifies WireGuard related configurations.
wireGuard:
- # The port for WireGuard to receive traffic.
- # port: 51820
+ # The port for WireGuard to receive traffic.
+ port: 51820
egress:
- # exceptCIDRs is the CIDR ranges to which outbound Pod traffic will not be SNAT'd by Egresses.
- # exceptCIDRs: []
+ # exceptCIDRs is the CIDR ranges to which outbound Pod traffic will not be SNAT'd by Egresses.
+ exceptCIDRs:
# ClusterIP CIDR range for Services. It's required when AntreaProxy is not enabled, and should be
# set to the same value as the one specified by --service-cluster-ip-range for kube-apiserver. When
# AntreaProxy is enabled, this parameter is not needed and will be ignored if provided.
- #serviceCIDR: 10.96.0.0/12
+ serviceCIDR: ""
# ClusterIP CIDR range for IPv6 Services. It's required when using kube-proxy to provide IPv6 Service in a Dual-Stack
# cluster or an IPv6 only cluster. The value should be the same as the configuration for kube-apiserver specified by
# --service-cluster-ip-range. When AntreaProxy is enabled, this parameter is not needed.
# No default value for this field.
- #serviceCIDRv6:
+ serviceCIDRv6: ""
# The port for the antrea-agent APIServer to serve on.
# Note that if it's set to another value, the `containerPort` of the `api` port of the
# `antrea-agent` container must be set to the same value.
- #apiPort: 10350
+ apiPort: 10350
# Enable metrics exposure via Prometheus. Initializes Prometheus metrics listener.
- #enablePrometheusMetrics: true
+ enablePrometheusMetrics: true
# Provide the IPFIX collector address as a string with format :[][:].
# HOST can either be the DNS name or the IP of the Flow Collector. For example,
@@ -2890,50 +217,50 @@ data:
# If no PROTO is given, we consider "tls" as default. We support "tls", "tcp" and
# "udp" protocols. "tls" is used for securing communication between flow exporter and
# flow aggregator.
- #flowCollectorAddr: "flow-aggregator.flow-aggregator.svc:4739:tls"
+ flowCollectorAddr: "flow-aggregator.flow-aggregator.svc:4739:tls"
# Provide flow poll interval as a duration string. This determines how often the
# flow exporter dumps connections from the conntrack module. Flow poll interval
# should be greater than or equal to 1s (one second).
# Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
- #flowPollInterval: "5s"
+ flowPollInterval: "5s"
# Provide the active flow export timeout, which is the timeout after which a flow
# record is sent to the collector for active flows. Thus, for flows with a continuous
# stream of packets, a flow record will be exported to the collector once the elapsed
# time since the last export event is equal to the value of this timeout.
# Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
- #activeFlowExportTimeout: "30s"
+ activeFlowExportTimeout: "5s"
# Provide the idle flow export timeout, which is the timeout after which a flow
# record is sent to the collector for idle flows. A flow is considered idle if no
# packet matching this flow has been observed since the last export event.
# Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
- #idleFlowExportTimeout: "15s"
+ idleFlowExportTimeout: "15s"
nodePortLocal:
# Enable NodePortLocal, a feature used to make Pods reachable using port forwarding on the host. To
# enable this feature, you need to set "enable" to true, and ensure that the NodePortLocal feature
# gate is also enabled (which is the default).
- # enable: false
+ enable: false
# Provide the port range used by NodePortLocal. When the NodePortLocal feature is enabled, a port
# from that range will be assigned whenever a Pod's container defines a specific port to be exposed
# (each container can define a list of ports as pod.spec.containers[].ports), and all Node traffic
# directed to that port will be forwarded to the Pod.
- # portRange: 61000-62000
+ portRange: "61000-62000"
# Provide the address of Kubernetes apiserver, to override any value provided in kubeconfig or InClusterConfig.
# Defaults to "". It must be a host string, a host:port pair, or a URL to the base of the apiserver.
- #kubeAPIServerOverride: ""
+ kubeAPIServerOverride: ""
# Comma-separated list of Cipher Suites. If omitted, the default Go Cipher Suites will be used.
# https://golang.org/pkg/crypto/tls/#pkg-constants
# Note that TLS1.3 Cipher Suites cannot be added to the list. But the apiserver will always
# prefer TLS1.3 Cipher Suites whenever possible.
- #tlsCipherSuites:
+ tlsCipherSuites: ""
# TLS min version from: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13.
- #tlsMinVersion:
+ tlsMinVersion: ""
# The name of the interface on Node which is used for tunneling or routing the traffic across Nodes.
# If there are multiple IP addresses configured on the interface, the first one is used. The IP
@@ -2942,11 +269,16 @@ data:
# 1. transportInterface
# 2. transportInterfaceCIDRs
# 3. The Node IP
- #transportInterface:
+ transportInterface: ""
+ multicast:
# The names of the interfaces on Nodes that are used to forward multicast traffic.
# Defaults to transport interface if not set.
- #multicastInterfaces: []
+ multicastInterfaces:
+
+ # The interval at which the antrea-agent sends IGMP queries to Pods.
+ # Valid time units are "ns", "us" (or "µs"), "ms", "s", "m", "h".
+ igmpQueryInterval: "125s"
# The network CIDRs of the interface on Node which is used for tunneling or routing the traffic across
# Nodes. If there are multiple interfaces configured the same network CIDR, the first one is used. The
@@ -2955,7 +287,7 @@ data:
# 1. transportInterface
# 2. transportInterfaceCIDRs
# 3. The Node IP
- #transportInterfaceCIDRs: [,]
+ transportInterfaceCIDRs:
# Option antreaProxy contains AntreaProxy related configuration options.
antreaProxy:
@@ -2964,22 +296,22 @@ data:
# feature to be enabled.
# Note that this option is experimental. If kube-proxy is removed, option kubeAPIServerOverride must be used to access
# apiserver directly.
- #proxyAll: false
+ proxyAll: false
# A string array of values which specifies the host IPv4/IPv6 addresses for NodePort. Values can be valid IP blocks.
# (e.g. 1.2.3.0/24, 1.2.3.4/32). An empty string slice is meant to select all host IPv4/IPv6 addresses.
# Note that the option is only valid when proxyAll is true.
- #nodePortAddresses: []
+ nodePortAddresses:
# An array of string values to specify a list of Services which should be ignored by AntreaProxy (traffic to these
# Services will not be load-balanced). Values can be a valid ClusterIP (e.g. 10.11.1.2) or a Service name
# with Namespace (e.g. kube-system/kube-dns)
- #skipServices: []
+ skipServices:
# When ProxyLoadBalancerIPs is set to false, AntreaProxy no longer load-balances traffic destined to the
# External IPs of LoadBalancer Services. This is useful when the external LoadBalancer provides additional
# capabilities (e.g. TLS termination) and it is desirable for Pod-to-ExternalIP traffic to be sent to the
# external LoadBalancer instead of being load-balanced to an Endpoint directly by AntreaProxy.
# Note that setting ProxyLoadBalancerIPs to false usually only makes sense when ProxyAll is set to true and
# kube-proxy is removed from the cluser, otherwise kube-proxy will still load-balance this traffic.
- #proxyLoadBalancerIPs: true
+ proxyLoadBalancerIPs: true
antrea-cni.conflist: |
{
"cniVersion":"0.3.0",
@@ -2990,11 +322,13 @@ data:
"ipam": {
"type": "host-local"
}
- },
+ }
+ ,
{
"type": "portmap",
"capabilities": {"portMappings": true}
- },
+ }
+ ,
{
"type": "bandwidth",
"capabilities": {"bandwidth": true}
@@ -3021,8 +355,9 @@ data:
# Run Kubernetes NodeIPAMController with Antrea.
# NodeIPAM: false
- # Enable flexible IPAM mode for Antrea. This mode allows to assign IP Ranges to Namespaces,
- # Deployments and StatefulSets via IP Pool annotation.
+ # Enable AntreaIPAM, which can allocate IP addresses from IPPools. AntreaIPAM is required by the
+ # bridging mode and allocates IPs to Pods in bridging mode. It is also required to use Antrea for
+ # IPAM when configuring secondary network interfaces with Multus.
# AntreaIPAM: false
# Enable managing external IPs of Services of LoadBalancer type.
@@ -3031,659 +366,3674 @@ data:
# The port for the antrea-controller APIServer to serve on.
# Note that if it's set to another value, the `containerPort` of the `api` port of the
# `antrea-controller` container must be set to the same value.
- #apiPort: 10349
+ apiPort: 10349
# Enable metrics exposure via Prometheus. Initializes Prometheus metrics listener.
- #enablePrometheusMetrics: true
+ enablePrometheusMetrics: true
# Indicates whether to use auto-generated self-signed TLS certificate.
- # If false, A Secret named "antrea-controller-tls" must be provided with the following keys:
+ # If false, a Secret named "antrea-controller-tls" must be provided with the following keys:
# ca.crt:
# tls.crt:
# tls.key:
- # And the Secret must be mounted to directory "/var/run/antrea/antrea-controller-tls" of the
- # antrea-controller container.
- #selfSignedCert: true
+ selfSignedCert: true
# Comma-separated list of Cipher Suites. If omitted, the default Go Cipher Suites will be used.
# https://golang.org/pkg/crypto/tls/#pkg-constants
# Note that TLS1.3 Cipher Suites cannot be added to the list. But the apiserver will always
# prefer TLS1.3 Cipher Suites whenever possible.
- #tlsCipherSuites:
+ tlsCipherSuites: ""
# TLS min version from: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13.
- #tlsMinVersion:
+ tlsMinVersion: ""
nodeIPAM:
- # Enable the integrated Node IPAM controller within the Antrea controller.
- # enableNodeIPAM: false
-
- # CIDR ranges for Pods in cluster. String array containing single CIDR range, or multiple ranges.
- # The CIDRs could be either IPv4 or IPv6. At most one CIDR may be specified for each IP family.
- # Value ignored when enableNodeIPAM is false.
- # clusterCIDRs: []
-
- # CIDR ranges for Services in cluster. It is not necessary to specify it when there is no overlap with clusterCIDRs.
- # Value ignored when enableNodeIPAM is false.
- # serviceCIDR:
- # serviceCIDRv6:
-
- # Mask size for IPv4 Node CIDR in IPv4 or dual-stack cluster. Value ignored when enableNodeIPAM is false
- # or when IPv4 Pod CIDR is not configured. Valid range is 16 to 30.
- # nodeCIDRMaskSizeIPv4: 24
-
- # Mask size for IPv6 Node CIDR in IPv6 or dual-stack cluster. Value ignored when enableNodeIPAM is false
- # or when IPv6 Pod CIDR is not configured. Valid range is 64 to 126.
- # nodeCIDRMaskSizeIPv6: 64
-kind: ConfigMap
+ # Enable the integrated Node IPAM controller within the Antrea controller.
+ enableNodeIPAM: false
+ # CIDR ranges for Pods in cluster. String array containing single CIDR range, or multiple ranges.
+ # The CIDRs could be either IPv4 or IPv6. At most one CIDR may be specified for each IP family.
+ # Value ignored when enableNodeIPAM is false.
+ clusterCIDRs:
+ # CIDR ranges for Services in cluster. It is not necessary to specify it when there is no overlap with clusterCIDRs.
+ # Value ignored when enableNodeIPAM is false.
+ serviceCIDR: ""
+ serviceCIDRv6: ""
+ # Mask size for IPv4 Node CIDR in IPv4 or dual-stack cluster. Value ignored when enableNodeIPAM is false
+ # or when IPv4 Pod CIDR is not configured. Valid range is 16 to 30.
+ nodeCIDRMaskSizeIPv4: 24
+ # Mask size for IPv6 Node CIDR in IPv6 or dual-stack cluster. Value ignored when enableNodeIPAM is false
+ # or when IPv6 Pod CIDR is not configured. Valid range is 64 to 126.
+ nodeCIDRMaskSizeIPv6: 64
+---
+# Source: antrea/templates/crds/antreaagentinfo.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: antreaagentinfos.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1beta1
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ additionalPrinterColumns:
+ - description: Health status of this Agent
+ jsonPath: ".agentConditions[?(@.type=='AgentHealthy')].status"
+ name: Healthy
+ type: string
+ - description: Last time the Healthy Condition was updated
+ jsonPath: ".agentConditions[?(@.type=='AgentHealthy')].lastHeartbeatTime"
+ name: Last Heartbeat
+ type: date
+ - description: Version of this Agent
+ jsonPath: ".version"
+ name: Version
+ type: string
+ priority: 1
+ - description: Node on which this Agent is running
+ jsonPath: ".nodeRef.name"
+ name: Node
+ type: string
+ priority: 1
+ - description: Number of local Pods managed by this Agent
+ jsonPath: ".localPodNum"
+ name: Num Pods
+ type: integer
+ priority: 2
+ - description: Subnets used by this Agent for Pod IPAM
+ jsonPath: ".nodeSubnets"
+ name: Subnets
+ type: string
+ priority: 2
+ scope: Cluster
+ names:
+ plural: antreaagentinfos
+ singular: antreaagentinfo
+ kind: AntreaAgentInfo
+ shortNames:
+ - aai
+---
+# Source: antrea/templates/crds/antreacontrollerinfo.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: antreacontrollerinfos.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1beta1
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ additionalPrinterColumns:
+ - description: Health status of the Controller
+ jsonPath: ".controllerConditions[?(@.type=='ControllerHealthy')].status"
+ name: Healthy
+ type: string
+ - description: Last time the Healthy Condition was updated
+ jsonPath: ".controllerConditions[?(@.type=='ControllerHealthy')].lastHeartbeatTime"
+ name: Last Heartbeat
+ type: date
+ - description: Version of the Controller
+ jsonPath: ".version"
+ name: Version
+ type: string
+ priority: 1
+ - description: Number of Agents connected to the Controller
+ jsonPath: ".connectedAgentNum"
+ name: Connected Agents
+ type: integer
+ priority: 1
+ - description: Node on which the Controller is running
+ jsonPath: ".nodeRef.name"
+ name: Node
+ type: string
+ priority: 1
+ - description: Number of Network Policies computed by Controller
+ jsonPath: ".networkPolicyControllerInfo.networkPolicyNum"
+ name: Num Network Policies
+ type: integer
+ priority: 2
+ scope: Cluster
+ names:
+ plural: antreacontrollerinfos
+ singular: antreacontrollerinfo
+ kind: AntreaControllerInfo
+ shortNames:
+ - aci
+---
+# Source: antrea/templates/crds/clustergroup.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: clustergroups.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: false
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ properties:
+ childGroups:
+ type: array
+ items:
+ type: string
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ externalEntitySelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ ipBlocks:
+ type: array
+ items:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ serviceReference:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ status:
+ type: object
+ properties:
+ conditions:
+ type: array
+ items:
+ type: object
+ properties:
+ type:
+ type: string
+ status:
+ type: string
+ lastTransitionTime:
+ type: string
+ - name: v1alpha3
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ properties:
+ childGroups:
+ type: array
+ items:
+ type: string
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ externalEntitySelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ipBlocks:
+ type: array
+ items:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ serviceReference:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ status:
+ type: object
+ properties:
+ conditions:
+ type: array
+ items:
+ type: object
+ properties:
+ type:
+ type: string
+ status:
+ type: string
+ lastTransitionTime:
+ type: string
+ subresources:
+ status: {}
+ conversion:
+ strategy: Webhook
+ webhook:
+ conversionReviewVersions: ["v1", "v1beta1"]
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: "kube-system"
+ path: "/convert/clustergroup"
+ scope: Cluster
+ names:
+ plural: clustergroups
+ singular: clustergroup
+ kind: ClusterGroup
+ shortNames:
+ - cg
+---
+# Source: antrea/templates/crds/clusternetworkpolicy.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: clusternetworkpolicies.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha1
+ served: true
+ storage: true
+ additionalPrinterColumns:
+ - name: Tier
+ type: string
+ description: The Tier to which this ClusterNetworkPolicy belongs to.
+ jsonPath: .spec.tier
+ - name: Priority
+ type: number
+ format: float
+ description: The Priority of this ClusterNetworkPolicy relative to other policies.
+ jsonPath: .spec.priority
+ - name: Desired Nodes
+ type: number
+ format: int32
+ description: The total number of Nodes that should realize the NetworkPolicy.
+ jsonPath: .status.desiredNodesRealized
+ - name: Current Nodes
+ type: number
+ format: int32
+ description: The number of Nodes that have realized the NetworkPolicy.
+ jsonPath: .status.currentNodesRealized
+ - name: Age
+ type: date
+ jsonPath: .metadata.creationTimestamp
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ # Ensure that Spec.Priority field is set
+ required:
+ - priority
+ type: object
+ properties:
+ tier:
+ type: string
+ priority:
+ type: number
+ format: float
+ # Ensure that Spec.Priority field is between 1 and 10000
+ minimum: 1.0
+ maximum: 10000.0
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that Spec.AppliedTo does not allow IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ group:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ ingress:
+ type: array
+ items:
+ type: object
+ required:
+ - action
+ properties:
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that rule AppliedTo does not allow IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ group:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ # Ensure that Action field allows only ALLOW, DROP, REJECT and PASS values
+ action:
+ type: string
+ enum: ['Allow', 'Drop', 'Reject', 'Pass']
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ endPort:
+ type: integer
+ protocols:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required: [icmp]
+ properties:
+ icmp:
+ type: object
+ properties:
+ icmpType:
+ type: integer
+ minimum: 0
+ maximum: 255
+ icmpCode:
+ type: integer
+ minimum: 0
+ maximum: 255
+ from:
+ type: array
+ items:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaces:
+ type: object
+ properties:
+ match:
+ enum:
+ - Self
+ type: string
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ group:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ name:
+ type: string
+ enableLogging:
+ type: boolean
+ egress:
+ type: array
+ items:
+ type: object
+ required:
+ - action
+ properties:
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that rule AppliedTo does not allow IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ group:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ # Ensure that Action field allows only ALLOW, DROP, REJECT and PASS values
+ action:
+ type: string
+ enum: ['Allow', 'Drop', 'Reject', 'Pass']
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ endPort:
+ type: integer
+ protocols:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required: [icmp]
+ properties:
+ icmp:
+ type: object
+ properties:
+ icmpType:
+ type: integer
+ minimum: 0
+ maximum: 255
+ icmpCode:
+ type: integer
+ minimum: 0
+ maximum: 255
+ to:
+ type: array
+ items:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaces:
+ type: object
+ properties:
+ match:
+ enum:
+ - Self
+ type: string
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ group:
+ type: string
+ fqdn:
+ type: string
+ serviceAccount:
+ type: object
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ required:
+ - name
+ - namespace
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ toServices:
+ type: array
+ items:
+ type: object
+ required:
+ - name
+ - namespace
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ name:
+ type: string
+ enableLogging:
+ type: boolean
+ status:
+ type: object
+ properties:
+ phase:
+ type: string
+ observedGeneration:
+ type: integer
+ currentNodesRealized:
+ type: integer
+ desiredNodesRealized:
+ type: integer
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: clusternetworkpolicies
+ singular: clusternetworkpolicy
+ kind: ClusterNetworkPolicy
+ shortNames:
+ - acnp
+---
+# Source: antrea/templates/crds/egress.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: egresses.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ type: object
+ required:
+ - appliedTo
+ anyOf:
+ - required:
+ - egressIP
+ - required:
+ - externalIPPool
+ properties:
+ appliedTo:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ egressIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ externalIPPool:
+ type: string
+ status:
+ type: object
+ properties:
+ egressNode:
+ type: string
+ additionalPrinterColumns:
+ - description: Specifies the SNAT IP address for the selected workloads.
+ jsonPath: .spec.egressIP
+ name: EgressIP
+ type: string
+ - jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ - description: The Owner Node of egress IP
+ jsonPath: .status.egressNode
+ name: Node
+ type: string
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: egresses
+ singular: egress
+ kind: Egress
+ shortNames:
+ - eg
+---
+# Source: antrea/templates/crds/externalentity.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: externalentities.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ properties:
+ endpoints:
+ type: array
+ items:
+ type: object
+ properties:
+ ip:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ name:
+ type: string
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ name:
+ type: string
+ externalNode:
+ type: string
+ - name: v1alpha1
+ served: false
+ storage: false
+ schema:
+ openAPIV3Schema:
+ type: object
+ scope: Namespaced
+ names:
+ plural: externalentities
+ singular: externalentity
+ kind: ExternalEntity
+ shortNames:
+ - ee
+---
+# Source: antrea/templates/crds/externalippool.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: externalippools.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ type: object
+ required:
+ - ipRanges
+ - nodeSelector
+ properties:
+ ipRanges:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required:
+ - cidr
+ - required:
+ - start
+ - end
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ start:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ end:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ status:
+ type: object
+ properties:
+ usage:
+ type: object
+ properties:
+ total:
+ type: integer
+ used:
+ type: integer
+ additionalPrinterColumns:
+ - description: The number of total IPs
+ jsonPath: .status.usage.total
+ name: Total
+ type: integer
+ - description: The number of allocated IPs
+ jsonPath: .status.usage.used
+ name: Used
+ type: integer
+ - jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: externalippools
+ singular: externalippool
+ kind: ExternalIPPool
+ shortNames:
+ - eip
+---
+# Source: antrea/templates/crds/ippool.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: ippools.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ required:
+ - ipVersion
+ - ipRanges
+ type: object
+ properties:
+ ipVersion:
+ type: integer
+ ipRanges:
+ items:
+ oneOf:
+ - required:
+ - cidr
+ - gateway
+ - prefixLength
+ - required:
+ - start
+ - end
+ - gateway
+ - prefixLength
+ properties:
+ cidr:
+ format: cidr
+ type: string
+ start:
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ type: string
+ end:
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ type: string
+ gateway:
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ type: string
+ prefixLength:
+ type: integer
+ vlan:
+ type: integer
+ minimum: 0
+ maximum: 4094
+ type: object
+ type: array
+ status:
+ properties:
+ ipAddresses:
+ items:
+ properties:
+ ipAddress:
+ type: string
+ owner:
+ properties:
+ pod:
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ containerID:
+ type: string
+ ifName:
+ type: string
+ type: object
+ statefulSet:
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ index:
+ type: integer
+ type: object
+ type: object
+ phase:
+ type: string
+ type: object
+ type: array
+ type: object
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: ippools
+ singular: ippool
+ kind: IPPool
+ shortNames:
+ - ipp
+---
+# Source: antrea/templates/crds/networkpolicy.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: networkpolicies.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha1
+ served: true
+ storage: true
+ additionalPrinterColumns:
+ - name: Tier
+ type: string
+ description: The Tier to which this Antrea NetworkPolicy belongs to.
+ jsonPath: .spec.tier
+ - name: Priority
+ type: number
+ format: float
+ description: The Priority of this Antrea NetworkPolicy relative to other policies.
+ jsonPath: .spec.priority
+ - name: Desired Nodes
+ type: number
+ format: int32
+ description: The total number of Nodes that should realize the NetworkPolicy.
+ jsonPath: .status.desiredNodesRealized
+ - name: Current Nodes
+ type: number
+ format: int32
+ description: The number of Nodes that have realized the NetworkPolicy.
+ jsonPath: .status.currentNodesRealized
+ - name: Age
+ type: date
+ jsonPath: .metadata.creationTimestamp
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ # Ensure that Spec.Priority field is set
+ required:
+ - priority
+ type: object
+ properties:
+ tier:
+ type: string
+ priority:
+ type: number
+ format: float
+ # Ensure that Spec.Priority field is between 1 and 10000
+ minimum: 1.0
+ maximum: 10000.0
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that Spec.AppliedTo does not allow NamespaceSelector/IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ingress:
+ type: array
+ items:
+ type: object
+ required:
+ - action
+ properties:
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that rule AppliedTo does not allow NamespaceSelector/IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ # Ensure that Action field allows only ALLOW, DROP, REJECT and PASS values
+ action:
+ type: string
+ enum: ['Allow', 'Drop', 'Reject', 'Pass']
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ endPort:
+ type: integer
+ protocols:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required: [icmp]
+ properties:
+ icmp:
+ type: object
+ properties:
+ icmpType:
+ type: integer
+ minimum: 0
+ maximum: 255
+ icmpCode:
+ type: integer
+ minimum: 0
+ maximum: 255
+ from:
+ type: array
+ items:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ externalEntitySelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ name:
+ type: string
+ enableLogging:
+ type: boolean
+ egress:
+ type: array
+ items:
+ type: object
+ required:
+ - action
+ properties:
+ appliedTo:
+ type: array
+ items:
+ type: object
+ # Ensure that rule AppliedTo does not allow NamespaceSelector/IPBlock field
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ # Ensure that Action field allows only ALLOW, DROP, REJECT and PASS values
+ action:
+ type: string
+ enum: ['Allow', 'Drop', 'Reject', 'Pass']
+ ports:
+ type: array
+ items:
+ type: object
+ properties:
+ protocol:
+ type: string
+ enum: ['TCP', 'UDP', 'SCTP']
+ port:
+ x-kubernetes-int-or-string: true
+ endPort:
+ type: integer
+ protocols:
+ type: array
+ items:
+ type: object
+ oneOf:
+ - required: [icmp]
+ properties:
+ icmp:
+ type: object
+ properties:
+ icmpType:
+ type: integer
+ minimum: 0
+ maximum: 255
+ icmpCode:
+ type: integer
+ minimum: 0
+ maximum: 255
+ to:
+ type: array
+ items:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ externalEntitySelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ ipBlock:
+ type: object
+ properties:
+ cidr:
+ type: string
+ format: cidr
+ fqdn:
+ type: string
+ nodeSelector:
+ type: object
+ properties:
+ matchExpressions:
+ items:
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ type: array
+ type: object
+ type: array
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ toServices:
+ type: array
+ items:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ namespace:
+ type: string
+ name:
+ type: string
+ enableLogging:
+ type: boolean
+ status:
+ type: object
+ properties:
+ phase:
+ type: string
+ observedGeneration:
+ type: integer
+ currentNodesRealized:
+ type: integer
+ desiredNodesRealized:
+ type: integer
+ subresources:
+ status: {}
+ scope: Namespaced
+ names:
+ plural: networkpolicies
+ singular: networkpolicy
+ kind: NetworkPolicy
+ shortNames:
+ - anp
+---
+# Source: antrea/templates/crds/tier.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: tiers.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha1
+ served: true
+ storage: true
+ additionalPrinterColumns:
+ - name: Priority
+ type: integer
+ description: The Priority of this Tier relative to other Tiers.
+ jsonPath: .spec.priority
+ - name: Age
+ type: date
+ jsonPath: .metadata.creationTimestamp
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ required:
+ - priority
+ type: object
+ properties:
+ priority:
+ type: integer
+ minimum: 0
+ maximum: 255
+ description:
+ type: string
+ scope: Cluster
+ names:
+ plural: tiers
+ singular: tier
+ kind: Tier
+ shortNames:
+ - tr
+---
+# Source: antrea/templates/crds/traceflow.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: traceflows.crd.antrea.io
+ labels:
+ app: antrea
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha1
+ served: true
+ storage: true
+ additionalPrinterColumns:
+ - jsonPath: .status.phase
+ description: The phase of the Traceflow.
+ name: Phase
+ type: string
+ - jsonPath: .spec.source.pod
+ description: The name of the source Pod.
+ name: Source-Pod
+ type: string
+ priority: 10
+ - jsonPath: .spec.destination.pod
+ description: The name of the destination Pod.
+ name: Destination-Pod
+ type: string
+ priority: 10
+ - jsonPath: .spec.destination.ip
+ description: The IP address of the destination.
+ name: Destination-IP
+ type: string
+ priority: 10
+ - jsonPath: .spec.liveTraffic
+ description: Trace live traffic.
+ name: Live-Traffic
+ type: boolean
+ priority: 10
+ - jsonPath: .spec.droppedOnly
+ description: Capture only the dropped packet.
+ name: Dropped-Only
+ type: boolean
+ priority: 10
+ - jsonPath: .spec.timeout
+ description: Timeout in seconds.
+ name: Timeout
+ type: integer
+ priority: 10
+ - jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ type: object
+ properties:
+ source:
+ type: object
+ properties:
+ pod:
+ type: string
+ namespace:
+ type: string
+ ip:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ destination:
+ type: object
+ properties:
+ pod:
+ type: string
+ service:
+ type: string
+ namespace:
+ type: string
+ ip:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ packet:
+ type: object
+ properties:
+ ipHeader:
+ type: object
+ properties:
+ srcIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ protocol:
+ type: integer
+ ttl:
+ type: integer
+ flags:
+ type: integer
+ ipv6Header:
+ type: object
+ properties:
+ srcIP:
+ type: string
+ format: ipv6
+ nextHeader:
+ type: integer
+ hopLimit:
+ type: integer
+ transportHeader:
+ type: object
+ properties:
+ icmp:
+ type: object
+ properties:
+ id:
+ type: integer
+ sequence:
+ type: integer
+ udp:
+ type: object
+ properties:
+ srcPort:
+ type: integer
+ dstPort:
+ type: integer
+ tcp:
+ type: object
+ properties:
+ srcPort:
+ type: integer
+ dstPort:
+ type: integer
+ flags:
+ type: integer
+ liveTraffic:
+ type: boolean
+ droppedOnly:
+ type: boolean
+ timeout:
+ type: integer
+ status:
+ type: object
+ properties:
+ reason:
+ type: string
+ dataplaneTag:
+ type: integer
+ phase:
+ type: string
+ startTime:
+ type: string
+ results:
+ type: array
+ items:
+ type: object
+ properties:
+ node:
+ type: string
+ role:
+ type: string
+ timestamp:
+ type: integer
+ observations:
+ type: array
+ items:
+ type: object
+ properties:
+ component:
+ type: string
+ componentInfo:
+ type: string
+ action:
+ type: string
+ pod:
+ type: string
+ dstMAC:
+ type: string
+ networkPolicy:
+ type: string
+ ttl:
+ type: integer
+ translatedSrcIP:
+ type: string
+ translatedDstIP:
+ type: string
+ tunnelDstIP:
+ type: string
+ capturedPacket:
+ properties:
+ srcIP:
+ type: string
+ dstIP:
+ type: string
+ length:
+ type: integer
+ ipHeader:
+ properties:
+ flags:
+ type: integer
+ protocol:
+ type: integer
+ ttl:
+ type: integer
+ type: object
+ ipv6Header:
+ properties:
+ hopLimit:
+ type: integer
+ nextHeader:
+ type: integer
+ type: object
+ transportHeader:
+ properties:
+ tcp:
+ properties:
+ dstPort:
+ type: integer
+ srcPort:
+ type: integer
+ flags:
+ type: integer
+ type: object
+ udp:
+ properties:
+ dstPort:
+ type: integer
+ srcPort:
+ type: integer
+ type: object
+ icmp:
+ properties:
+ id:
+ type: integer
+ sequence:
+ type: integer
+ type: object
+ type: object
+ type: object
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: traceflows
+ singular: traceflow
+ kind: Traceflow
+ shortNames:
+ - tf
+---
+# Source: antrea/templates/crds/trafficcontrol.yaml
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: trafficcontrols.crd.antrea.io
+spec:
+ group: crd.antrea.io
+ versions:
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ required:
+ - spec
+ properties:
+ spec:
+ type: object
+ required:
+ - appliedTo
+ - direction
+ - action
+ - targetPort
+ properties:
+ appliedTo:
+ type: object
+ properties:
+ podSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ namespaceSelector:
+ type: object
+ properties:
+ matchExpressions:
+ type: array
+ items:
+ type: object
+ properties:
+ key:
+ type: string
+ operator:
+ enum:
+ - In
+ - NotIn
+ - Exists
+ - DoesNotExist
+ type: string
+ values:
+ type: array
+ items:
+ type: string
+ pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
+ matchLabels:
+ x-kubernetes-preserve-unknown-fields: true
+ direction:
+ type: string
+ enum:
+ - Ingress
+ - Egress
+ - Both
+ action:
+ type: string
+ enum:
+ - Mirror
+ - Redirect
+ targetPort:
+ type: object
+ oneOf:
+ - required: [ovsInternal]
+ - required: [device]
+ - required: [geneve]
+ - required: [vxlan]
+ - required: [gre]
+ - required: [erspan]
+ properties:
+ ovsInternal:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ device:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ geneve:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ vni:
+ type: integer
+ minimum: 0
+ maximum: 16777215
+ destinationPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ vxlan:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ vni:
+ type: integer
+ minimum: 0
+ maximum: 16777215
+ destinationPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ gre:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ key:
+ type: integer
+ minimum: 0
+ maximum: 4294967295
+ erspan:
+ type: object
+ required:
+ - remoteIP
+ - version
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ sessionID:
+ type: integer
+ minimum: 0
+ maximum: 1023
+ version:
+ type: integer
+ enum:
+ - 1
+ - 2
+ index:
+ type: integer
+ dir:
+ type: integer
+ enum:
+ - 0
+ - 1
+ hardwareID:
+ type: integer
+ returnPort:
+ type: object
+ oneOf:
+ - required: [ovsInternal]
+ - required: [device]
+ - required: [geneve]
+ - required: [vxlan]
+ - required: [gre]
+ properties:
+ ovsInternal:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ device:
+ type: object
+ required:
+ - name
+ properties:
+ name:
+ type: string
+ geneve:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ vni:
+ type: integer
+ minimum: 0
+ maximum: 16777215
+ destinationPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ vxlan:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ vni:
+ type: integer
+ minimum: 0
+ maximum: 16777215
+ destinationPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ gre:
+ type: object
+ required:
+ - remoteIP
+ properties:
+ remoteIP:
+ type: string
+ oneOf:
+ - format: ipv4
+ - format: ipv6
+ key:
+ type: integer
+ minimum: 0
+ maximum: 4294967295
+ additionalPrinterColumns:
+ - description: Specifies the direction of traffic that should be matched.
+ jsonPath: .spec.direction
+ name: Direction
+ type: string
+ - description: Specifies the action that should be taken for the traffic.
+ jsonPath: .spec.action
+ name: Action
+ type: string
+ - jsonPath: .metadata.creationTimestamp
+ name: Age
+ type: date
+ subresources:
+ status: {}
+ scope: Cluster
+ names:
+ plural: trafficcontrols
+ singular: trafficcontrol
+ kind: TrafficControl
+ shortNames:
+ - tc
+---
+# Source: antrea/templates/agent/clusterrole.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antrea-agent
+ labels:
+ app: antrea
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - ""
+ resources:
+ - nodes/status
+ verbs:
+ - patch
+ - apiGroups:
+ - ""
+ resources:
+ - pods
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - ""
+ resources:
+ - pods/status
+ verbs:
+ - patch
+ - apiGroups:
+ - ""
+ resources:
+ - endpoints
+ - services
+ - namespaces
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - discovery.k8s.io
+ resources:
+ - endpointslices
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - antreaagentinfos
+ verbs:
+ - get
+ - create
+ - update
+ - delete
+ - apiGroups:
+ - controlplane.antrea.io
+ resources:
+ - networkpolicies
+ - appliedtogroups
+ - addressgroups
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - controlplane.antrea.io
+ resources:
+ - egressgroups
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - controlplane.antrea.io
+ resources:
+ - nodestatssummaries
+ verbs:
+ - create
+ - apiGroups:
+ - controlplane.antrea.io
+ resources:
+ - networkpolicies/status
+ verbs:
+ - create
+ - get
+ - apiGroups:
+ - authentication.k8s.io
+ resources:
+ - tokenreviews
+ verbs:
+ - create
+ - apiGroups:
+ - authorization.k8s.io
+ resources:
+ - subjectaccessreviews
+ verbs:
+ - create
+ # This is the content of built-in role kube-system/extension-apiserver-authentication-reader.
+ # But it doesn't have list/watch permission before K8s v1.17.0 so the extension apiserver (antrea-agent) will
+ # have permission issue after bumping up apiserver library to a version that supports dynamic authentication.
+ # See https://github.com/kubernetes/kubernetes/pull/85375
+ # To support K8s clusters older than v1.17.0, we grant the required permissions directly instead of relying on
+ # the extension-apiserver-authentication role.
+ - apiGroups:
+ - ""
+ resourceNames:
+ - extension-apiserver-authentication
+ resources:
+ - configmaps
+ verbs:
+ - get
+ - list
+ - watch
+ - apiGroups:
+ - ""
+ resources:
+ - configmaps
+ resourceNames:
+ - antrea-ca
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - traceflows
+ - traceflows/status
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - create
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - egresses
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - egresses/status
+ verbs:
+ - update
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - externalippools
+ - ippools
+ - trafficcontrols
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - ippools/status
+ verbs:
+ - update
+ - apiGroups:
+ - k8s.cni.cncf.io
+ resources:
+ - network-attachment-definitions
+ verbs:
+ - get
+ - list
+ - watch
+---
+# Source: antrea/templates/antctl/clusterrole.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antctl
+ labels:
+ app: antrea
+rules:
+ - apiGroups:
+ - controlplane.antrea.io
+ resources:
+ - networkpolicies
+ - appliedtogroups
+ - addressgroups
+ verbs:
+ - get
+ - list
+ - apiGroups:
+ - stats.antrea.io
+ resources:
+ - networkpolicystats
+ - antreaclusternetworkpolicystats
+ - antreanetworkpolicystats
+ verbs:
+ - get
+ - list
+ - apiGroups:
+ - system.antrea.io
+ resources:
+ - controllerinfos
+ - agentinfos
+ verbs:
+ - get
+ - apiGroups:
+ - system.antrea.io
+ resources:
+ - supportbundles
+ verbs:
+ - get
+ - post
+ - apiGroups:
+ - system.antrea.io
+ resources:
+ - supportbundles/download
+ verbs:
+ - get
+ - nonResourceURLs:
+ - /agentinfo
+ - /addressgroups
+ - /appliedtogroups
+ - /loglevel
+ - /networkpolicies
+ - /ovsflows
+ - /ovstracing
+ - /podinterfaces
+ - /featuregates
+ - /serviceexternalip
+ verbs:
+ - get
+---
+# Source: antrea/templates/cluster-identity-reader/clusterrolebinding.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antrea-cluster-identity-reader
+ labels:
+ app: antrea
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - configmaps
+ resourceNames:
+ - antrea-cluster-identity
+ verbs:
+ - get
+---
+# Source: antrea/templates/controller/clusterrole.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antrea-controller
+ labels:
+ app: antrea
+rules:
+ - apiGroups:
+ - ""
+ resources:
+ - pods
+ - services
+ - namespaces
+ - configmaps
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - ""
+ resources:
+ - nodes
+ verbs:
+ - get
+ - watch
+ - list
+ - patch
+ - apiGroups:
+ - ""
+ resources:
+ - services/status
+ verbs:
+ - update
+ - apiGroups:
+ - networking.k8s.io
+ resources:
+ - networkpolicies
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - authentication.k8s.io
+ resources:
+ - tokenreviews
+ verbs:
+ - create
+ - apiGroups:
+ - authorization.k8s.io
+ resources:
+ - subjectaccessreviews
+ verbs:
+ - create
+ - apiGroups:
+ - apiextensions.k8s.io
+ resources:
+ - customresourcedefinitions
+ verbs:
+ - get
+ - update
+ # This is the content of built-in role kube-system/extension-apiserver-authentication-reader.
+ # But it doesn't have list/watch permission before K8s v1.17.0 so the extension apiserver (antrea-controller) will
+ # have permission issue after bumping up apiserver library to a version that supports dynamic authentication.
+ # See https://github.com/kubernetes/kubernetes/pull/85375
+ # To support K8s clusters older than v1.17.0, we grant the required permissions directly instead of relying on
+ # the extension-apiserver-authentication role.
+ - apiGroups:
+ - ""
+ resourceNames:
+ - extension-apiserver-authentication
+ resources:
+ - configmaps
+ verbs:
+ - get
+ - list
+ - watch
+ - apiGroups:
+ - ""
+ resources:
+ - configmaps
+ resourceNames:
+ - antrea-ca
+ - antrea-cluster-identity
+ verbs:
+ - get
+ - update
+ - apiGroups:
+ - ""
+ resources:
+ - configmaps
+ verbs:
+ - create
+ - apiGroups:
+ - apiregistration.k8s.io
+ resources:
+ - apiservices
+ resourceNames:
+ - v1alpha1.stats.antrea.io
+ - v1beta1.system.antrea.io
+ - v1beta2.controlplane.antrea.io
+ verbs:
+ - get
+ - update
+ - apiGroups:
+ - apiregistration.k8s.io
+ resources:
+ - apiservices
+ resourceNames:
+ - v1beta1.networking.antrea.tanzu.vmware.com
+ - v1beta1.controlplane.antrea.tanzu.vmware.com
+ - v1alpha1.stats.antrea.tanzu.vmware.com
+ - v1beta1.system.antrea.tanzu.vmware.com
+ - v1beta2.controlplane.antrea.tanzu.vmware.com
+ verbs:
+ - delete
+ - apiGroups:
+ - admissionregistration.k8s.io
+ resources:
+ - mutatingwebhookconfigurations
+ - validatingwebhookconfigurations
+ resourceNames:
+ # always give permissions for labelsmutator.antrea.io, even when the
+ # feature is disabled, to avoid errors in antrea-controller when updating
+ # the CA cert.
+ - labelsmutator.antrea.io
+ - crdmutator.antrea.io
+ - crdvalidator.antrea.io
+ verbs:
+ - get
+ - update
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - antreacontrollerinfos
+ verbs:
+ - get
+ - create
+ - update
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - antreaagentinfos
+ verbs:
+ - list
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - clusternetworkpolicies
+ - networkpolicies
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - create
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - clusternetworkpolicies/status
+ - networkpolicies/status
+ verbs:
+ - update
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - tiers
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - create
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - traceflows
+ - traceflows/status
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - create
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - externalentities
+ - clustergroups
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - create
+ - delete
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - clustergroups/status
+ verbs:
+ - update
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - egresses
+ verbs:
+ - get
+ - watch
+ - list
+ - update
+ - patch
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - externalippools
+ - ippools
+ verbs:
+ - get
+ - watch
+ - list
+ - apiGroups:
+ - crd.antrea.io
+ resources:
+ - externalippools/status
+ - ippools/status
+ verbs:
+ - update
+ - apiGroups:
+ - apps
+ resources:
+ - statefulsets
+ verbs:
+ - get
+ - list
+ - watch
+---
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
metadata:
+ name: aggregate-antrea-policies-edit
labels:
app: antrea
- name: antrea-config-hkhbh5gf99
- namespace: kube-system
+ # Add these permissions to the "admin" and "edit" default roles.
+ rbac.authorization.k8s.io/aggregate-to-admin: "true"
+ rbac.authorization.k8s.io/aggregate-to-edit: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["clusternetworkpolicies", "networkpolicies"]
+ verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
---
-apiVersion: v1
-kind: Service
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: aggregate-antrea-policies-view
+ labels:
+ app: antrea
+ # Add these permissions to the "view" default role.
+ rbac.authorization.k8s.io/aggregate-to-view: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["clusternetworkpolicies", "networkpolicies"]
+ verbs: ["get", "list", "watch"]
+---
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: aggregate-traceflows-edit
+ labels:
+ app: antrea
+ # Add these permissions to the "admin" and "edit" default roles.
+ rbac.authorization.k8s.io/aggregate-to-admin: "true"
+ rbac.authorization.k8s.io/aggregate-to-edit: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["traceflows"]
+ verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
+---
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
metadata:
+ name: aggregate-traceflows-view
+ labels:
+ app: antrea
+ # Add these permissions to the "view" default role.
+ rbac.authorization.k8s.io/aggregate-to-view: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["traceflows"]
+ verbs: ["get", "list", "watch"]
+---
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: aggregate-antrea-clustergroups-edit
+ labels:
+ app: antrea
+ # Add these permissions to the "admin" and "edit" default roles.
+ rbac.authorization.k8s.io/aggregate-to-admin: "true"
+ rbac.authorization.k8s.io/aggregate-to-edit: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["clustergroups"]
+ verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
+---
+# Source: antrea/templates/crds-rbac/clusterroles.yaml
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: aggregate-antrea-clustergroups-view
+ labels:
+ app: antrea
+ # Add these permissions to the "view" default role.
+ rbac.authorization.k8s.io/aggregate-to-view: "true"
+rules:
+- apiGroups: ["crd.antrea.io"]
+ resources: ["clustergroups"]
+ verbs: ["get", "list", "watch"]
+---
+# Source: antrea/templates/agent/clusterrolebinding.yaml
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antrea-agent
+ labels:
+ app: antrea
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: antrea-agent
+subjects:
+ - kind: ServiceAccount
+ name: antrea-agent
+ namespace: kube-system
+---
+# Source: antrea/templates/antctl/clusterrolebinding.yaml
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ labels:
+ app: antrea
+ name: antctl
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: antctl
+subjects:
+ - kind: ServiceAccount
+ name: antctl
+ namespace: kube-system
+---
+# Source: antrea/templates/controller/clusterrolebinding.yaml
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: antrea-controller
labels:
app: antrea
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: antrea-controller
+subjects:
+ - kind: ServiceAccount
+ name: antrea-controller
+ namespace: kube-system
+---
+# Source: antrea/templates/controller/service.yaml
+apiVersion: v1
+kind: Service
+metadata:
name: antrea
namespace: kube-system
+ labels:
+ app: antrea
spec:
ports:
- - port: 443
- protocol: TCP
- targetPort: api
+ - port: 443
+ protocol: TCP
+ targetPort: api
selector:
app: antrea
component: antrea-controller
---
+# Source: antrea/templates/agent/daemonset.yaml
apiVersion: apps/v1
-kind: Deployment
+kind: DaemonSet
metadata:
+ name: antrea-agent
+ namespace: kube-system
labels:
app: antrea
- component: antrea-controller
+ component: antrea-agent
+spec:
+ selector:
+ matchLabels:
+ app: antrea
+ component: antrea-agent
+ updateStrategy:
+ type: RollingUpdate
+ template:
+ metadata:
+ annotations:
+ # Starting with v1.21, Kubernetes supports default container annotation.
+ # Using "kubectl logs/exec/attach/cp" doesn't have to specify "-c antrea-agent" when troubleshooting.
+ kubectl.kubernetes.io/default-container: antrea-agent
+ # Automatically restart Pods with a RollingUpdate if the ConfigMap changes
+ # See https://helm.sh/docs/howto/charts_tips_and_tricks/#automatically-roll-deployments
+ checksum/config: 03ee0481c65f3ec8ff9e879ff10c3cf65991a347a7aec1c9bc866b019ec470f1
+ labels:
+ app: antrea
+ component: antrea-agent
+ spec:
+ hostNetwork: true
+ dnsPolicy: ClusterFirstWithHostNet
+ priorityClassName: system-node-critical
+ nodeSelector:
+ kubernetes.io/os: linux
+ tolerations:
+ - key: CriticalAddonsOnly
+ operator: Exists
+ - effect: NoSchedule
+ operator: Exists
+ - effect: NoExecute
+ operator: Exists
+ serviceAccountName: antrea-agent
+ initContainers:
+ - name: install-cni
+ image: "projects.registry.vmware.com/antrea/antrea-ubuntu:latest"
+ imagePullPolicy: IfNotPresent
+ resources:
+ requests:
+ cpu: 100m
+ command: ["install_cni"]
+ securityContext:
+ capabilities:
+ add:
+ # SYS_MODULE is required to load the OVS kernel module.
+ - SYS_MODULE
+ env:
+ # SKIP_CNI_BINARIES takes in values as a comma separated list of
+ # binaries that need to be skipped for installation, e.g. "portmap, bandwidth".
+ - name: SKIP_CNI_BINARIES
+ value: ""
+ volumeMounts:
+ - name: antrea-config
+ mountPath: /etc/antrea/antrea-cni.conflist
+ subPath: antrea-cni.conflist
+ readOnly: true
+ - name: host-cni-conf
+ mountPath: /host/etc/cni/net.d
+ - name: host-cni-bin
+ mountPath: /host/opt/cni/bin
+ # For loading the OVS kernel module.
+ - name: host-lib-modules
+ mountPath: /lib/modules
+ readOnly: true
+ # For changing the default permissions of the run directory.
+ - name: host-var-run-antrea
+ mountPath: /var/run/antrea
+ containers:
+ - name: antrea-agent
+ image: "projects.registry.vmware.com/antrea/antrea-ubuntu:latest"
+ imagePullPolicy: IfNotPresent
+ command: ["antrea-agent"]
+ # Log to both "/var/log/antrea/" and stderr (so "kubectl logs" can work).-
+ args:
+ - "--config=/etc/antrea/antrea-agent.conf"
+ - "--logtostderr=false"
+ - "--log_dir=/var/log/antrea"
+ - "--alsologtostderr"
+ - "--log_file_max_size=100"
+ - "--log_file_max_num=4"
+ env:
+ # Provide pod and node information for clusterinformation CRD.
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ resources:
+ requests:
+ cpu: 200m
+ ports:
+ - containerPort: 10350
+ name: api
+ protocol: TCP
+ livenessProbe:
+ exec:
+ command:
+ - /bin/sh
+ - -c
+ - container_liveness_probe agent
+ initialDelaySeconds: 5
+ timeoutSeconds: 5
+ periodSeconds: 10
+ failureThreshold: 5
+ readinessProbe:
+ httpGet:
+ host: localhost
+ path: /readyz
+ port: api
+ scheme: HTTPS
+ initialDelaySeconds: 5
+ timeoutSeconds: 5
+ periodSeconds: 10
+ # In large-scale clusters, it may take up to 40~50 seconds for the antrea-agent to reconnect to the antrea
+ # Service after the antrea-controller restarts. The antrea-agent shouldn't be reported as NotReady in this
+ # scenario, otherwise the DaemonSet controller would restart all agents at once, as opposed to performing a
+ # rolling update. Set failureThreshold to 8 so it can tolerate 70s of disconnection.
+ failureThreshold: 8
+ securityContext:
+ # antrea-agent needs to perform sysctl configuration.
+ privileged: true
+ volumeMounts:
+ - name: antrea-config
+ mountPath: /etc/antrea/antrea-agent.conf
+ subPath: antrea-agent.conf
+ readOnly: true
+ - name: host-var-run-antrea
+ mountPath: /var/run/antrea
+ - name: host-var-run-antrea
+ mountPath: /var/run/openvswitch
+ subPath: openvswitch
+ # host-local IPAM stores allocated IP addresses as files in /var/lib/cni/networks/$NETWORK_NAME.
+ # Mount a sub-directory of host-var-run-antrea to it for persistence of IP allocation.
+ - name: host-var-run-antrea
+ mountPath: /var/lib/cni
+ subPath: cni
+ # We need to mount both the /proc directory and the /var/run/netns directory so that
+ # antrea-agent can open the network namespace path when setting up Pod
+ # networking. Different container runtimes may use /proc or /var/run/netns when invoking
+ # the CNI commands. Docker uses /proc and containerd uses /var/run/netns.
+ - name: host-var-log-antrea
+ mountPath: /var/log/antrea
+ - name: host-proc
+ mountPath: /host/proc
+ readOnly: true
+ - name: host-var-run-netns
+ mountPath: /host/var/run/netns
+ readOnly: true
+ # When a container is created, a mount point for the network namespace is added under
+ # /var/run/netns on the host, which needs to be propagated to the antrea-agent container.
+ mountPropagation: HostToContainer
+ - name: xtables-lock
+ mountPath: /run/xtables.lock
+ - name: antrea-ovs
+ image: "projects.registry.vmware.com/antrea/antrea-ubuntu:latest"
+ imagePullPolicy: IfNotPresent
+ resources:
+ requests:
+ cpu: 200m
+ command: ["start_ovs"]
+ args:
+ - "--log_file_max_size=100"
+ - "--log_file_max_num=4"
+ securityContext:
+ # capabilities required by OVS daemons
+ capabilities:
+ add:
+ - SYS_NICE
+ - NET_ADMIN
+ - SYS_ADMIN
+ - IPC_LOCK
+ livenessProbe:
+ exec:
+ # docker CRI doesn't honor timeoutSeconds, add "timeout" to the command as a workaround.
+ # https://github.com/kubernetes/kubernetes/issues/51901
+ command:
+ - /bin/sh
+ - -c
+ - timeout 10 container_liveness_probe ovs
+ initialDelaySeconds: 5
+ timeoutSeconds: 10
+ periodSeconds: 10
+ failureThreshold: 5
+ volumeMounts:
+ - name: host-var-run-antrea
+ mountPath: /var/run/openvswitch
+ subPath: openvswitch
+ - name: host-var-log-antrea
+ mountPath: /var/log/openvswitch
+ subPath: openvswitch
+ volumes:
+ - name: antrea-config
+ configMap:
+ name: antrea-config
+ - name: host-cni-conf
+ hostPath:
+ path: /etc/cni/net.d
+ - name: host-cni-bin
+ hostPath:
+ path: /opt/cni/bin
+ - name: host-proc
+ hostPath:
+ path: /proc
+ - name: host-var-run-netns
+ hostPath:
+ path: /var/run/netns
+ - name: host-var-run-antrea
+ hostPath:
+ path: /var/run/antrea
+ # we use subPath to create run subdirectories for different component (e.g. OVS) and
+ # subPath requires the base volume to exist
+ type: DirectoryOrCreate
+ - name: host-var-log-antrea
+ hostPath:
+ path: /var/log/antrea
+ # we use subPath to create logging subdirectories for different component (e.g. OVS)
+ type: DirectoryOrCreate
+ - name: host-lib-modules
+ hostPath:
+ path: /lib/modules
+ - name: xtables-lock
+ hostPath:
+ path: /run/xtables.lock
+ type: FileOrCreate
+---
+# Source: antrea/templates/controller/deployment.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
name: antrea-controller
namespace: kube-system
+ labels:
+ app: antrea
+ component: antrea-controller
spec:
- replicas: 1
+ strategy:
+ # Ensure the existing Pod is stopped before the new one is created.
+ type: Recreate
selector:
matchLabels:
app: antrea
component: antrea-controller
- strategy:
- type: Recreate
+ replicas: 1
template:
metadata:
+ annotations:
+ # Automatically restart Pod if the ConfigMap changes
+ # See https://helm.sh/docs/howto/charts_tips_and_tricks/#automatically-roll-deployments
+ checksum/config: 03ee0481c65f3ec8ff9e879ff10c3cf65991a347a7aec1c9bc866b019ec470f1
labels:
app: antrea
component: antrea-controller
spec:
- containers:
- - args:
- - --config
- - /etc/antrea/antrea-controller.conf
- - --logtostderr=false
- - --log_dir=/var/log/antrea
- - --alsologtostderr
- - --log_file_max_size=100
- - --log_file_max_num=4
- - --v=0
- command:
- - antrea-controller
- env:
- - name: POD_NAME
- valueFrom:
- fieldRef:
- fieldPath: metadata.name
- - name: POD_NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- - name: NODE_NAME
- valueFrom:
- fieldRef:
- fieldPath: spec.nodeName
- - name: SERVICEACCOUNT_NAME
- valueFrom:
- fieldRef:
- fieldPath: spec.serviceAccountName
- - name: ANTREA_CONFIG_MAP_NAME
- value: antrea-config-hkhbh5gf99
- image: projects.registry.vmware.com/antrea/antrea-ubuntu:latest
- imagePullPolicy: IfNotPresent
- livenessProbe:
- failureThreshold: 5
- httpGet:
- host: localhost
- path: /livez
- port: api
- scheme: HTTPS
- periodSeconds: 10
- timeoutSeconds: 5
- name: antrea-controller
- ports:
- - containerPort: 10349
- name: api
- protocol: TCP
- readinessProbe:
- failureThreshold: 5
- httpGet:
- host: localhost
- path: /readyz
- port: api
- scheme: HTTPS
- initialDelaySeconds: 5
- periodSeconds: 10
- timeoutSeconds: 5
- resources:
- requests:
- cpu: 200m
- volumeMounts:
- - mountPath: /etc/antrea/antrea-controller.conf
- name: antrea-config
- readOnly: true
- subPath: antrea-controller.conf
- - mountPath: /var/run/antrea/antrea-controller-tls
- name: antrea-controller-tls
- - mountPath: /var/log/antrea
- name: host-var-log-antrea
- hostNetwork: true
nodeSelector:
kubernetes.io/os: linux
+ hostNetwork: true
priorityClassName: system-cluster-critical
- serviceAccountName: antrea-controller
tolerations:
- - key: CriticalAddonsOnly
- operator: Exists
- - effect: NoSchedule
- key: node-role.kubernetes.io/master
+ - key: CriticalAddonsOnly
+ operator: Exists
+ - effect: NoSchedule
+ key: node-role.kubernetes.io/master
+ - effect: NoSchedule
+ key: node-role.kubernetes.io/control-plane
+ serviceAccountName: antrea-controller
+ containers:
+ - name: antrea-controller
+ image: "projects.registry.vmware.com/antrea/antrea-ubuntu:latest"
+ imagePullPolicy: IfNotPresent
+ resources:
+ requests:
+ cpu: 200m
+ command: ["antrea-controller"]
+ # Log to both "/var/log/antrea/" and stderr (so "kubectl logs" can work).
+ args:
+ - "--config=/etc/antrea/antrea-controller.conf"
+ - "--logtostderr=false"
+ - "--log_dir=/var/log/antrea"
+ - "--alsologtostderr"
+ - "--log_file_max_size=100"
+ - "--log_file_max_num=4"
+ env:
+ # Provide pod and node information for clusterinformation CRD.
+ - name: POD_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.name
+ - name: POD_NAMESPACE
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: NODE_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ # Provide ServiceAccount name for validation webhook.
+ - name: SERVICEACCOUNT_NAME
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.serviceAccountName
+ - name: ANTREA_CONFIG_MAP_NAME
+ value: antrea-config
+ ports:
+ - containerPort: 10349
+ name: api
+ protocol: TCP
+ readinessProbe:
+ httpGet:
+ host: localhost
+ path: /readyz
+ port: api
+ scheme: HTTPS
+ initialDelaySeconds: 5
+ timeoutSeconds: 5
+ periodSeconds: 10
+ failureThreshold: 5
+ livenessProbe:
+ httpGet:
+ host: localhost
+ path: /livez
+ port: api
+ scheme: HTTPS
+ timeoutSeconds: 5
+ periodSeconds: 10
+ failureThreshold: 5
+ volumeMounts:
+ - name: antrea-config
+ mountPath: /etc/antrea/antrea-controller.conf
+ subPath: antrea-controller.conf
+ readOnly: true
+ - name: antrea-controller-tls
+ mountPath: /var/run/antrea/antrea-controller-tls
+ - name: host-var-log-antrea
+ mountPath: /var/log/antrea
volumes:
- - configMap:
- name: antrea-config-hkhbh5gf99
- name: antrea-config
- - name: antrea-controller-tls
- secret:
- defaultMode: 256
- optional: true
- secretName: antrea-controller-tls
- - hostPath:
- path: /var/log/antrea
- type: DirectoryOrCreate
- name: host-var-log-antrea
+ - name: antrea-config
+ configMap:
+ name: antrea-config
+ # Make it optional as we only read it when selfSignedCert=false.
+ - name: antrea-controller-tls
+ secret:
+ secretName: antrea-controller-tls
+ defaultMode: 0400
+ optional: true
+ - name: host-var-log-antrea
+ hostPath:
+ path: /var/log/antrea
+ type: DirectoryOrCreate
---
+# Source: antrea/templates/controller/apiservices.yaml
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
+ name: v1beta2.controlplane.antrea.io
labels:
app: antrea
- name: v1alpha1.stats.antrea.io
spec:
- group: stats.antrea.io
+ group: controlplane.antrea.io
groupPriorityMinimum: 100
+ version: v1beta2
+ versionPriority: 100
service:
name: antrea
namespace: kube-system
- version: v1alpha1
- versionPriority: 100
---
+# Source: antrea/templates/controller/apiservices.yaml
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
+ name: v1beta1.system.antrea.io
labels:
app: antrea
- name: v1beta1.system.antrea.io
spec:
group: system.antrea.io
groupPriorityMinimum: 100
+ version: v1beta1
+ versionPriority: 100
service:
name: antrea
namespace: kube-system
- version: v1beta1
- versionPriority: 100
---
+# Source: antrea/templates/controller/apiservices.yaml
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
+ name: v1alpha1.stats.antrea.io
labels:
app: antrea
- name: v1beta2.controlplane.antrea.io
spec:
- group: controlplane.antrea.io
+ group: stats.antrea.io
groupPriorityMinimum: 100
+ version: v1alpha1
+ versionPriority: 100
service:
name: antrea
namespace: kube-system
- version: v1beta2
- versionPriority: 100
----
-apiVersion: apps/v1
-kind: DaemonSet
-metadata:
- labels:
- app: antrea
- component: antrea-agent
- name: antrea-agent
- namespace: kube-system
-spec:
- selector:
- matchLabels:
- app: antrea
- component: antrea-agent
- template:
- metadata:
- annotations:
- kubectl.kubernetes.io/default-container: antrea-agent
- labels:
- app: antrea
- component: antrea-agent
- spec:
- containers:
- - args:
- - --config
- - /etc/antrea/antrea-agent.conf
- - --logtostderr=false
- - --log_dir=/var/log/antrea
- - --alsologtostderr
- - --log_file_max_size=100
- - --log_file_max_num=4
- - --v=0
- command:
- - antrea-agent
- env:
- - name: POD_NAME
- valueFrom:
- fieldRef:
- fieldPath: metadata.name
- - name: POD_NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- - name: NODE_NAME
- valueFrom:
- fieldRef:
- fieldPath: spec.nodeName
- image: projects.registry.vmware.com/antrea/antrea-ubuntu:latest
- imagePullPolicy: IfNotPresent
- livenessProbe:
- exec:
- command:
- - /bin/sh
- - -c
- - container_liveness_probe agent
- failureThreshold: 5
- initialDelaySeconds: 5
- periodSeconds: 10
- timeoutSeconds: 5
- name: antrea-agent
- ports:
- - containerPort: 10350
- name: api
- protocol: TCP
- readinessProbe:
- failureThreshold: 8
- httpGet:
- host: localhost
- path: /readyz
- port: api
- scheme: HTTPS
- initialDelaySeconds: 5
- periodSeconds: 10
- timeoutSeconds: 5
- resources:
- requests:
- cpu: 200m
- securityContext:
- privileged: true
- volumeMounts:
- - mountPath: /etc/antrea/antrea-agent.conf
- name: antrea-config
- readOnly: true
- subPath: antrea-agent.conf
- - mountPath: /var/run/antrea
- name: host-var-run-antrea
- - mountPath: /var/run/openvswitch
- name: host-var-run-antrea
- subPath: openvswitch
- - mountPath: /var/lib/cni
- name: host-var-run-antrea
- subPath: cni
- - mountPath: /var/log/antrea
- name: host-var-log-antrea
- - mountPath: /host/proc
- name: host-proc
- readOnly: true
- - mountPath: /host/var/run/netns
- mountPropagation: HostToContainer
- name: host-var-run-netns
- readOnly: true
- - mountPath: /run/xtables.lock
- name: xtables-lock
- - args:
- - --log_file_max_size=100
- - --log_file_max_num=4
- command:
- - start_ovs
- image: projects.registry.vmware.com/antrea/antrea-ubuntu:latest
- imagePullPolicy: IfNotPresent
- livenessProbe:
- exec:
- command:
- - /bin/sh
- - -c
- - timeout 10 container_liveness_probe ovs
- failureThreshold: 5
- initialDelaySeconds: 5
- periodSeconds: 10
- timeoutSeconds: 10
- name: antrea-ovs
- resources:
- requests:
- cpu: 200m
- securityContext:
- capabilities:
- add:
- - SYS_NICE
- - NET_ADMIN
- - SYS_ADMIN
- - IPC_LOCK
- volumeMounts:
- - mountPath: /var/run/openvswitch
- name: host-var-run-antrea
- subPath: openvswitch
- - mountPath: /var/log/openvswitch
- name: host-var-log-antrea
- subPath: openvswitch
- dnsPolicy: ClusterFirstWithHostNet
- hostNetwork: true
- initContainers:
- - command:
- - install_cni
- env:
- - name: SKIP_CNI_BINARIES
- value: ""
- image: projects.registry.vmware.com/antrea/antrea-ubuntu:latest
- imagePullPolicy: IfNotPresent
- name: install-cni
- resources:
- requests:
- cpu: 100m
- securityContext:
- capabilities:
- add:
- - SYS_MODULE
- volumeMounts:
- - mountPath: /etc/antrea/antrea-cni.conflist
- name: antrea-config
- readOnly: true
- subPath: antrea-cni.conflist
- - mountPath: /host/etc/cni/net.d
- name: host-cni-conf
- - mountPath: /host/opt/cni/bin
- name: host-cni-bin
- - mountPath: /lib/modules
- name: host-lib-modules
- readOnly: true
- - mountPath: /var/run/antrea
- name: host-var-run-antrea
- nodeSelector:
- kubernetes.io/os: linux
- priorityClassName: system-node-critical
- serviceAccountName: antrea-agent
- tolerations:
- - key: CriticalAddonsOnly
- operator: Exists
- - effect: NoSchedule
- operator: Exists
- - effect: NoExecute
- operator: Exists
- volumes:
- - configMap:
- name: antrea-config-hkhbh5gf99
- name: antrea-config
- - hostPath:
- path: /etc/cni/net.d
- name: host-cni-conf
- - hostPath:
- path: /opt/cni/bin
- name: host-cni-bin
- - hostPath:
- path: /proc
- name: host-proc
- - hostPath:
- path: /var/run/netns
- name: host-var-run-netns
- - hostPath:
- path: /var/run/antrea
- type: DirectoryOrCreate
- name: host-var-run-antrea
- - hostPath:
- path: /var/log/antrea
- type: DirectoryOrCreate
- name: host-var-log-antrea
- - hostPath:
- path: /lib/modules
- name: host-lib-modules
- - hostPath:
- path: /run/xtables.lock
- type: FileOrCreate
- name: xtables-lock
- updateStrategy:
- type: RollingUpdate
---
+# Source: antrea/templates/webhooks/mutating/crdmutator.yaml
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata:
+ name: "crdmutator.antrea.io"
labels:
app: antrea
- name: crdmutator.antrea.io
webhooks:
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /mutate/acnp
- name: acnpmutator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - clusternetworkpolicies
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /mutate/anp
- name: anpmutator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - networkpolicies
- scope: Namespaced
- sideEffects: None
- timeoutSeconds: 5
+ - name: "acnpmutator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/mutate/acnp"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["clusternetworkpolicies"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "anpmutator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/mutate/anp"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["networkpolicies"]
+ scope: "Namespaced"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
---
+# Source: antrea/templates/webhooks/validating/crdvalidator.yaml
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
+ name: "crdvalidator.antrea.io"
labels:
app: antrea
- name: crdvalidator.antrea.io
webhooks:
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/tier
- name: tiervalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- - DELETE
- resources:
- - tiers
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/acnp
- name: acnpvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - clusternetworkpolicies
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/anp
- name: anpvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha1
- operations:
- - CREATE
- - UPDATE
- resources:
- - networkpolicies
- scope: Namespaced
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/clustergroup
- name: clustergroupvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha3
- - v1alpha2
- operations:
- - CREATE
- - UPDATE
- resources:
- - clustergroups
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/externalippool
- name: externalippoolvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha2
- operations:
- - UPDATE
- resources:
- - externalippools
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/egress
- name: egressvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha2
- operations:
- - CREATE
- - UPDATE
- resources:
- - egresses
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
-- admissionReviewVersions:
- - v1
- - v1beta1
- clientConfig:
- service:
- name: antrea
- namespace: kube-system
- path: /validate/ippool
- name: ippoolvalidator.antrea.io
- rules:
- - apiGroups:
- - crd.antrea.io
- apiVersions:
- - v1alpha2
- operations:
- - CREATE
- - UPDATE
- - DELETE
- resources:
- - ippools
- scope: Cluster
- sideEffects: None
- timeoutSeconds: 5
+ - name: "tiervalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/tier"
+ rules:
+ - operations: ["CREATE", "UPDATE", "DELETE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["tiers"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "acnpvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/acnp"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["clusternetworkpolicies"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "anpvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/anp"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha1"]
+ resources: ["networkpolicies"]
+ scope: "Namespaced"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "clustergroupvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/clustergroup"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha3", "v1alpha2"]
+ resources: ["clustergroups"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "externalippoolvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/externalippool"
+ rules:
+ - operations: ["UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha2"]
+ resources: ["externalippools"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "egressvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/egress"
+ rules:
+ - operations: ["CREATE", "UPDATE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha2"]
+ resources: ["egresses"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
+ - name: "ippoolvalidator.antrea.io"
+ clientConfig:
+ service:
+ name: "antrea"
+ namespace: kube-system
+ path: "/validate/ippool"
+ rules:
+ - operations: ["CREATE", "UPDATE", "DELETE"]
+ apiGroups: ["crd.antrea.io"]
+ apiVersions: ["v1alpha2"]
+ resources: ["ippools"]
+ scope: "Cluster"
+ admissionReviewVersions: ["v1", "v1beta1"]
+ sideEffects: None
+ timeoutSeconds: 5
diff --git a/build/yamls/base/conf/antrea-controller.conf b/build/yamls/base/conf/antrea-controller.conf
deleted file mode 100644
index 7db2983b300..00000000000
--- a/build/yamls/base/conf/antrea-controller.conf
+++ /dev/null
@@ -1,73 +0,0 @@
-# FeatureGates is a map of feature names to bools that enable or disable experimental features.
-featureGates:
-# Enable traceflow which provides packet tracing feature to diagnose network issue.
-# Traceflow: true
-
-# Enable Antrea ClusterNetworkPolicy feature to complement K8s NetworkPolicy for cluster admins
-# to define security policies which apply to the entire cluster, and Antrea NetworkPolicy
-# feature that supports priorities, rule actions and externalEntities in the future.
-# AntreaPolicy: true
-
-# Enable collecting and exposing NetworkPolicy statistics.
-# NetworkPolicyStats: true
-
-# Enable controlling SNAT IPs of Pod egress traffic.
-# Egress: true
-
-# Run Kubernetes NodeIPAMController with Antrea.
-# NodeIPAM: false
-
-# Enable flexible IPAM mode for Antrea. This mode allows to assign IP Ranges to Namespaces,
-# Deployments and StatefulSets via IP Pool annotation.
-# AntreaIPAM: false
-
-# Enable managing external IPs of Services of LoadBalancer type.
-# ServiceExternalIP: false
-
-# The port for the antrea-controller APIServer to serve on.
-# Note that if it's set to another value, the `containerPort` of the `api` port of the
-# `antrea-controller` container must be set to the same value.
-#apiPort: 10349
-
-# Enable metrics exposure via Prometheus. Initializes Prometheus metrics listener.
-#enablePrometheusMetrics: true
-
-# Indicates whether to use auto-generated self-signed TLS certificate.
-# If false, A Secret named "antrea-controller-tls" must be provided with the following keys:
-# ca.crt:
-# tls.crt:
-# tls.key:
-# And the Secret must be mounted to directory "/var/run/antrea/antrea-controller-tls" of the
-# antrea-controller container.
-#selfSignedCert: true
-
-# Comma-separated list of Cipher Suites. If omitted, the default Go Cipher Suites will be used.
-# https://golang.org/pkg/crypto/tls/#pkg-constants
-# Note that TLS1.3 Cipher Suites cannot be added to the list. But the apiserver will always
-# prefer TLS1.3 Cipher Suites whenever possible.
-#tlsCipherSuites:
-
-# TLS min version from: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13.
-#tlsMinVersion:
-
-nodeIPAM:
-# Enable the integrated Node IPAM controller within the Antrea controller.
-# enableNodeIPAM: false
-
-# CIDR ranges for Pods in cluster. String array containing single CIDR range, or multiple ranges.
-# The CIDRs could be either IPv4 or IPv6. At most one CIDR may be specified for each IP family.
-# Value ignored when enableNodeIPAM is false.
-# clusterCIDRs: []
-
-# CIDR ranges for Services in cluster. It is not necessary to specify it when there is no overlap with clusterCIDRs.
-# Value ignored when enableNodeIPAM is false.
-# serviceCIDR:
-# serviceCIDRv6:
-
-# Mask size for IPv4 Node CIDR in IPv4 or dual-stack cluster. Value ignored when enableNodeIPAM is false
-# or when IPv4 Pod CIDR is not configured. Valid range is 16 to 30.
-# nodeCIDRMaskSizeIPv4: 24
-
-# Mask size for IPv6 Node CIDR in IPv6 or dual-stack cluster. Value ignored when enableNodeIPAM is false
-# or when IPv6 Pod CIDR is not configured. Valid range is 64 to 126.
-# nodeCIDRMaskSizeIPv6: 64
diff --git a/build/yamls/base/controller.yml b/build/yamls/base/controller.yml
deleted file mode 100644
index 7ce4a28da36..00000000000
--- a/build/yamls/base/controller.yml
+++ /dev/null
@@ -1,306 +0,0 @@
----
-apiVersion: v1
-kind: Service
-metadata:
- name: antrea
-spec:
- ports:
- - port: 443
- protocol: TCP
- targetPort: api
- selector:
- component: antrea-controller
----
-apiVersion: apiregistration.k8s.io/v1
-kind: APIService
-metadata:
- name: v1beta2.controlplane.antrea.io
-spec:
- group: controlplane.antrea.io
- groupPriorityMinimum: 100
- version: v1beta2
- versionPriority: 100
- service:
- name: antrea
- namespace: kube-system
----
-apiVersion: apiregistration.k8s.io/v1
-kind: APIService
-metadata:
- name: v1beta1.system.antrea.io
-spec:
- group: system.antrea.io
- groupPriorityMinimum: 100
- version: v1beta1
- versionPriority: 100
- service:
- name: antrea
- namespace: kube-system
----
-apiVersion: admissionregistration.k8s.io/v1
-kind: MutatingWebhookConfiguration
-metadata:
- name: "crdmutator.antrea.io"
-webhooks:
- - name: "acnpmutator.antrea.io"
- clientConfig:
- service:
- name: "antrea"
- namespace: "kube-system"
- path: "/mutate/acnp"
- rules:
- - operations: ["CREATE", "UPDATE"]
- apiGroups: ["crd.antrea.io"]
- apiVersions: ["v1alpha1"]
- resources: ["clusternetworkpolicies"]
- scope: "Cluster"
- admissionReviewVersions: ["v1", "v1beta1"]
- sideEffects: None
- timeoutSeconds: 5
- - name: "anpmutator.antrea.io"
- clientConfig:
- service:
- name: "antrea"
- namespace: "kube-system"
- path: "/mutate/anp"
- rules:
- - operations: ["CREATE", "UPDATE"]
- apiGroups: ["crd.antrea.io"]
- apiVersions: ["v1alpha1"]
- resources: ["networkpolicies"]
- scope: "Namespaced"
- admissionReviewVersions: ["v1", "v1beta1"]
- sideEffects: None
- timeoutSeconds: 5
----
-apiVersion: admissionregistration.k8s.io/v1
-kind: ValidatingWebhookConfiguration
-metadata:
- name: "crdvalidator.antrea.io"
-webhooks:
- - name: "tiervalidator.antrea.io"
- clientConfig:
- service:
- name: "antrea"
- namespace: "kube-system"
- path: "/validate/tier"
- rules:
- - operations: ["CREATE", "UPDATE", "DELETE"]
- apiGroups: ["crd.antrea.io"]
- apiVersions: ["v1alpha1"]
- resources: ["tiers"]
- scope: "Cluster"
- admissionReviewVersions: ["v1", "v1beta1"]
- sideEffects: None
- timeoutSeconds: 5
- - name: "acnpvalidator.antrea.io"
- clientConfig:
- service:
- name: "antrea"
- namespace: "kube-system"
- path: "/validate/acnp"
- rules:
- - operations: ["CREATE", "UPDATE"]
- apiGroups: ["crd.antrea.io"]
- apiVersions: ["v1alpha1"]
- resources: ["clusternetworkpolicies"]
- scope: "Cluster"
- admissionReviewVersions: ["v1", "v1beta1"]
- sideEffects: None
- timeoutSeconds: 5
- - name: "anpvalidator.antrea.io"
- clientConfig:
- service:
- name: "antrea"
- namespace: "kube-system"
- path: "/validate/anp"
- rules:
- - operations: ["CREATE", "UPDATE"]
- apiGroups: ["crd.antrea.io"]
- apiVersions: ["v1alpha1"]
- resources: ["networkpolicies"]
- scope: "Namespaced"
- admissionReviewVersions: ["v1", "v1beta1"]
- sideEffects: None
- timeoutSeconds: 5
- - name: "clustergroupvalidator.antrea.io"
- clientConfig:
- service:
- name: "antrea"
- namespace: "kube-system"
- path: "/validate/clustergroup"
- rules:
- - operations: ["CREATE", "UPDATE"]
- apiGroups: ["crd.antrea.io"]
- apiVersions: ["v1alpha3", "v1alpha2"]
- resources: ["clustergroups"]
- scope: "Cluster"
- admissionReviewVersions: ["v1", "v1beta1"]
- sideEffects: None
- timeoutSeconds: 5
- - name: "externalippoolvalidator.antrea.io"
- clientConfig:
- service:
- name: "antrea"
- namespace: "kube-system"
- path: "/validate/externalippool"
- rules:
- - operations: ["UPDATE"]
- apiGroups: ["crd.antrea.io"]
- apiVersions: ["v1alpha2"]
- resources: ["externalippools"]
- scope: "Cluster"
- admissionReviewVersions: ["v1", "v1beta1"]
- sideEffects: None
- timeoutSeconds: 5
- - name: "egressvalidator.antrea.io"
- clientConfig:
- service:
- name: "antrea"
- namespace: "kube-system"
- path: "/validate/egress"
- rules:
- - operations: ["CREATE", "UPDATE"]
- apiGroups: ["crd.antrea.io"]
- apiVersions: ["v1alpha2"]
- resources: ["egresses"]
- scope: "Cluster"
- admissionReviewVersions: ["v1", "v1beta1"]
- sideEffects: None
- timeoutSeconds: 5
- - name: "ippoolvalidator.antrea.io"
- clientConfig:
- service:
- name: "antrea"
- namespace: "kube-system"
- path: "/validate/ippool"
- rules:
- - operations: ["CREATE", "UPDATE", "DELETE"]
- apiGroups: ["crd.antrea.io"]
- apiVersions: ["v1alpha2"]
- resources: ["ippools"]
- scope: "Cluster"
- admissionReviewVersions: ["v1", "v1beta1"]
- sideEffects: None
- timeoutSeconds: 5
----
-apiVersion: apiregistration.k8s.io/v1
-kind: APIService
-metadata:
- name: v1alpha1.stats.antrea.io
-spec:
- group: stats.antrea.io
- groupPriorityMinimum: 100
- version: v1alpha1
- versionPriority: 100
- service:
- name: antrea
- namespace: kube-system
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: antrea-controller
- labels:
- component: antrea-controller
-spec:
- strategy:
- # Ensure the existing Pod is stopped before the new one is created.
- type: Recreate
- selector:
- matchLabels:
- component: antrea-controller
- template:
- metadata:
- labels:
- component: antrea-controller
- spec:
- nodeSelector:
- kubernetes.io/os: linux
- hostNetwork: true
- priorityClassName: system-cluster-critical
- tolerations:
- # Mark it as a critical add-on.
- - key: CriticalAddonsOnly
- operator: Exists
- # Allow it to schedule onto master nodes.
- - key: node-role.kubernetes.io/master
- effect: NoSchedule
- serviceAccountName: antrea-controller
- containers:
- - name: antrea-controller
- image: antrea
- resources:
- requests:
- cpu: "200m"
- command: ["antrea-controller"]
- # Log to both "/var/log/antrea/" and stderr (so "kubectl logs" can work).
- args: ["--config", "/etc/antrea/antrea-controller.conf", "--logtostderr=false", "--log_dir=/var/log/antrea", "--alsologtostderr", "--log_file_max_size=100", "--log_file_max_num=4", "--v=0"]
- env:
- # Provide pod and node information for clusterinformation CRD.
- - name: POD_NAME
- valueFrom:
- fieldRef:
- fieldPath: metadata.name
- - name: POD_NAMESPACE
- valueFrom:
- fieldRef:
- fieldPath: metadata.namespace
- - name: NODE_NAME
- valueFrom:
- fieldRef:
- fieldPath: spec.nodeName
- # Provide ServiceAccount name for validation webhook.
- - name: SERVICEACCOUNT_NAME
- valueFrom:
- fieldRef:
- fieldPath: spec.serviceAccountName
- - name: ANTREA_CONFIG_MAP_NAME
- value: "$(ANTREA_CONFIG_MAP_NAME)"
- ports:
- - containerPort: 10349
- name: api
- protocol: TCP
- readinessProbe:
- httpGet:
- host: localhost
- path: /readyz
- port: api
- scheme: HTTPS
- initialDelaySeconds: 5
- timeoutSeconds: 5
- periodSeconds: 10
- failureThreshold: 5
- livenessProbe:
- httpGet:
- host: localhost
- path: /livez
- port: api
- scheme: HTTPS
- timeoutSeconds: 5
- periodSeconds: 10
- failureThreshold: 5
- volumeMounts:
- - name: antrea-config
- mountPath: /etc/antrea/antrea-controller.conf
- subPath: antrea-controller.conf
- readOnly: true
- - name: antrea-controller-tls
- mountPath: /var/run/antrea/antrea-controller-tls
- - name: host-var-log-antrea
- mountPath: /var/log/antrea
- volumes:
- - name: antrea-config
- configMap:
- name: antrea-config
- # Make it optional as we only read it when selfSignedCert=false.
- - name: antrea-controller-tls
- secret:
- secretName: antrea-controller-tls
- defaultMode: 0400
- optional: true
- - name: host-var-log-antrea
- hostPath:
- path: /var/log/antrea
- type: DirectoryOrCreate
----
diff --git a/build/yamls/base/crds.yml b/build/yamls/base/crds.yml
deleted file mode 100644
index b4176f40846..00000000000
--- a/build/yamls/base/crds.yml
+++ /dev/null
@@ -1,2016 +0,0 @@
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- name: egresses.crd.antrea.io
-spec:
- group: crd.antrea.io
- versions:
- - name: v1alpha2
- served: true
- storage: true
- schema:
- openAPIV3Schema:
- type: object
- required:
- - spec
- properties:
- spec:
- type: object
- required:
- - appliedTo
- anyOf:
- - required:
- - egressIP
- - required:
- - externalIPPool
- properties:
- appliedTo:
- type: object
- properties:
- podSelector:
- type: object
- properties:
- matchExpressions:
- type: array
- items:
- type: object
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- type: array
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- namespaceSelector:
- type: object
- properties:
- matchExpressions:
- type: array
- items:
- type: object
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- type: array
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- egressIP:
- type: string
- oneOf:
- - format: ipv4
- - format: ipv6
- externalIPPool:
- type: string
- status:
- type: object
- properties:
- egressNode:
- type: string
- additionalPrinterColumns:
- - description: Specifies the SNAT IP address for the selected workloads.
- jsonPath: .spec.egressIP
- name: EgressIP
- type: string
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- - description: The Owner Node of egress IP
- jsonPath: .status.egressNode
- name: Node
- type: string
- subresources:
- status: {}
- scope: Cluster
- names:
- plural: egresses
- singular: egress
- kind: Egress
- shortNames:
- - eg
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- name: externalippools.crd.antrea.io
-spec:
- group: crd.antrea.io
- versions:
- - name: v1alpha2
- served: true
- storage: true
- schema:
- openAPIV3Schema:
- type: object
- required:
- - spec
- properties:
- spec:
- type: object
- required:
- - ipRanges
- - nodeSelector
- properties:
- ipRanges:
- type: array
- items:
- type: object
- oneOf:
- - required:
- - cidr
- - required:
- - start
- - end
- properties:
- cidr:
- type: string
- format: cidr
- start:
- type: string
- oneOf:
- - format: ipv4
- - format: ipv6
- end:
- type: string
- oneOf:
- - format: ipv4
- - format: ipv6
- nodeSelector:
- type: object
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- status:
- type: object
- properties:
- usage:
- type: object
- properties:
- total:
- type: integer
- used:
- type: integer
- additionalPrinterColumns:
- - description: The number of total IPs
- jsonPath: .status.usage.total
- name: Total
- type: integer
- - description: The number of allocated IPs
- jsonPath: .status.usage.used
- name: Used
- type: integer
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- subresources:
- status: {}
- scope: Cluster
- names:
- plural: externalippools
- singular: externalippool
- kind: ExternalIPPool
- shortNames:
- - eip
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- name: ippools.crd.antrea.io
-spec:
- group: crd.antrea.io
- versions:
- - name: v1alpha2
- served: true
- storage: true
- schema:
- openAPIV3Schema:
- type: object
- required:
- - spec
- properties:
- spec:
- required:
- - ipVersion
- - ipRanges
- type: object
- properties:
- ipVersion:
- type: integer
- ipRanges:
- items:
- oneOf:
- - required:
- - cidr
- - gateway
- - prefixLength
- - required:
- - start
- - end
- - gateway
- - prefixLength
- properties:
- cidr:
- format: cidr
- type: string
- start:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- end:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- gateway:
- oneOf:
- - format: ipv4
- - format: ipv6
- type: string
- prefixLength:
- type: integer
- vlan:
- type: integer
- minimum: 0
- maximum: 4094
- type: object
- type: array
- status:
- properties:
- ipAddresses:
- items:
- properties:
- ipAddress:
- type: string
- owner:
- properties:
- pod:
- properties:
- name:
- type: string
- namespace:
- type: string
- containerID:
- type: string
- type: object
- statefulSet:
- properties:
- name:
- type: string
- namespace:
- type: string
- index:
- type: integer
- type: object
- type: object
- phase:
- type: string
- type: object
- type: array
- type: object
- subresources:
- status: {}
- scope: Cluster
- names:
- plural: ippools
- singular: ippool
- kind: IPPool
- shortNames:
- - ipp
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- name: antreacontrollerinfos.crd.antrea.io
-spec:
- group: crd.antrea.io
- versions:
- - name: v1beta1
- served: true
- storage: true
- schema:
- openAPIV3Schema:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- additionalPrinterColumns:
- - description: Health status of the Controller
- jsonPath: ".controllerConditions[?(@.type=='ControllerHealthy')].status"
- name: Healthy
- type: string
- - description: Last time the Healthy Condition was updated
- jsonPath: ".controllerConditions[?(@.type=='ControllerHealthy')].lastHeartbeatTime"
- name: Last Heartbeat
- type: date
- - description: Version of the Controller
- jsonPath: ".version"
- name: Version
- type: string
- priority: 1
- - description: Number of Agents connected to the Controller
- jsonPath: ".connectedAgentNum"
- name: Connected Agents
- type: integer
- priority: 1
- - description: Node on which the Controller is running
- jsonPath: ".nodeRef.name"
- name: Node
- type: string
- priority: 1
- - description: Number of Network Policies computed by Controller
- jsonPath: ".networkPolicyControllerInfo.networkPolicyNum"
- name: Num Network Policies
- type: integer
- priority: 2
- scope: Cluster
- names:
- plural: antreacontrollerinfos
- singular: antreacontrollerinfo
- kind: AntreaControllerInfo
- shortNames:
- - aci
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- name: antreaagentinfos.crd.antrea.io
-spec:
- group: crd.antrea.io
- versions:
- - name: v1beta1
- served: true
- storage: true
- schema:
- openAPIV3Schema:
- type: object
- x-kubernetes-preserve-unknown-fields: true
- additionalPrinterColumns:
- - description: Health status of this Agent
- jsonPath: ".agentConditions[?(@.type=='AgentHealthy')].status"
- name: Healthy
- type: string
- - description: Last time the Healthy Condition was updated
- jsonPath: ".agentConditions[?(@.type=='AgentHealthy')].lastHeartbeatTime"
- name: Last Heartbeat
- type: date
- - description: Version of this Agent
- jsonPath: ".version"
- name: Version
- type: string
- priority: 1
- - description: Node on which this Agent is running
- jsonPath: ".nodeRef.name"
- name: Node
- type: string
- priority: 1
- - description: Number of local Pods managed by this Agent
- jsonPath: ".localPodNum"
- name: Num Pods
- type: integer
- priority: 2
- - description: Subnets used by this Agent for Pod IPAM
- jsonPath: ".nodeSubnets"
- name: Subnets
- type: string
- priority: 2
- scope: Cluster
- names:
- plural: antreaagentinfos
- singular: antreaagentinfo
- kind: AntreaAgentInfo
- shortNames:
- - aai
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- name: traceflows.crd.antrea.io
-spec:
- group: crd.antrea.io
- versions:
- - name: v1alpha1
- served: true
- storage: true
- additionalPrinterColumns:
- - jsonPath: .status.phase
- description: The phase of the Traceflow.
- name: Phase
- type: string
- - jsonPath: .spec.source.pod
- description: The name of the source Pod.
- name: Source-Pod
- type: string
- priority: 10
- - jsonPath: .spec.destination.pod
- description: The name of the destination Pod.
- name: Destination-Pod
- type: string
- priority: 10
- - jsonPath: .spec.destination.ip
- description: The IP address of the destination.
- name: Destination-IP
- type: string
- priority: 10
- - jsonPath: .spec.liveTraffic
- description: Trace live traffic.
- name: Live-Traffic
- type: boolean
- priority: 10
- - jsonPath: .spec.droppedOnly
- description: Capture only the dropped packet.
- name: Dropped-Only
- type: boolean
- priority: 10
- - jsonPath: .spec.timeout
- description: Timeout in seconds.
- name: Timeout
- type: integer
- priority: 10
- - jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- schema:
- openAPIV3Schema:
- type: object
- required:
- - spec
- properties:
- spec:
- type: object
- properties:
- source:
- type: object
- properties:
- pod:
- type: string
- namespace:
- type: string
- ip:
- type: string
- oneOf:
- - format: ipv4
- - format: ipv6
- destination:
- type: object
- properties:
- pod:
- type: string
- service:
- type: string
- namespace:
- type: string
- ip:
- type: string
- oneOf:
- - format: ipv4
- - format: ipv6
- packet:
- type: object
- properties:
- ipHeader:
- type: object
- properties:
- srcIP:
- type: string
- oneOf:
- - format: ipv4
- - format: ipv6
- protocol:
- type: integer
- ttl:
- type: integer
- flags:
- type: integer
- ipv6Header:
- type: object
- properties:
- srcIP:
- type: string
- format: ipv6
- nextHeader:
- type: integer
- hopLimit:
- type: integer
- transportHeader:
- type: object
- properties:
- icmp:
- type: object
- properties:
- id:
- type: integer
- sequence:
- type: integer
- udp:
- type: object
- properties:
- srcPort:
- type: integer
- dstPort:
- type: integer
- tcp:
- type: object
- properties:
- srcPort:
- type: integer
- dstPort:
- type: integer
- flags:
- type: integer
- liveTraffic:
- type: boolean
- droppedOnly:
- type: boolean
- timeout:
- type: integer
- status:
- type: object
- properties:
- reason:
- type: string
- dataplaneTag:
- type: integer
- phase:
- type: string
- startTime:
- type: string
- results:
- type: array
- items:
- type: object
- properties:
- node:
- type: string
- role:
- type: string
- timestamp:
- type: integer
- observations:
- type: array
- items:
- type: object
- properties:
- component:
- type: string
- componentInfo:
- type: string
- action:
- type: string
- pod:
- type: string
- dstMAC:
- type: string
- networkPolicy:
- type: string
- ttl:
- type: integer
- translatedSrcIP:
- type: string
- translatedDstIP:
- type: string
- tunnelDstIP:
- type: string
- capturedPacket:
- properties:
- srcIP:
- type: string
- dstIP:
- type: string
- length:
- type: integer
- ipHeader:
- properties:
- flags:
- type: integer
- protocol:
- type: integer
- ttl:
- type: integer
- type: object
- ipv6Header:
- properties:
- hopLimit:
- type: integer
- nextHeader:
- type: integer
- type: object
- transportHeader:
- properties:
- tcp:
- properties:
- dstPort:
- type: integer
- srcPort:
- type: integer
- flags:
- type: integer
- type: object
- udp:
- properties:
- dstPort:
- type: integer
- srcPort:
- type: integer
- type: object
- icmp:
- properties:
- id:
- type: integer
- sequence:
- type: integer
- type: object
- type: object
- type: object
- subresources:
- status: {}
- scope: Cluster
- names:
- plural: traceflows
- singular: traceflow
- kind: Traceflow
- shortNames:
- - tf
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- name: tiers.crd.antrea.io
-spec:
- group: crd.antrea.io
- versions:
- - name: v1alpha1
- served: true
- storage: true
- additionalPrinterColumns:
- - name: Priority
- type: integer
- description: The Priority of this Tier relative to other Tiers.
- jsonPath: .spec.priority
- - name: Age
- type: date
- jsonPath: .metadata.creationTimestamp
- schema:
- openAPIV3Schema:
- type: object
- properties:
- spec:
- required:
- - priority
- type: object
- properties:
- priority:
- type: integer
- minimum: 0
- maximum: 255
- description:
- type: string
- scope: Cluster
- names:
- plural: tiers
- singular: tier
- kind: Tier
- shortNames:
- - tr
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- name: clusternetworkpolicies.crd.antrea.io
-spec:
- group: crd.antrea.io
- versions:
- - name: v1alpha1
- served: true
- storage: true
- additionalPrinterColumns:
- - name: Tier
- type: string
- description: The Tier to which this ClusterNetworkPolicy belongs to.
- jsonPath: .spec.tier
- - name: Priority
- type: number
- format: float
- description: The Priority of this ClusterNetworkPolicy relative to other policies.
- jsonPath: .spec.priority
- - name: Desired Nodes
- type: number
- format: int32
- description: The total number of Nodes that should realize the NetworkPolicy.
- jsonPath: .status.desiredNodesRealized
- - name: Current Nodes
- type: number
- format: int32
- description: The number of Nodes that have realized the NetworkPolicy.
- jsonPath: .status.currentNodesRealized
- - name: Age
- type: date
- jsonPath: .metadata.creationTimestamp
- schema:
- openAPIV3Schema:
- type: object
- properties:
- spec:
- # Ensure that Spec.Priority field is set
- required:
- - priority
- type: object
- properties:
- tier:
- type: string
- priority:
- type: number
- format: float
- # Ensure that Spec.Priority field is between 1 and 10000
- minimum: 1.0
- maximum: 10000.0
- appliedTo:
- type: array
- items:
- type: object
- # Ensure that Spec.AppliedTo does not allow IPBlock field
- properties:
- podSelector:
- type: object
- properties:
- matchExpressions:
- type: array
- items:
- type: object
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- type: array
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- namespaceSelector:
- type: object
- properties:
- matchExpressions:
- type: array
- items:
- type: object
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- type: array
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- group:
- type: string
- serviceAccount:
- type: object
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- ingress:
- type: array
- items:
- type: object
- required:
- - action
- properties:
- appliedTo:
- type: array
- items:
- type: object
- # Ensure that rule AppliedTo does not allow IPBlock field
- properties:
- podSelector:
- type: object
- properties:
- matchExpressions:
- type: array
- items:
- type: object
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- type: array
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- namespaceSelector:
- type: object
- properties:
- matchExpressions:
- type: array
- items:
- type: object
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- type: array
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- group:
- type: string
- serviceAccount:
- type: object
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- # Ensure that Action field allows only ALLOW, DROP and REJECT values
- action:
- type: string
- enum: ['Allow', 'Drop', 'Reject', 'Pass']
- ports:
- type: array
- items:
- type: object
- properties:
- protocol:
- type: string
- enum: ['TCP', 'UDP', 'SCTP']
- port:
- x-kubernetes-int-or-string: true
- endPort:
- type: integer
- from:
- type: array
- items:
- type: object
- properties:
- podSelector:
- type: object
- properties:
- matchExpressions:
- type: array
- items:
- type: object
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- type: array
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- namespaceSelector:
- type: object
- properties:
- matchExpressions:
- type: array
- items:
- type: object
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- type: array
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- namespaces:
- type: object
- properties:
- match:
- enum:
- - Self
- type: string
- ipBlock:
- type: object
- properties:
- cidr:
- type: string
- format: cidr
- group:
- type: string
- serviceAccount:
- type: object
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- nodeSelector:
- type: object
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- name:
- type: string
- enableLogging:
- type: boolean
- egress:
- type: array
- items:
- type: object
- required:
- - action
- properties:
- appliedTo:
- type: array
- items:
- type: object
- # Ensure that rule AppliedTo does not allow IPBlock field
- properties:
- podSelector:
- type: object
- properties:
- matchExpressions:
- type: array
- items:
- type: object
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- type: array
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- namespaceSelector:
- type: object
- properties:
- matchExpressions:
- type: array
- items:
- type: object
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- type: array
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- group:
- type: string
- serviceAccount:
- type: object
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- # Ensure that Action field allows only ALLOW, DROP and REJECT values
- action:
- type: string
- enum: ['Allow', 'Drop', 'Reject', 'Pass']
- ports:
- type: array
- items:
- type: object
- properties:
- protocol:
- type: string
- enum: ['TCP', 'UDP', 'SCTP']
- port:
- x-kubernetes-int-or-string: true
- endPort:
- type: integer
- to:
- type: array
- items:
- type: object
- properties:
- podSelector:
- type: object
- properties:
- matchExpressions:
- type: array
- items:
- type: object
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- type: array
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- namespaceSelector:
- type: object
- properties:
- matchExpressions:
- type: array
- items:
- type: object
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- type: array
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- namespaces:
- type: object
- properties:
- match:
- type: string
- ipBlock:
- type: object
- properties:
- cidr:
- type: string
- format: cidr
- group:
- type: string
- fqdn:
- type: string
- serviceAccount:
- type: object
- properties:
- name:
- type: string
- namespace:
- type: string
- required:
- - name
- - namespace
- nodeSelector:
- type: object
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- toServices:
- type: array
- items:
- type: object
- required:
- - name
- - namespace
- properties:
- name:
- type: string
- namespace:
- type: string
- name:
- type: string
- enableLogging:
- type: boolean
- status:
- type: object
- properties:
- phase:
- type: string
- observedGeneration:
- type: integer
- currentNodesRealized:
- type: integer
- desiredNodesRealized:
- type: integer
- subresources:
- status: {}
- scope: Cluster
- names:
- plural: clusternetworkpolicies
- singular: clusternetworkpolicy
- kind: ClusterNetworkPolicy
- shortNames:
- - acnp
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- name: networkpolicies.crd.antrea.io
-spec:
- group: crd.antrea.io
- versions:
- - name: v1alpha1
- served: true
- storage: true
- additionalPrinterColumns:
- - name: Tier
- type: string
- description: The Tier to which this Antrea NetworkPolicy belongs to.
- jsonPath: .spec.tier
- - name: Priority
- type: number
- format: float
- description: The Priority of this Antrea NetworkPolicy relative to other policies.
- jsonPath: .spec.priority
- - name: Desired Nodes
- type: number
- format: int32
- description: The total number of Nodes that should realize the NetworkPolicy.
- jsonPath: .status.desiredNodesRealized
- - name: Current Nodes
- type: number
- format: int32
- description: The number of Nodes that have realized the NetworkPolicy.
- jsonPath: .status.currentNodesRealized
- - name: Age
- type: date
- jsonPath: .metadata.creationTimestamp
- schema:
- openAPIV3Schema:
- type: object
- properties:
- spec:
- # Ensure that Spec.Priority field is set
- required:
- - priority
- type: object
- properties:
- tier:
- type: string
- priority:
- type: number
- format: float
- # Ensure that Spec.Priority field is between 1 and 10000
- minimum: 1.0
- maximum: 10000.0
- appliedTo:
- type: array
- items:
- type: object
- # Ensure that Spec.AppliedTo does not allow NamespaceSelector/IPBlock field
- properties:
- podSelector:
- type: object
- properties:
- matchExpressions:
- type: array
- items:
- type: object
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- type: array
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- ingress:
- type: array
- items:
- type: object
- required:
- - action
- properties:
- appliedTo:
- type: array
- items:
- type: object
- # Ensure that rule AppliedTo does not allow NamespaceSelector/IPBlock field
- properties:
- podSelector:
- type: object
- properties:
- matchExpressions:
- type: array
- items:
- type: object
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- type: array
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- # Ensure that Action field allows only ALLOW, DROP and REJECT values
- action:
- type: string
- enum: ['Allow', 'Drop', 'Reject', 'Pass']
- ports:
- type: array
- items:
- type: object
- properties:
- protocol:
- type: string
- enum: ['TCP', 'UDP', 'SCTP']
- port:
- x-kubernetes-int-or-string: true
- endPort:
- type: integer
- from:
- type: array
- items:
- type: object
- properties:
- podSelector:
- type: object
- properties:
- matchExpressions:
- type: array
- items:
- type: object
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- type: array
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- namespaceSelector:
- type: object
- properties:
- matchExpressions:
- type: array
- items:
- type: object
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- type: array
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- externalEntitySelector:
- type: object
- properties:
- matchExpressions:
- type: array
- items:
- type: object
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- type: array
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- ipBlock:
- type: object
- properties:
- cidr:
- type: string
- format: cidr
- nodeSelector:
- type: object
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- name:
- type: string
- enableLogging:
- type: boolean
- egress:
- type: array
- items:
- type: object
- required:
- - action
- properties:
- appliedTo:
- type: array
- items:
- type: object
- # Ensure that rule AppliedTo does not allow NamespaceSelector/IPBlock field
- properties:
- podSelector:
- type: object
- properties:
- matchExpressions:
- type: array
- items:
- type: object
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- type: array
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- # Ensure that Action field allows only ALLOW, DROP and REJECT values
- action:
- type: string
- enum: ['Allow', 'Drop', 'Reject', 'Pass']
- ports:
- type: array
- items:
- type: object
- properties:
- # Ensure that Protocol field allows only TCP, UDP and SCTP values
- protocol:
- type: string
- enum: ['TCP', 'UDP', 'SCTP']
- port:
- x-kubernetes-int-or-string: true
- endPort:
- type: integer
- to:
- type: array
- items:
- type: object
- properties:
- podSelector:
- type: object
- properties:
- matchExpressions:
- type: array
- items:
- type: object
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- type: array
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- namespaceSelector:
- type: object
- properties:
- matchExpressions:
- type: array
- items:
- type: object
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- type: array
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- externalEntitySelector:
- type: object
- properties:
- matchExpressions:
- type: array
- items:
- type: object
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- type: array
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- ipBlock:
- type: object
- properties:
- cidr:
- type: string
- format: cidr
- fqdn:
- type: string
- nodeSelector:
- type: object
- properties:
- matchExpressions:
- items:
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- type: array
- type: object
- type: array
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- toServices:
- type: array
- items:
- type: object
- required:
- - name
- properties:
- name:
- type: string
- namespace:
- type: string
- name:
- type: string
- enableLogging:
- type: boolean
- status:
- type: object
- properties:
- phase:
- type: string
- observedGeneration:
- type: integer
- currentNodesRealized:
- type: integer
- desiredNodesRealized:
- type: integer
- subresources:
- status: {}
- scope: Namespaced
- names:
- plural: networkpolicies
- singular: networkpolicy
- kind: NetworkPolicy
- shortNames:
- - anp
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- name: externalentities.crd.antrea.io
-spec:
- group: crd.antrea.io
- versions:
- - name: v1alpha2
- served: true
- storage: true
- schema:
- openAPIV3Schema:
- type: object
- properties:
- spec:
- type: object
- properties:
- endpoints:
- type: array
- items:
- type: object
- properties:
- ip:
- type: string
- oneOf:
- - format: ipv4
- - format: ipv6
- name:
- type: string
- ports:
- type: array
- items:
- type: object
- properties:
- protocol:
- type: string
- enum: ['TCP', 'UDP', 'SCTP']
- port:
- x-kubernetes-int-or-string: true
- name:
- type: string
- externalNode:
- type: string
- - name: v1alpha1
- served: false
- storage: false
- schema:
- openAPIV3Schema:
- type: object
- scope: Namespaced
- names:
- plural: externalentities
- singular: externalentity
- kind: ExternalEntity
- shortNames:
- - ee
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- name: clustergroups.crd.antrea.io
-spec:
- group: crd.antrea.io
- versions:
- - name: v1alpha2
- served: true
- storage: false
- schema:
- openAPIV3Schema:
- type: object
- properties:
- spec:
- type: object
- properties:
- childGroups:
- type: array
- items:
- type: string
- podSelector:
- type: object
- properties:
- matchExpressions:
- type: array
- items:
- type: object
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- type: array
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- namespaceSelector:
- type: object
- properties:
- matchExpressions:
- type: array
- items:
- type: object
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- type: array
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- externalEntitySelector:
- type: object
- properties:
- matchExpressions:
- type: array
- items:
- type: object
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- type: array
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- ipBlock:
- type: object
- properties:
- cidr:
- type: string
- format: cidr
- ipBlocks:
- type: array
- items:
- type: object
- properties:
- cidr:
- type: string
- format: cidr
- serviceReference:
- type: object
- properties:
- name:
- type: string
- namespace:
- type: string
- status:
- type: object
- properties:
- conditions:
- type: array
- items:
- type: object
- properties:
- type:
- type: string
- status:
- type: string
- lastTransitionTime:
- type: string
- - name: v1alpha3
- served: true
- storage: true
- schema:
- openAPIV3Schema:
- type: object
- properties:
- spec:
- type: object
- properties:
- childGroups:
- type: array
- items:
- type: string
- podSelector:
- type: object
- properties:
- matchExpressions:
- type: array
- items:
- type: object
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- type: array
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- namespaceSelector:
- type: object
- properties:
- matchExpressions:
- type: array
- items:
- type: object
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- type: array
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- externalEntitySelector:
- type: object
- properties:
- matchExpressions:
- type: array
- items:
- type: object
- properties:
- key:
- type: string
- operator:
- enum:
- - In
- - NotIn
- - Exists
- - DoesNotExist
- type: string
- values:
- type: array
- items:
- type: string
- pattern: "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$"
- matchLabels:
- x-kubernetes-preserve-unknown-fields: true
- ipBlocks:
- type: array
- items:
- type: object
- properties:
- cidr:
- type: string
- format: cidr
- serviceReference:
- type: object
- properties:
- name:
- type: string
- namespace:
- type: string
- status:
- type: object
- properties:
- conditions:
- type: array
- items:
- type: object
- properties:
- type:
- type: string
- status:
- type: string
- lastTransitionTime:
- type: string
- subresources:
- status: {}
- conversion:
- strategy: Webhook
- webhook:
- conversionReviewVersions: ["v1", "v1beta1"]
- clientConfig:
- service:
- name: "antrea"
- namespace: "kube-system"
- path: "/convert/clustergroup"
- scope: Cluster
- names:
- plural: clustergroups
- singular: clustergroup
- kind: ClusterGroup
- shortNames:
- - cg
----
diff --git a/build/yamls/base/kustomization.yml b/build/yamls/base/kustomization.yml
deleted file mode 100644
index 10bdbae589e..00000000000
--- a/build/yamls/base/kustomization.yml
+++ /dev/null
@@ -1,31 +0,0 @@
-resources:
-- crds.yml
-- crds-rbac.yml
-- antctl.yml
-- controller-rbac.yml
-- controller.yml
-- agent-rbac.yml
-- agent.yml
-- cluster-identity-reader.yml
-configMapGenerator:
-- files:
- - conf/antrea-controller.conf
- - conf/antrea-agent.conf
- - conf/antrea-cni.conflist
- name: antrea-config
-commonLabels:
- app: antrea
-namespace: kube-system
- # Only a single active instance is supported for now.
-replicas:
-- count: 1
- name: antrea-controller
-vars:
- - name: ANTREA_CONFIG_MAP_NAME
- objref:
- kind: ConfigMap
- name: antrea-config
- apiVersion: v1
-
-apiVersion: kustomize.config.k8s.io/v1beta1
-kind: Kustomization
diff --git a/build/yamls/chart-values/antrea-aks.yml b/build/yamls/chart-values/antrea-aks.yml
new file mode 100644
index 00000000000..1bb20cea215
--- /dev/null
+++ b/build/yamls/chart-values/antrea-aks.yml
@@ -0,0 +1,3 @@
+trafficEncapMode: "networkPolicyOnly"
+agent:
+ dnsPolicy: "ClusterFirst"
diff --git a/build/yamls/chart-values/antrea-eks.yml b/build/yamls/chart-values/antrea-eks.yml
new file mode 100644
index 00000000000..cc97b5b7462
--- /dev/null
+++ b/build/yamls/chart-values/antrea-eks.yml
@@ -0,0 +1,7 @@
+trafficEncapMode: "networkPolicyOnly"
+agent:
+ antreaAgent:
+ extraEnv:
+ # Antrea Agent needs to be aware that it is being used in EKS, as
+ # additional iptables rules may have to be installed.
+ ANTREA_CLOUD_EKS: "true"
diff --git a/build/yamls/chart-values/antrea-gke.yml b/build/yamls/chart-values/antrea-gke.yml
new file mode 100644
index 00000000000..9944593cc16
--- /dev/null
+++ b/build/yamls/chart-values/antrea-gke.yml
@@ -0,0 +1,3 @@
+trafficEncapMode: "noEncap"
+cni:
+ hostBinPath: "/home/kubernetes/bin"
diff --git a/build/yamls/chart-values/antrea-ipsec.yml b/build/yamls/chart-values/antrea-ipsec.yml
new file mode 100644
index 00000000000..d6770ea44a7
--- /dev/null
+++ b/build/yamls/chart-values/antrea-ipsec.yml
@@ -0,0 +1,3 @@
+trafficEncryptionMode: "ipsec"
+# change the tunnel type to GRE which works better with IPsec encryption than other types.
+tunnelType: "gre"
diff --git a/build/yamls/chart-values/antrea.yml b/build/yamls/chart-values/antrea.yml
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/build/yamls/clickhouse-operator-install-bundle.yml b/build/yamls/clickhouse-operator-install-bundle.yml
index 7d7a6fee28f..1b677e90cda 100644
--- a/build/yamls/clickhouse-operator-install-bundle.yml
+++ b/build/yamls/clickhouse-operator-install-bundle.yml
@@ -3487,7 +3487,7 @@ data:
"containers" : [
{
"name": "clickhouse",
- "image": "projects.registry.vmware.com/antrea/flow-visibility-clickhouse-server:21.3",
+ "image": "projects.registry.vmware.com/antrea/flow-visibility-clickhouse-server:21.11",
"ports": [
{
"name": "http",
diff --git a/build/yamls/elk-flow-collector/elk-flow-collector.yml b/build/yamls/elk-flow-collector/elk-flow-collector.yml
deleted file mode 100644
index 9fa8cd3b11d..00000000000
--- a/build/yamls/elk-flow-collector/elk-flow-collector.yml
+++ /dev/null
@@ -1,277 +0,0 @@
-apiVersion: storage.k8s.io/v1
-kind: StorageClass
-metadata:
- name: elastic-storage
-provisioner: kubernetes.io/no-provisioner
-volumeBindingMode: Immediate
-reclaimPolicy: Delete
-allowVolumeExpansion: True
----
-apiVersion: v1
-kind: PersistentVolumeClaim
-metadata:
- name: elasticsearch-pvc
-spec:
- storageClassName: elastic-storage
- accessModes:
- - ReadWriteOnce
- resources:
- requests:
- storage: 2Gi
----
-apiVersion: v1
-kind: PersistentVolume
-metadata:
- name: elasticsearch-pv
-spec:
- storageClassName: elastic-storage
- capacity:
- storage: 2Gi
- accessModes:
- - ReadWriteOnce
- hostPath:
- path: "/data/elasticsearch/"
----
-apiVersion: v1
-kind: Service
-metadata:
- name: elasticsearch
- labels:
- app: elasticsearch
-spec:
- selector:
- app: elasticsearch
- ports:
- - port: 9200
- targetPort: 9200
----
-apiVersion: apps/v1
-kind: StatefulSet
-metadata:
- name: elasticsearch
- labels:
- app: elasticsearch
-spec:
- selector:
- matchLabels:
- app: elasticsearch
- serviceName: elasticsearch
- replicas: 1
- template:
- metadata:
- labels:
- app: elasticsearch
- spec:
- initContainers:
- - name: init-sysctl
- image: busybox:1.27.2
- command:
- - sysctl
- - -w
- - vm.max_map_count=262144
- securityContext:
- privileged: true
- containers:
- - name: es-data
- image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.8.0
- env:
- - name: ES_JAVA_OPTS
- value: "-Xms512m -Xmx1g"
- - name: cluster.name
- value: "elk-flow-collector"
- - name: bootstrap.memory_lock
- value: "false"
- - name: network.host
- valueFrom:
- fieldRef:
- fieldPath: status.podIP
- - name: http.port
- value: "9200"
- - name: discovery.type
- value: "single-node"
- - name: indices.query.bool.max_clause_count
- value: "8192"
- - name: search.max_buckets
- value: "100000"
- - name: action.destructive_requires_name
- value: "true"
- ports:
- - containerPort: 9200
- name: http
- - containerPort: 9300
- name: transport
- livenessProbe:
- tcpSocket:
- port: transport
- initialDelaySeconds: 90
- periodSeconds: 10
- readinessProbe:
- httpGet:
- path: /_cluster/health
- port: http
- initialDelaySeconds: 90
- timeoutSeconds: 20
- volumeMounts:
- - name: es-data
- mountPath: /data
- nodeSelector:
- kubernetes.io/os: linux
- kubernetes.io/arch: amd64
- volumes:
- - name: es-data
- persistentVolumeClaim:
- claimName: elasticsearch-pvc
----
-apiVersion: v1
-kind: Service
-metadata:
- name: kibana
- labels:
- app: kibana
-spec:
- type: NodePort
- selector:
- app: kibana
- ports:
- - port: 5601
- targetPort: 5601
- nodePort: 30007
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: kibana
- labels:
- app: kibana
-spec:
- replicas: 1
- selector:
- matchLabels:
- app: kibana
- template:
- metadata:
- labels:
- app: kibana
- spec:
- containers:
- - name: kibana
- image: docker.elastic.co/kibana/kibana-oss:7.8.0
- env:
- - name: action.destructive_requires_name
- value: "true"
- - name: SERVER_HOST
- valueFrom:
- fieldRef:
- fieldPath: status.podIP
- - name: SERVER_PORT
- value: "5601"
- - name: ELASTICSEARCH_URL
- value: "http://elasticsearch:9200"
- - name: KIBANA_DEFAULTAPPID
- value: "dashboard/3b331b30-b987-11ea-b16e-fb06687c3589"
- - name: LOGGING_QUIET
- value: "true"
- - name: KIBANA_AUTOCOMPLETETERMINATEAFTER
- value: "100000"
- ports:
- - containerPort: 5601
- name: http
- nodeSelector:
- kubernetes.io/os: linux
- kubernetes.io/arch: amd64
----
-apiVersion: v1
-kind: Service
-metadata:
- name: logstash
- labels:
- app: logstash
-spec:
- selector:
- app: logstash
- ports:
- - port: 4736
- targetPort: 4736
- protocol: TCP
- name: tcp-json
- - port: 4736
- targetPort: 4736
- protocol: UDP
- name: udp-json
- - port: 4739
- targetPort: 4739
- protocol: TCP
- name: tcp-ipfix
- - port: 4739
- targetPort: 4739
- protocol: UDP
- name: udp-ipfix
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: logstash
- labels:
- app: logstash
-spec:
- replicas: 1
- selector:
- matchLabels:
- app: logstash
- template:
- metadata:
- labels:
- app: logstash
- spec:
- containers:
- - name: logstash
- image: docker.elastic.co/logstash/logstash-oss:7.8.0
- env:
- - name: POD_IP
- valueFrom:
- fieldRef:
- fieldPath: status.podIP
- volumeMounts:
- - name: logstash-definition-volume
- mountPath: /usr/share/logstash/definitions
- - name: config-volume
- mountPath: /usr/share/logstash/config
- - name: logstash-pipeline-volume
- mountPath: /usr/share/logstash/pipeline
- ports:
- - containerPort: 4736
- protocol: TCP
- name: tcp-json
- - containerPort: 4736
- protocol: UDP
- name: udp-json
- - containerPort: 4739
- protocol: TCP
- name: tcp-ipfix
- - containerPort: 4739
- protocol: UDP
- name: udp-ipfix
- nodeSelector:
- kubernetes.io/os: linux
- kubernetes.io/arch: amd64
- volumes:
- - name: logstash-definition-volume
- configMap:
- name: logstash-configmap
- items:
- - key: ipfix.yml
- path: ipfix.yml
- - name: config-volume
- configMap:
- name: logstash-configmap
- items:
- - key: logstash.yml
- path: logstash.yml
- - key: filter.rb
- path: filter.rb
- - name: logstash-pipeline-volume
- configMap:
- name: logstash-configmap
- items:
- - key: logstash.conf
- path: logstash.conf
diff --git a/build/yamls/elk-flow-collector/kibana.ndjson b/build/yamls/elk-flow-collector/kibana.ndjson
deleted file mode 100644
index 310d3e3decd..00000000000
--- a/build/yamls/elk-flow-collector/kibana.ndjson
+++ /dev/null
@@ -1,70 +0,0 @@
-{"attributes":{"fields":"[{\"name\":\"@timestamp\",\"type\":\"date\",\"esTypes\":[\"date\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"@version\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"@version.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"@version\"}}},{\"name\":\"_id\",\"type\":\"string\",\"esTypes\":[\"_id\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"_index\",\"type\":\"string\",\"esTypes\":[\"_index\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_source\",\"type\":\"_source\",\"esTypes\":[\"_source\"],\"count\":0,\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_type\",\"type\":\"string\",\"esTypes\":[\"_type\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"host\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"host.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"host\"}}},{\"name\":\"ipfix.bytes\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.destinationClusterIPv4\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.destinationClusterIPv4.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.destinationClusterIPv4\"}}},{\"name\":\"ipfix.destinationIP\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.destinationIP.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.destinationIP\"}}},{\"name\":\"ipfix.destinationIPv4Address\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.destinationIPv4Address.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.destinationIPv4Address\"}}},{\"name\":\"ipfix.destinationNodeName\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.destinationNodeName.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.destinationNodeName\"}}},{\"name\":\"ipfix.destinationPodLabels\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.destinationPodLabels.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.destinationPodLabels\"}}},{\"name\":\"ipfix.destinationPodName\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.destinationPodName.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.destinationPodName\"}}},{\"name\":\"ipfix.destinationPodNamespace\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.destinationPodNamespace.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.destinationPodNamespace\"}}},{\"name\":\"ipfix.destinationServicePort\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.destinationServicePortName\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.destinationServicePortName.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.destinationServicePortName\"}}},{\"name\":\"ipfix.destinationTransportPort\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.egressNetworkPolicyName\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.egressNetworkPolicyName.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.egressNetworkPolicyName\"}}},{\"name\":\"ipfix.egressNetworkPolicyNamespace\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.egressNetworkPolicyNamespace.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.egressNetworkPolicyNamespace\"}}},{\"name\":\"ipfix.egressNetworkPolicyRuleAction\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.egressNetworkPolicyRuleActionStr\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.egressNetworkPolicyRuleActionStr.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.egressNetworkPolicyRuleActionStr\"}}},{\"name\":\"ipfix.egressNetworkPolicyRuleName\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.egressNetworkPolicyRuleName.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.egressNetworkPolicyRuleName\"}}},{\"name\":\"ipfix.egressNetworkPolicyType\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.flowEndReason\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.flowEndSeconds\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.flowKey\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.flowKey.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.flowKey\"}}},{\"name\":\"ipfix.flowKeyPodToExternal\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.flowKeyPodToExternal.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.flowKeyPodToExternal\"}}},{\"name\":\"ipfix.flowKeyPodToPod\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.flowKeyPodToPod.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.flowKeyPodToPod\"}}},{\"name\":\"ipfix.flowKeyPodToService\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.flowKeyPodToService.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.flowKeyPodToService\"}}},{\"name\":\"ipfix.flowStartSeconds\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.flowType\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.flowTypeStr\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.flowTypeStr.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.flowTypeStr\"}}},{\"name\":\"ipfix.ingressNetworkPolicyName\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.ingressNetworkPolicyName.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.ingressNetworkPolicyName\"}}},{\"name\":\"ipfix.ingressNetworkPolicyNamespace\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.ingressNetworkPolicyNamespace.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.ingressNetworkPolicyNamespace\"}}},{\"name\":\"ipfix.ingressNetworkPolicyRuleAction\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.ingressNetworkPolicyRuleActionStr\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.ingressNetworkPolicyRuleActionStr.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.ingressNetworkPolicyRuleActionStr\"}}},{\"name\":\"ipfix.ingressNetworkPolicyRuleName\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.ingressNetworkPolicyRuleName.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.ingressNetworkPolicyRuleName\"}}},{\"name\":\"ipfix.ingressNetworkPolicyType\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.octetDeltaCount\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.octetDeltaCountFromDestinationNode\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.octetDeltaCountFromSourceNode\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.octetTotalCount\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.octetTotalCountFromDestinationNode\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.octetTotalCountFromSourceNode\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.packetDeltaCount\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.packetDeltaCountFromDestinationNode\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.packetDeltaCountFromSourceNode\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.packetTotalCount\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.packetTotalCountFromDestinationNode\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.packetTotalCountFromSourceNode\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.packets\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.protocolIdentifier\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.protocolIdentifier.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.protocolIdentifier\"}}},{\"name\":\"ipfix.reverseOctetDeltaCount\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.reverseOctetDeltaCountFromDestinationNode\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.reverseOctetDeltaCountFromSourceNode\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.reverseOctetTotalCount\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.reverseOctetTotalCountFromDestinationNode\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.reverseOctetTotalCountFromSourceNode\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.reversePacketDeltaCount\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.reversePacketDeltaCountFromDestinationNode\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.reversePacketDeltaCountFromSourceNode\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.reversePacketTotalCount\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.reversePacketTotalCountFromDestinationNode\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.reversePacketTotalCountFromSourceNode\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.reverseThroughput\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.sourceIP\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.sourceIP.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.sourceIP\"}}},{\"name\":\"ipfix.sourceIPv4Address\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.sourceIPv4Address.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.sourceIPv4Address\"}}},{\"name\":\"ipfix.sourceNodeName\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.sourceNodeName.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.sourceNodeName\"}}},{\"name\":\"ipfix.sourcePodLabels\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.sourcePodLabels.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.sourcePodLabels\"}}},{\"name\":\"ipfix.sourcePodName\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.sourcePodName.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.sourcePodName\"}}},{\"name\":\"ipfix.sourcePodNamespace\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.sourcePodNamespace.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.sourcePodNamespace\"}}},{\"name\":\"ipfix.sourceTransportPort\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"ipfix.tcpState\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"ipfix.tcpState.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"ipfix.tcpState\"}}},{\"name\":\"ipfix.throughput\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"port\",\"type\":\"number\",\"esTypes\":[\"long\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"tags\",\"type\":\"string\",\"esTypes\":[\"text\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"tags.keyword\",\"type\":\"string\",\"esTypes\":[\"keyword\"],\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true,\"subType\":{\"multi\":{\"parent\":\"tags\"}}}]","timeFieldName":"@timestamp","title":"flow-*"},"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","migrationVersion":{"index-pattern":"7.6.0"},"references":[],"type":"index-pattern","updated_at":"2021-08-07T23:32:23.467Z","version":"Wzc2LDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"filter\":[]}"},"title":"Destination Pod Bytes","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"pie\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"sum\",\"schema\":\"metric\",\"params\":{\"field\":\"ipfix.bytes\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ipfix.destinationPodName.keyword\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":30,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Server\"}}],\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":true,\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100},\"dimensions\":{\"metric\":{\"accessor\":0,\"format\":{\"id\":\"number\"},\"params\":{},\"aggType\":\"count\"}}},\"title\":\"Destination Pod Bytes\"}"},"id":"051d3d60-b986-11ea-b16e-fb06687c3589","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzIsMV0="}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Aggregated Rx Mbps by Node Acting as Source","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"show_legend\":1,\"show_grid\":1,\"axis_min\":\"0\",\"filter\":\"\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false,\"index_pattern\":\"flow-*\",\"interval\":\"1m\",\"time_field\":\"ipfix.flowEndSeconds\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"rgba(144,201,227,1)\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"type\":\"sum\",\"field\":\"ipfix.reverseThroughput\"},{\"script\":\"params.bytes * 8 \",\"id\":\"dd0b81d0-b9a6-11ea-9740-552c943910e4\",\"type\":\"calculation\",\"variables\":[{\"id\":\"e1f87e50-b9a6-11ea-9740-552c943910e4\",\"name\":\"bytes\",\"field\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\"}]}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":\"2\",\"point_size\":\"0\",\"fill\":\"0.6\",\"stacked\":\"none\",\"split_color_mode\":\"rainbow\",\"label\":\"Bytes\",\"terms_field\":\"ipfix.sourceNodeName.keyword\",\"terms_size\":\"30\",\"terms_order_by\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"value_template\":\"{{value}}its/s\",\"type\":\"timeseries\"}]},\"title\":\"Aggregated Rx Mbps by Node Acting as Source\"}"},"id":"089a7d70-cd33-11ea-8911-87da3aad0324","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzMsMV0="}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}"},"title":"Pod-to-External Traffic Reverse Cumulative Bytes","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"vega\",\"aggs\":[],\"params\":{\"spec\":\"{\\n \\\"$schema\\\": \\\"https://vega.github.io/schema/vega/v3.0.json\\\",\\n \\\"data\\\": [\\n {\\n \\\"name\\\": \\\"rawData\\\",\\n \\\"url\\\": {\\n \\\"%context%\\\": true,\\n \\\"%timefield%\\\": \\\"@timestamp\\\",\\n \\\"index\\\": \\\"flow-*\\\",\\n \\\"body\\\": {\\n \\\"size\\\": 0,\\n \\\"aggs\\\": {\\n \\\"table\\\": {\\n \\\"composite\\\": {\\n \\\"size\\\": 1000,\\n \\\"sources\\\": [\\n {\\\"stk1\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.sourcePodName.keyword\\\"}}},\\n {\\\"stk1ns\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.sourcePodNamespace.keyword\\\"}}},\\n {\\\"stk2\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.destinationIP.keyword\\\"}}},\\n {\\\"stk3\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.sourceIP.keyword\\\"}}},\\n {\\\"stk4\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.flowTypeStr.keyword\\\"}}},\\n ]\\n },\\n \\t\\t\\t\\\"aggs\\\": {\\n \\t\\t\\t\\t\\\"bytes\\\": {\\n \\t\\t\\t\\t\\t\\\"sum\\\": {\\n \\t\\t\\t\\t\\t\\t\\\"field\\\": \\\"ipfix.reverseOctetDeltaCountFromSourceNode\\\"\\n \\t\\t\\t\\t\\t}\\n \\t\\t\\t\\t}\\n \\t\\t\\t}\\n }\\n }\\n }\\n },\\n \\\"format\\\": {\\\"property\\\": \\\"aggregations.table.buckets\\\"},\\n \\\"transform\\\": [\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk1ns +'/'+ datum.key.stk1\\\", \\\"as\\\": \\\"stk1s\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"(datum.key.stk1==''?datum.key.stk3:datum.stk1s)\\\", \\\"as\\\": \\\"stk1\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk2\\\", \\\"as\\\": \\\"stk2\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk3\\\", \\\"as\\\": \\\"stk3\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk4\\\", \\\"as\\\": \\\"stk4\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.bytes.value\\\", \\\"as\\\": \\\"size\\\"}\\n ]\\n },\\n {\\n \\\"name\\\": \\\"nodes\\\",\\n \\\"source\\\": \\\"rawData\\\",\\n \\\"transform\\\": [\\n {\\n \\\"type\\\": \\\"filter\\\",\\n \\\"expr\\\": \\\"datum.stk4 == 'To External' && !groupSelector || groupSelector.stk1 == datum.stk1 || groupSelector.stk2 == datum.stk2\\\"\\n },\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.stk1+datum.stk2\\\", \\\"as\\\": \\\"key\\\"},\\n {\\\"type\\\": \\\"fold\\\", \\\"fields\\\": [\\\"stk1\\\", \\\"stk2\\\"], \\\"as\\\": [\\\"stack\\\", \\\"grpId\\\"]},\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"datum.stack == 'stk1' ? datum.stk1+datum.stk2 : datum.stk2+datum.stk1\\\",\\n \\\"as\\\": \\\"sortField\\\"\\n },\\n {\\n \\\"type\\\": \\\"stack\\\",\\n \\\"groupby\\\": [\\\"stack\\\"],\\n \\\"sort\\\": {\\\"field\\\": \\\"sortField\\\", \\\"order\\\": \\\"descending\\\"},\\n \\\"field\\\": \\\"size\\\"\\n },\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"(datum.y0+datum.y1)/2\\\", \\\"as\\\": \\\"yc\\\"}\\n ]\\n },\\n {\\n \\\"name\\\": \\\"groups\\\",\\n \\\"source\\\": \\\"nodes\\\",\\n \\\"transform\\\": [\\n {\\n \\\"type\\\": \\\"aggregate\\\",\\n \\\"groupby\\\": [\\\"stack\\\", \\\"grpId\\\"],\\n \\\"fields\\\": [\\\"size\\\"],\\n \\\"ops\\\": [\\\"sum\\\"],\\n \\\"as\\\": [\\\"total\\\"]\\n },\\n {\\n \\\"type\\\": \\\"stack\\\",\\n \\\"groupby\\\": [\\\"stack\\\"],\\n \\\"sort\\\": {\\\"field\\\": \\\"grpId\\\", \\\"order\\\": \\\"descending\\\"},\\n \\\"field\\\": \\\"total\\\"\\n },\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"scale('y', datum.y0)\\\", \\\"as\\\": \\\"scaledY0\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"scale('y', datum.y1)\\\", \\\"as\\\": \\\"scaledY1\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.stack == 'stk1'\\\", \\\"as\\\": \\\"rightLabel\\\"},\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"datum.total/domain('y')[1]\\\",\\n \\\"as\\\": \\\"percentage\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"destinationNodes\\\",\\n \\\"source\\\": \\\"nodes\\\",\\n \\\"transform\\\": [{\\\"type\\\": \\\"filter\\\", \\\"expr\\\": \\\"datum.stack == 'stk2'\\\"}]\\n },\\n {\\n \\\"name\\\": \\\"edges\\\",\\n \\\"source\\\": \\\"nodes\\\",\\n \\\"transform\\\": [\\n {\\\"type\\\": \\\"filter\\\", \\\"expr\\\": \\\"datum.stack == 'stk1'\\\"},\\n {\\n \\\"type\\\": \\\"lookup\\\",\\n \\\"from\\\": \\\"destinationNodes\\\",\\n \\\"key\\\": \\\"key\\\",\\n \\\"fields\\\": [\\\"key\\\"],\\n \\\"as\\\": [\\\"target\\\"]\\n },\\n {\\n \\\"type\\\": \\\"linkpath\\\",\\n \\\"orient\\\": \\\"horizontal\\\",\\n \\\"shape\\\": \\\"diagonal\\\",\\n \\\"sourceY\\\": {\\\"expr\\\": \\\"scale('y', datum.yc)\\\"},\\n \\\"sourceX\\\": {\\\"expr\\\": \\\"scale('x', 'stk1') + bandwidth('x')\\\"},\\n \\\"targetY\\\": {\\\"expr\\\": \\\"scale('y', datum.target.yc)\\\"},\\n \\\"targetX\\\": {\\\"expr\\\": \\\"scale('x', 'stk2')\\\"}\\n },\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"range('y')[0]-scale('y', datum.size)\\\",\\n \\\"as\\\": \\\"strokeWidth\\\"\\n },\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"datum.size/domain('y')[1]\\\",\\n \\\"as\\\": \\\"percentage\\\"\\n }\\n ]\\n }\\n ],\\n \\\"scales\\\": [\\n {\\n \\\"name\\\": \\\"x\\\",\\n \\\"type\\\": \\\"band\\\",\\n \\\"range\\\": \\\"width\\\",\\n \\\"domain\\\": [\\\"stk1\\\", \\\"stk2\\\"],\\n \\\"paddingOuter\\\": 0.01,\\n \\\"paddingInner\\\": 0.98\\n },\\n {\\n \\\"name\\\": \\\"y\\\",\\n \\\"type\\\": \\\"linear\\\",\\n \\\"range\\\": \\\"height\\\",\\n \\\"domain\\\": {\\\"data\\\": \\\"nodes\\\", \\\"field\\\": \\\"y1\\\"}\\n },\\n {\\n \\\"name\\\": \\\"color\\\",\\n \\\"type\\\": \\\"ordinal\\\",\\n \\\"range\\\": \\\"category\\\",\\n \\\"domain\\\": {\\\"data\\\": \\\"rawData\\\", \\\"fields\\\": [\\\"stk1\\\",\\\"stk2\\\"]}\\n },\\n {\\n \\\"name\\\": \\\"stackNames\\\",\\n \\\"type\\\": \\\"ordinal\\\",\\n \\\"range\\\": [\\\"Source Pod\\\", \\\"Destination IP\\\"],\\n \\\"domain\\\": [\\\"stk1\\\", \\\"stk2\\\"]\\n }\\n ],\\n \\\"axes\\\": [\\n {\\n \\\"orient\\\": \\\"bottom\\\",\\n \\\"scale\\\": \\\"x\\\",\\n \\\"labelColor\\\": {\\n \\\"value\\\": \\\"#888888\\\"\\n },\\n \\\"encode\\\": {\\n \\\"labels\\\": {\\n \\\"update\\\": {\\n \\\"text\\\": {\\\"scale\\\": \\\"stackNames\\\", \\\"field\\\": \\\"value\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 14}\\n }\\n }\\n }\\n },\\n {\\n \\\"orient\\\": \\\"left\\\",\\n \\\"scale\\\": \\\"y\\\",\\n \\\"labelColor\\\": {\\n \\\"value\\\": \\\"#888888\\\"\\n },\\n \\\"encode\\\": {\\n \\\"labels\\\": {\\n \\\"update\\\": {\\n \\\"text\\\": {\\\"signal\\\": \\\"format(datum.value, '.2s') + 'B'\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 12}\\n }\\n }\\n }\\n }\\n ],\\n \\\"marks\\\": [\\n {\\n \\\"type\\\": \\\"path\\\",\\n \\\"name\\\": \\\"edgeMark\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"edges\\\"},\\n \\\"clip\\\": true,\\n \\\"encode\\\": {\\n \\\"update\\\": {\\n \\\"stroke\\\": [\\n {\\n \\\"test\\\": \\\"groupSelector && groupSelector.stack=='stk1'\\\",\\n \\\"scale\\\": \\\"color\\\",\\n \\\"field\\\": \\\"stk2\\\"\\n },\\n {\\\"scale\\\": \\\"color\\\", \\\"field\\\": \\\"stk1\\\"}\\n ],\\n \\\"strokeWidth\\\": {\\\"field\\\": \\\"strokeWidth\\\"},\\n \\\"path\\\": {\\\"field\\\": \\\"path\\\"},\\n \\\"strokeOpacity\\\": {\\n \\\"signal\\\": \\\"!groupSelector && (groupHover.stk1 == datum.stk1 || groupHover.stk2 == datum.stk2) ? 0.75 : 0.3\\\"\\n },\\n \\\"zindex\\\": {\\n \\\"signal\\\": \\\"!groupSelector && (groupHover.stk1 == datum.stk1 || groupHover.stk2 == datum.stk2) ? 1 : 0\\\"\\n },\\n \\\"tooltip\\\": {\\n \\\"signal\\\": \\\"{'title': datum.stk1 + ' → ' + datum.stk2 + ' ' + format(datum.size, '.2s') + 'B (' + format(datum.percentage, '.1%') + ')', 'IP Address': datum.stk3 + ' → ' + datum.stk2}\\\"\\n }\\n },\\n \\\"hover\\\": {\\\"strokeOpacity\\\": {\\\"value\\\": 0.75}}\\n }\\n },\\n {\\n \\\"type\\\": \\\"rect\\\",\\n \\\"name\\\": \\\"groupMark\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"groups\\\"},\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"fill\\\": {\\\"scale\\\": \\\"color\\\", \\\"field\\\": \\\"grpId\\\"},\\n \\\"width\\\": {\\\"scale\\\": \\\"x\\\", \\\"band\\\": 1}\\n },\\n \\\"update\\\": {\\n \\\"x\\\": {\\\"scale\\\": \\\"x\\\", \\\"field\\\": \\\"stack\\\"},\\n \\\"y\\\": {\\\"field\\\": \\\"scaledY0\\\"},\\n \\\"y2\\\": {\\\"field\\\": \\\"scaledY1\\\"},\\n \\\"fillOpacity\\\": {\\\"value\\\": 0.7},\\n \\\"tooltip\\\": {\\n \\\"signal\\\": \\\"datum.grpId + ' ' + format(datum.total, '.2s') + 'B (' + format(datum.percentage, '.1%') + ')'\\\"\\n }\\n },\\n \\\"hover\\\": {\\\"fillOpacity\\\": {\\\"value\\\": 1}}\\n }\\n },\\n {\\n \\\"type\\\": \\\"text\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"groups\\\"},\\n \\\"interactive\\\": false,\\n \\\"encode\\\": {\\n \\\"update\\\": {\\n \\\"x\\\": {\\n \\\"signal\\\": \\\"scale('x', datum.stack) + (datum.rightLabel ? bandwidth('x') + 8 : -8)\\\"\\n },\\n \\\"yc\\\": {\\\"signal\\\": \\\"(datum.scaledY0 + datum.scaledY1)/2\\\"},\\n \\\"align\\\": {\\\"signal\\\": \\\"datum.rightLabel ? 'left' : 'right'\\\"},\\n \\\"baseline\\\": {\\\"value\\\": \\\"middle\\\"},\\n \\\"fontWeight\\\": {\\\"value\\\": \\\"bold\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 12},\\n \\\"text\\\": {\\n \\\"signal\\\": \\\"abs(datum.scaledY0-datum.scaledY1) > 10 ? datum.grpId : ''\\\"\\n }\\n }\\n }\\n },\\n {\\n \\\"type\\\": \\\"group\\\",\\n \\\"data\\\": [\\n {\\n \\\"name\\\": \\\"dataForShowAll\\\",\\n \\\"values\\\": [{}],\\n \\\"transform\\\": [{\\\"type\\\": \\\"filter\\\", \\\"expr\\\": \\\"groupSelector\\\"}]\\n }\\n ],\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"xc\\\": {\\\"signal\\\": \\\"width/2\\\"},\\n \\\"y\\\": {\\\"value\\\": 30},\\n \\\"width\\\": {\\\"value\\\": 100},\\n \\\"height\\\": {\\\"value\\\": 36}\\n }\\n },\\n \\\"marks\\\": [\\n {\\n \\\"type\\\": \\\"group\\\",\\n \\\"name\\\": \\\"groupReset\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"dataForShowAll\\\"},\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"cornerRadius\\\": {\\\"value\\\": 3.5},\\n \\\"fill\\\": {\\\"value\\\": \\\"#666666\\\"},\\n \\\"height\\\": {\\\"field\\\": {\\\"group\\\": \\\"height\\\"}},\\n \\\"width\\\": {\\\"field\\\": {\\\"group\\\": \\\"width\\\"}}\\n },\\n \\\"update\\\": {\\\"opacity\\\": {\\\"value\\\": 1}},\\n \\\"hover\\\": {\\\"fill\\\": {\\\"value\\\": \\\"#444444\\\"}}\\n },\\n \\\"marks\\\": [\\n {\\n \\\"type\\\": \\\"text\\\",\\n \\\"interactive\\\": false,\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"xc\\\": {\\\"field\\\": {\\\"group\\\": \\\"width\\\"}, \\\"mult\\\": 0.5},\\n \\\"yc\\\": {\\\"field\\\": {\\\"group\\\": \\\"height\\\"}, \\\"mult\\\": 0.5, \\\"offset\\\": 1},\\n \\\"align\\\": {\\\"value\\\": \\\"center\\\"},\\n \\\"baseline\\\": {\\\"value\\\": \\\"middle\\\"},\\n \\\"text\\\": {\\\"value\\\": \\\"Show All\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 14},\\n \\\"stroke\\\": {\\\"value\\\": \\\"#ecf0f1\\\"}\\n }\\n }\\n }\\n ]\\n }\\n ]\\n }\\n ],\\n \\\"signals\\\": [\\n {\\n \\\"name\\\": \\\"groupHover\\\",\\n \\\"value\\\": {},\\n \\\"on\\\": [\\n {\\n \\\"events\\\": \\\"@groupMark:mouseover\\\",\\n \\\"update\\\": \\\"{stk1:datum.stack=='stk1' && datum.grpId, stk2:datum.stack=='stk2' && datum.grpId}\\\"\\n },\\n {\\\"events\\\": \\\"mouseout\\\", \\\"update\\\": \\\"{}\\\"}\\n ]\\n },\\n {\\n \\\"name\\\": \\\"groupSelector\\\",\\n \\\"value\\\": false,\\n \\\"on\\\": [\\n {\\n \\\"events\\\": \\\"@groupMark:click!\\\",\\n \\\"update\\\": \\\"{stack:datum.stack, stk1:datum.stack=='stk1' && datum.grpId, stk2:datum.stack=='stk2' && datum.grpId}\\\"\\n },\\n {\\n \\\"events\\\": [\\n {\\\"type\\\": \\\"click\\\", \\\"markname\\\": \\\"groupReset\\\"},\\n {\\\"type\\\": \\\"dblclick\\\"}\\n ],\\n \\\"update\\\": \\\"false\\\"\\n }\\n ]\\n }\\n ]\\n}\"},\"title\":\"Pod-to-External Traffic Reverse Cumulative Bytes\"}"},"id":"0d0aac60-a93b-11eb-a7ef-5dcb53008c10","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzQsMV0="}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Aggregated Tx Mbps by Pod Acting as Source","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"show_legend\":1,\"show_grid\":1,\"axis_min\":\"0\",\"filter\":\"\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false,\"index_pattern\":\"flow-*\",\"interval\":\"1m\",\"time_field\":\"ipfix.flowEndSeconds\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"rgba(144,201,227,1)\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"type\":\"sum\",\"field\":\"ipfix.throughput\"},{\"script\":\"params.bytes * 8 \",\"id\":\"dd0b81d0-b9a6-11ea-9740-552c943910e4\",\"type\":\"calculation\",\"variables\":[{\"id\":\"e1f87e50-b9a6-11ea-9740-552c943910e4\",\"name\":\"bytes\",\"field\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\"}]}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":\"2\",\"point_size\":\"0\",\"fill\":\"0.6\",\"stacked\":\"none\",\"split_color_mode\":\"rainbow\",\"label\":\"Bytes\",\"terms_field\":\"ipfix.sourcePodName.keyword\",\"terms_size\":\"30\",\"terms_order_by\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"value_template\":\"{{value}}its/s\",\"type\":\"timeseries\"}]},\"title\":\"Aggregated Tx Mbps by Pod Acting as Source\"}"},"id":"114eba40-55d4-11e8-a695-171fb712da36","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzUsMV0="}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Reverse Cumulative Bandwidth by Pod-to-Service Flow","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"show_legend\":1,\"show_grid\":1,\"axis_min\":\"0\",\"filter\":\"\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false,\"index_pattern\":\"flow-*\",\"interval\":\"1m\",\"time_field\":\"ipfix.flowEndSeconds\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"rgba(144,201,227,1)\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"type\":\"sum\",\"field\":\"ipfix.reverseOctetTotalCountFromSourceNode\"},{\"script\":\"params.bytes * 8\",\"id\":\"dd0b81d0-b9a6-11ea-9740-552c943910e4\",\"type\":\"calculation\",\"variables\":[{\"id\":\"e1f87e50-b9a6-11ea-9740-552c943910e4\",\"name\":\"bytes\",\"field\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\"}]}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":\"0\",\"fill\":\"0.6\",\"stacked\":\"none\",\"split_color_mode\":\"rainbow\",\"label\":\"Bytes\",\"terms_field\":\"ipfix.flowKeyPodToService.keyword\",\"terms_size\":\"30\",\"terms_order_by\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"value_template\":\"{{value}}\",\"type\":\"timeseries\"}]},\"title\":\"Reverse Cumulative Bandwidth by Pod-to-Service Flow\"}"},"id":"19374b20-4eea-11eb-b841-6bf6243fda88","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzYsMV0="}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Pod-to-External Filter","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"input_control_vis\",\"aggs\":[],\"params\":{\"updateFiltersOnChange\":true,\"useTimeFilter\":true,\"pinFilters\":true,\"controls\":[{\"id\":\"1526108909005\",\"fieldName\":\"ipfix.sourcePodNamespace.keyword\",\"label\":\"Source Pod Namespace\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"size\":1000,\"order\":\"desc\",\"dynamicOptions\":false},\"indexPatternRefName\":\"control_0_index_pattern\"},{\"id\":\"1526107640219\",\"fieldName\":\"ipfix.sourcePodName.keyword\",\"label\":\"Source Pod Name\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"size\":1000,\"order\":\"desc\",\"dynamicOptions\":false},\"indexPatternRefName\":\"control_1_index_pattern\"},{\"id\":\"1594408631049\",\"fieldName\":\"ipfix.sourceNodeName.keyword\",\"parent\":\"\",\"label\":\"Source Pod Node\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":false,\"size\":1000,\"order\":\"desc\"},\"indexPatternRefName\":\"control_2_index_pattern\"},{\"id\":\"1526108883717\",\"fieldName\":\"ipfix.destinationIP.keyword\",\"label\":\"Destination IP\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"size\":1000,\"order\":\"desc\",\"dynamicOptions\":false},\"indexPatternRefName\":\"control_3_index_pattern\"},{\"id\":\"1609999080958\",\"parent\":\"\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":false,\"size\":1000,\"order\":\"desc\"},\"fieldName\":\"ipfix.flowKeyPodToExternal.keyword\",\"label\":\"Flow Key (Pod-to-External)\",\"indexPatternRefName\":\"control_4_index_pattern\"}]},\"title\":\"Pod-to-External Filter\"}"},"id":"1ec263c0-a93c-11eb-a7ef-5dcb53008c10","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_0_index_pattern","type":"index-pattern"},{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_1_index_pattern","type":"index-pattern"},{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_2_index_pattern","type":"index-pattern"},{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_3_index_pattern","type":"index-pattern"},{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_4_index_pattern","type":"index-pattern"}],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzcsMV0="}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}"},"title":"Rx Mbps by Pod-to-Service Flow","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"show_legend\":1,\"show_grid\":1,\"axis_min\":\"0\",\"filter\":\"\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false,\"index_pattern\":\"flow-*\",\"interval\":\"1m\",\"time_field\":\"ipfix.flowEndSeconds\",\"background_color_rules\":[{\"id\":\"4010d970-50b9-11eb-8f30-87baf4f5ad91\"}],\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"rgba(144,201,227,1)\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"type\":\"sum\",\"field\":\"ipfix.reverseThroughput\"},{\"script\":\"params.bytes * 8 \",\"id\":\"dd0b81d0-b9a6-11ea-9740-552c943910e4\",\"type\":\"calculation\",\"variables\":[{\"id\":\"e1f87e50-b9a6-11ea-9740-552c943910e4\",\"name\":\"bytes\",\"field\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\"}]}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":\"0\",\"fill\":\"0.6\",\"stacked\":\"none\",\"split_color_mode\":\"rainbow\",\"label\":\"Bytes\",\"terms_field\":\"ipfix.flowKeyPodToService.keyword\",\"terms_size\":\"30\",\"terms_order_by\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"value_template\":\"{{value}}it/s\",\"type\":\"timeseries\",\"terms_exclude\":\"\",\"filter\":{\"query\":\"\",\"language\":\"kuery\"}}]},\"title\":\"Rx Mbps by Pod-to-Service Flow\"}"},"id":"20dfae20-520b-11eb-8385-698d3cd613b0","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzgsMV0="}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}"},"title":"Node Reverse Cumulative Bytes","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"vega\",\"aggs\":[],\"params\":{\"spec\":\"{\\n \\\"$schema\\\": \\\"https://vega.github.io/schema/vega/v3.0.json\\\",\\n \\\"data\\\": [\\n {\\n \\\"name\\\": \\\"rawData\\\",\\n \\\"url\\\": {\\n \\\"%context%\\\": true,\\n \\\"%timefield%\\\": \\\"@timestamp\\\",\\n \\\"index\\\": \\\"flow-*\\\",\\n \\\"body\\\": {\\n \\\"size\\\": 0,\\n \\\"aggs\\\": {\\n \\\"table\\\": {\\n \\\"composite\\\": {\\n \\\"size\\\": 1000,\\n \\\"sources\\\": [\\n {\\\"stk1\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.sourceNodeName.keyword\\\"}}},\\n {\\\"stk2\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.destinationNodeName.keyword\\\"}}},\\n {\\\"stk3\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.sourceIP.keyword\\\"}}},\\n {\\\"stk4\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.destinationIP.keyword\\\"}}}\\n ]\\n },\\n \\t\\t\\t\\\"aggs\\\": {\\n \\t\\t\\t\\t\\\"bytes\\\": {\\n \\t\\t\\t\\t\\t\\\"sum\\\": {\\n \\t\\t\\t\\t\\t\\t\\\"field\\\": \\\"ipfix.reverseOctetDeltaCountFromSourceNode\\\"\\n \\t\\t\\t\\t\\t}\\n \\t\\t\\t\\t}\\n \\t\\t\\t}\\n }\\n }\\n }\\n },\\n \\\"format\\\": {\\\"property\\\": \\\"aggregations.table.buckets\\\"},\\n \\\"transform\\\": [\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"(datum.key.stk1==''?datum.key.stk3:datum.key.stk1)\\\", \\\"as\\\": \\\"stk1\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"(datum.key.stk2==''?datum.key.stk4:datum.key.stk2)\\\", \\\"as\\\": \\\"stk2\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk3\\\", \\\"as\\\": \\\"stk3\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk4\\\", \\\"as\\\": \\\"stk4\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.bytes.value\\\", \\\"as\\\": \\\"size\\\"}\\n ]\\n },\\n {\\n \\\"name\\\": \\\"nodes\\\",\\n \\\"source\\\": \\\"rawData\\\",\\n \\\"transform\\\": [\\n {\\n \\\"type\\\": \\\"filter\\\",\\n \\\"expr\\\": \\\"!groupSelector || groupSelector.stk1 == datum.stk1 || groupSelector.stk2 == datum.stk2\\\"\\n },\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.stk1+datum.stk2+datum.stk3+datum.stk4\\\", \\\"as\\\": \\\"key\\\"},\\n {\\\"type\\\": \\\"fold\\\", \\\"fields\\\": [\\\"stk1\\\", \\\"stk2\\\"], \\\"as\\\": [\\\"stack\\\", \\\"grpId\\\"]},\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"datum.stack == 'stk1' ? datum.stk1+datum.stk2 : datum.stk2+datum.stk1\\\",\\n \\\"as\\\": \\\"sortField\\\"\\n },\\n {\\n \\\"type\\\": \\\"stack\\\",\\n \\\"groupby\\\": [\\\"stack\\\"],\\n \\\"sort\\\": {\\\"field\\\": \\\"sortField\\\", \\\"order\\\": \\\"descending\\\"},\\n \\\"field\\\": \\\"size\\\"\\n },\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"(datum.y0+datum.y1)/2\\\", \\\"as\\\": \\\"yc\\\"}\\n ]\\n },\\n {\\n \\\"name\\\": \\\"groups\\\",\\n \\\"source\\\": \\\"nodes\\\",\\n \\\"transform\\\": [\\n {\\n \\\"type\\\": \\\"aggregate\\\",\\n \\\"groupby\\\": [\\\"stack\\\", \\\"grpId\\\"],\\n \\\"fields\\\": [\\\"size\\\"],\\n \\\"ops\\\": [\\\"sum\\\"],\\n \\\"as\\\": [\\\"total\\\"]\\n },\\n {\\n \\\"type\\\": \\\"stack\\\",\\n \\\"groupby\\\": [\\\"stack\\\"],\\n \\\"sort\\\": {\\\"field\\\": \\\"grpId\\\", \\\"order\\\": \\\"descending\\\"},\\n \\\"field\\\": \\\"total\\\"\\n },\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"scale('y', datum.y0)\\\", \\\"as\\\": \\\"scaledY0\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"scale('y', datum.y1)\\\", \\\"as\\\": \\\"scaledY1\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.stack == 'stk1'\\\", \\\"as\\\": \\\"rightLabel\\\"},\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"datum.total/domain('y')[1]\\\",\\n \\\"as\\\": \\\"percentage\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"destinationNodes\\\",\\n \\\"source\\\": \\\"nodes\\\",\\n \\\"transform\\\": [{\\\"type\\\": \\\"filter\\\", \\\"expr\\\": \\\"datum.stack == 'stk2'\\\"}]\\n },\\n {\\n \\\"name\\\": \\\"edges\\\",\\n \\\"source\\\": \\\"nodes\\\",\\n \\\"transform\\\": [\\n {\\\"type\\\": \\\"filter\\\", \\\"expr\\\": \\\"datum.stack == 'stk1'\\\"},\\n {\\n \\\"type\\\": \\\"lookup\\\",\\n \\\"from\\\": \\\"destinationNodes\\\",\\n \\\"key\\\": \\\"key\\\",\\n \\\"fields\\\": [\\\"key\\\"],\\n \\\"as\\\": [\\\"target\\\"]\\n },\\n {\\n \\\"type\\\": \\\"linkpath\\\",\\n \\\"orient\\\": \\\"horizontal\\\",\\n \\\"shape\\\": \\\"diagonal\\\",\\n \\\"sourceY\\\": {\\\"expr\\\": \\\"scale('y', datum.yc)\\\"},\\n \\\"sourceX\\\": {\\\"expr\\\": \\\"scale('x', 'stk1') + bandwidth('x')\\\"},\\n \\\"targetY\\\": {\\\"expr\\\": \\\"scale('y', datum.target.yc)\\\"},\\n \\\"targetX\\\": {\\\"expr\\\": \\\"scale('x', 'stk2')\\\"}\\n },\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"range('y')[0]-scale('y', datum.size)\\\",\\n \\\"as\\\": \\\"strokeWidth\\\"\\n },\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"datum.size/domain('y')[1]\\\",\\n \\\"as\\\": \\\"percentage\\\"\\n }\\n ]\\n }\\n ],\\n \\\"scales\\\": [\\n {\\n \\\"name\\\": \\\"x\\\",\\n \\\"type\\\": \\\"band\\\",\\n \\\"range\\\": \\\"width\\\",\\n \\\"domain\\\": [\\\"stk1\\\", \\\"stk2\\\"],\\n \\\"paddingOuter\\\": 0.01,\\n \\\"paddingInner\\\": 0.98\\n },\\n {\\n \\\"name\\\": \\\"y\\\",\\n \\\"type\\\": \\\"linear\\\",\\n \\\"range\\\": \\\"height\\\",\\n \\\"domain\\\": {\\\"data\\\": \\\"nodes\\\", \\\"field\\\": \\\"y1\\\"}\\n },\\n {\\n \\\"name\\\": \\\"color\\\",\\n \\\"type\\\": \\\"ordinal\\\",\\n \\\"range\\\": \\\"category\\\",\\n \\\"domain\\\": {\\\"data\\\": \\\"rawData\\\", \\\"fields\\\": [\\\"stk1\\\",\\\"stk2\\\"]}\\n },\\n {\\n \\\"name\\\": \\\"stackNames\\\",\\n \\\"type\\\": \\\"ordinal\\\",\\n \\\"range\\\": [\\\"Source\\\", \\\"Destination\\\"],\\n \\\"domain\\\": [\\\"stk1\\\", \\\"stk2\\\"]\\n }\\n ],\\n \\\"axes\\\": [\\n {\\n \\\"orient\\\": \\\"bottom\\\",\\n \\\"scale\\\": \\\"x\\\",\\n \\\"labelColor\\\": {\\n \\\"value\\\": \\\"#888888\\\"\\n },\\n \\\"encode\\\": {\\n \\\"labels\\\": {\\n \\\"update\\\": {\\n \\\"text\\\": {\\\"scale\\\": \\\"stackNames\\\", \\\"field\\\": \\\"value\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 14}\\n }\\n }\\n }\\n },\\n {\\n \\\"orient\\\": \\\"left\\\",\\n \\\"scale\\\": \\\"y\\\",\\n \\\"labelColor\\\": {\\n \\\"value\\\": \\\"#888888\\\"\\n },\\n \\\"encode\\\": {\\n \\\"labels\\\": {\\n \\\"update\\\": {\\n \\\"text\\\": {\\\"signal\\\": \\\"format(datum.value, '.2s') + 'B'\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 12}\\n }\\n }\\n }\\n }\\n ],\\n \\\"marks\\\": [\\n {\\n \\\"type\\\": \\\"path\\\",\\n \\\"name\\\": \\\"edgeMark\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"edges\\\"},\\n \\\"clip\\\": true,\\n \\\"encode\\\": {\\n \\\"update\\\": {\\n \\\"stroke\\\": [\\n {\\n \\\"test\\\": \\\"groupSelector && groupSelector.stack=='stk1'\\\",\\n \\\"scale\\\": \\\"color\\\",\\n \\\"field\\\": \\\"stk2\\\"\\n },\\n {\\\"scale\\\": \\\"color\\\", \\\"field\\\": \\\"stk1\\\"}\\n ],\\n \\\"strokeWidth\\\": {\\\"field\\\": \\\"strokeWidth\\\"},\\n \\\"path\\\": {\\\"field\\\": \\\"path\\\"},\\n \\\"strokeOpacity\\\": {\\n \\\"signal\\\": \\\"!groupSelector && (groupHover.stk1 == datum.stk1 || groupHover.stk2 == datum.stk2) ? 0.75 : 0.3\\\"\\n },\\n \\\"zindex\\\": {\\n \\\"signal\\\": \\\"!groupSelector && (groupHover.stk1 == datum.stk1 || groupHover.stk2 == datum.stk2) ? 1 : 0\\\"\\n },\\n \\\"tooltip\\\": {\\n \\\"signal\\\": \\\"{'title': datum.stk1 + ' → ' + datum.stk2 + ' ' + format(datum.size, '.2s') + 'B (' + format(datum.percentage, '.1%') + ')', 'IP Address': datum.stk3 +' → ' + datum.stk4 }\\\"\\n }\\n },\\n \\\"hover\\\": {\\\"strokeOpacity\\\": {\\\"value\\\": 0.75}}\\n }\\n },\\n {\\n \\\"type\\\": \\\"rect\\\",\\n \\\"name\\\": \\\"groupMark\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"groups\\\"},\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"fill\\\": {\\\"scale\\\": \\\"color\\\", \\\"field\\\": \\\"grpId\\\"},\\n \\\"width\\\": {\\\"scale\\\": \\\"x\\\", \\\"band\\\": 1}\\n },\\n \\\"update\\\": {\\n \\\"x\\\": {\\\"scale\\\": \\\"x\\\", \\\"field\\\": \\\"stack\\\"},\\n \\\"y\\\": {\\\"field\\\": \\\"scaledY0\\\"},\\n \\\"y2\\\": {\\\"field\\\": \\\"scaledY1\\\"},\\n \\\"fillOpacity\\\": {\\\"value\\\": 0.7},\\n \\\"tooltip\\\": {\\n \\\"signal\\\": \\\"datum.grpId + ' ' + format(datum.total, '.2s') + 'B (' + format(datum.percentage, '.1%') + ')'\\\"\\n }\\n },\\n \\\"hover\\\": {\\\"fillOpacity\\\": {\\\"value\\\": 1}}\\n }\\n },\\n {\\n \\\"type\\\": \\\"text\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"groups\\\"},\\n \\\"interactive\\\": false,\\n \\\"encode\\\": {\\n \\\"update\\\": {\\n \\\"x\\\": {\\n \\\"signal\\\": \\\"scale('x', datum.stack) + (datum.rightLabel ? bandwidth('x') + 8 : -8)\\\"\\n },\\n \\\"yc\\\": {\\\"signal\\\": \\\"(datum.scaledY0 + datum.scaledY1)/2\\\"},\\n \\\"align\\\": {\\\"signal\\\": \\\"datum.rightLabel ? 'left' : 'right'\\\"},\\n \\\"baseline\\\": {\\\"value\\\": \\\"middle\\\"},\\n \\\"fontWeight\\\": {\\\"value\\\": \\\"bold\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 12},\\n \\\"text\\\": {\\n \\\"signal\\\": \\\"abs(datum.scaledY0-datum.scaledY1) > 10 ? datum.grpId : ''\\\"\\n }\\n }\\n }\\n },\\n {\\n \\\"type\\\": \\\"group\\\",\\n \\\"data\\\": [\\n {\\n \\\"name\\\": \\\"dataForShowAll\\\",\\n \\\"values\\\": [{}],\\n \\\"transform\\\": [{\\\"type\\\": \\\"filter\\\", \\\"expr\\\": \\\"groupSelector\\\"}]\\n }\\n ],\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"xc\\\": {\\\"signal\\\": \\\"width/2\\\"},\\n \\\"y\\\": {\\\"value\\\": 30},\\n \\\"width\\\": {\\\"value\\\": 100},\\n \\\"height\\\": {\\\"value\\\": 36}\\n }\\n },\\n \\\"marks\\\": [\\n {\\n \\\"type\\\": \\\"group\\\",\\n \\\"name\\\": \\\"groupReset\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"dataForShowAll\\\"},\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"cornerRadius\\\": {\\\"value\\\": 3.5},\\n \\\"fill\\\": {\\\"value\\\": \\\"#666666\\\"},\\n \\\"height\\\": {\\\"field\\\": {\\\"group\\\": \\\"height\\\"}},\\n \\\"width\\\": {\\\"field\\\": {\\\"group\\\": \\\"width\\\"}}\\n },\\n \\\"update\\\": {\\\"opacity\\\": {\\\"value\\\": 1}},\\n \\\"hover\\\": {\\\"fill\\\": {\\\"value\\\": \\\"#444444\\\"}}\\n },\\n \\\"marks\\\": [\\n {\\n \\\"type\\\": \\\"text\\\",\\n \\\"interactive\\\": false,\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"xc\\\": {\\\"field\\\": {\\\"group\\\": \\\"width\\\"}, \\\"mult\\\": 0.5},\\n \\\"yc\\\": {\\\"field\\\": {\\\"group\\\": \\\"height\\\"}, \\\"mult\\\": 0.5, \\\"offset\\\": 1},\\n \\\"align\\\": {\\\"value\\\": \\\"center\\\"},\\n \\\"baseline\\\": {\\\"value\\\": \\\"middle\\\"},\\n \\\"text\\\": {\\\"value\\\": \\\"Show All\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 14},\\n \\\"stroke\\\": {\\\"value\\\": \\\"#ecf0f1\\\"}\\n }\\n }\\n }\\n ]\\n }\\n ]\\n }\\n ],\\n \\\"signals\\\": [\\n {\\n \\\"name\\\": \\\"groupHover\\\",\\n \\\"value\\\": {},\\n \\\"on\\\": [\\n {\\n \\\"events\\\": \\\"@groupMark:mouseover\\\",\\n \\\"update\\\": \\\"{stk1:datum.stack=='stk1' && datum.grpId, stk2:datum.stack=='stk2' && datum.grpId}\\\"\\n },\\n {\\\"events\\\": \\\"mouseout\\\", \\\"update\\\": \\\"{}\\\"}\\n ]\\n },\\n {\\n \\\"name\\\": \\\"groupSelector\\\",\\n \\\"value\\\": false,\\n \\\"on\\\": [\\n {\\n \\\"events\\\": \\\"@groupMark:click!\\\",\\n \\\"update\\\": \\\"{stack:datum.stack, stk1:datum.stack=='stk1' && datum.grpId, stk2:datum.stack=='stk2' && datum.grpId}\\\"\\n },\\n {\\n \\\"events\\\": [\\n {\\\"type\\\": \\\"click\\\", \\\"markname\\\": \\\"groupReset\\\"},\\n {\\\"type\\\": \\\"dblclick\\\"}\\n ],\\n \\\"update\\\": \\\"false\\\"\\n }\\n ]\\n }\\n ]\\n}\"},\"title\":\"Node Reverse Cumulative Bytes\"}"},"id":"211178f0-cd37-11ea-8911-87da3aad0324","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzksMV0="}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Aggregated Tx Mbps by Node Acting as Source","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"show_legend\":1,\"show_grid\":1,\"axis_min\":\"0\",\"filter\":\"\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false,\"index_pattern\":\"flow-*\",\"interval\":\"1m\",\"time_field\":\"ipfix.flowEndSeconds\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"rgba(144,201,227,1)\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"673aaae0-d084-11ea-9bdd-3d70b41d215d\",\"type\":\"sum\",\"field\":\"ipfix.throughput\"},{\"script\":\"params.bytes * 8 \",\"id\":\"dd0b81d0-b9a6-11ea-9740-552c943910e4\",\"type\":\"calculation\",\"variables\":[{\"id\":\"e1f87e50-b9a6-11ea-9740-552c943910e4\",\"name\":\"bytes\",\"field\":\"673aaae0-d084-11ea-9bdd-3d70b41d215d\"}]}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":\"2\",\"point_size\":\"0\",\"fill\":\"0.6\",\"stacked\":\"none\",\"split_color_mode\":\"rainbow\",\"label\":\"Bytes\",\"terms_field\":\"ipfix.sourceNodeName.keyword\",\"terms_size\":\"30\",\"terms_order_by\":\"673aaae0-d084-11ea-9bdd-3d70b41d215d\",\"value_template\":\"{{value}}its/s\",\"type\":\"timeseries\"}]},\"title\":\"Aggregated Tx Mbps by Node Acting as Source\"}"},"id":"226c4040-cd32-11ea-8911-87da3aad0324","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzEwLDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}"},"title":"Flow Record Nav","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"markdown\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"metrics\":[{\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"count\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"offset_time\":\"-5y\",\"split_color_mode\":\"gradient\"}],\"interval\":\"auto\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"show_grid\":1,\"markdown_vertical_align\":\"top\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false,\"time_field\":null,\"index_pattern\":\"flow-*\",\"markdown_css\":\"#markdown-61ca57f0-469d-11e7-af02-69e470af7417 p{color:#cccccc;margin-top:0;margin-bottom:8px;text-align:right}#markdown-61ca57f0-469d-11e7-af02-69e470af7417 p a{color:#1eadbd;font-size:17px;font-weight:bold;text-decoration:none}#markdown-61ca57f0-469d-11e7-af02-69e470af7417 p a strong{color:#ffac12;font-weight:bold}#markdown-61ca57f0-469d-11e7-af02-69e470af7417 hr{background-color:#cccccc;margin:0;height:1px}\",\"markdown_less\":\"p {\\n color: #cccccc;\\n margin-top: 0px;\\n margin-bottom: 8px;\\n text-align: right;\\n}\\np a {\\n color: #1eadbd;\\n\\tfont-size: 17px;\\n\\tfont-weight: bold;\\n\\ttext-decoration: none;\\n}\\np a strong {\\n color: #ffac12;\\n\\tfont-weight: bold;\\n}\\nhr {\\n background-color: #cccccc;\\n margin: 0px;\\n height: 1px;\\n}\",\"markdown\":\"[Overview](#/dashboard/3b331b30-b987-11ea-b16e-fb06687c3589) | [Pod-to-Pod Flow](#/dashboard/c2b15fb0-b9a8-11ea-b16e-fb06687c3589) | [Pod-to-External Flow](#/dashboard/3ed71e80-a92d-11eb-a7ef-5dcb53008c10) | [Pod-to-Service Flow](#/dashboard/6d77e8a0-513a-11eb-a19a-05e08a82dcf8) | [Node](#/dashboard/5400cdf0-cd2e-11ea-8911-87da3aad0324) | [Network Policy](#/dashboard/c5af6850-23b2-11eb-90d2-a7a4de48218a) | [**Flow Records**](#/dashboard/2ab9c220-b984-11ea-b16e-fb06687c3589)\\n\"},\"title\":\"Flow Record Nav\"}"},"id":"a96b21c0-b9ae-11ea-b16e-fb06687c3589","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzExLDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Flow Record Count","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"metric\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"rgba(144,201,227,1)\",\"split_mode\":\"everything\",\"metrics\":[{\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"count\"},{\"id\":\"bdd65820-55db-11e8-a230-6b3654bd4d61\",\"type\":\"cumulative_sum\",\"field\":\"61ca57f2-469d-11e7-af02-69e470af7417\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"bar\",\"line_width\":1,\"point_size\":\"0\",\"fill\":\"0.6\",\"stacked\":\"stacked\",\"split_color_mode\":\"gradient\",\"label\":\"Flow Records\",\"terms_field\":\"event.type\",\"terms_size\":\"25\",\"filter\":\"\"}],\"interval\":\">=1m\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"show_legend\":1,\"show_grid\":1,\"axis_min\":\"0\",\"background_color_rules\":[{\"id\":\"c5d26960-55db-11e8-a230-6b3654bd4d61\"}],\"axis_scale\":\"normal\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false,\"index_pattern\":\"flow-*\",\"time_field\":\"@timestamp\"},\"title\":\"Flow Record Count\"}"},"id":"5eef9cb0-b982-11ea-b16e-fb06687c3589","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzEyLDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Filter","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"input_control_vis\",\"aggs\":[],\"params\":{\"updateFiltersOnChange\":true,\"useTimeFilter\":true,\"pinFilters\":true,\"controls\":[{\"id\":\"1526108909005\",\"fieldName\":\"ipfix.sourcePodNamespace.keyword\",\"label\":\"Source Pod Namespace\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"size\":1000,\"order\":\"desc\",\"dynamicOptions\":false},\"indexPatternRefName\":\"control_0_index_pattern\"},{\"id\":\"1526107640219\",\"fieldName\":\"ipfix.sourcePodName.keyword\",\"label\":\"Source Pod Name\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"size\":1000,\"order\":\"desc\",\"dynamicOptions\":false},\"indexPatternRefName\":\"control_1_index_pattern\"},{\"id\":\"1594408631049\",\"fieldName\":\"ipfix.sourceNodeName.keyword\",\"parent\":\"\",\"label\":\"Source Pod Node\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":false,\"size\":1000,\"order\":\"desc\"},\"indexPatternRefName\":\"control_2_index_pattern\"},{\"id\":\"1592936602245\",\"fieldName\":\"ipfix.destinationPodNamespace.keyword\",\"parent\":\"\",\"label\":\"Destination Pod Namespace\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":false,\"size\":1000,\"order\":\"desc\"},\"indexPatternRefName\":\"control_3_index_pattern\"},{\"id\":\"1526108883717\",\"fieldName\":\"ipfix.destinationPodName.keyword\",\"label\":\"Destination Pod Name\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"size\":1000,\"order\":\"desc\",\"dynamicOptions\":false},\"indexPatternRefName\":\"control_4_index_pattern\"},{\"id\":\"1594408650442\",\"fieldName\":\"ipfix.destinationNodeName.keyword\",\"parent\":\"\",\"label\":\"Destination Pod Node\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":false,\"size\":1000,\"order\":\"desc\"},\"indexPatternRefName\":\"control_5_index_pattern\"},{\"id\":\"1595904313889\",\"fieldName\":\"ipfix.destinationServicePortName.keyword\",\"parent\":\"\",\"label\":\"Destination Service Name\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":false,\"size\":1000,\"order\":\"desc\"},\"indexPatternRefName\":\"control_6_index_pattern\"},{\"id\":\"1609999080958\",\"parent\":\"\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":false,\"size\":1000,\"order\":\"desc\"},\"fieldName\":\"ipfix.flowKey.keyword\",\"label\":\"Flow Key\",\"indexPatternRefName\":\"control_7_index_pattern\"},{\"id\":\"1618607047867\",\"fieldName\":\"ipfix.flowTypeStr.keyword\",\"parent\":\"\",\"label\":\"Flow Type\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":false,\"size\":1000,\"order\":\"desc\"},\"indexPatternRefName\":\"control_8_index_pattern\"}]},\"title\":\"Filter\"}"},"id":"df9ec4c0-b983-11ea-b16e-fb06687c3589","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_0_index_pattern","type":"index-pattern"},{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_1_index_pattern","type":"index-pattern"},{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_2_index_pattern","type":"index-pattern"},{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_3_index_pattern","type":"index-pattern"},{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_4_index_pattern","type":"index-pattern"},{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_5_index_pattern","type":"index-pattern"},{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_6_index_pattern","type":"index-pattern"},{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_7_index_pattern","type":"index-pattern"},{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_8_index_pattern","type":"index-pattern"}],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzEzLDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Flow Record Graph","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"interval\":\">=1m\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"show_legend\":1,\"show_grid\":1,\"axis_min\":\"0\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false,\"index_pattern\":\"flow-*\",\"time_field\":\"@timestamp\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"rgba(144,201,227,1)\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"count\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"bar\",\"line_width\":1,\"point_size\":\"0\",\"fill\":\"0.6\",\"stacked\":\"stacked\",\"split_color_mode\":\"gradient\",\"label\":\"Flows\",\"terms_field\":null,\"terms_size\":\"50\",\"filter\":\"\"}]},\"title\":\"Flow Record Graph\"}"},"id":"5fc91750-b983-11ea-b16e-fb06687c3589","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzE0LDFd"}
-{"attributes":{"columns":["ipfix.sourceIP","ipfix.destinationIP","ipfix.sourcePodName","ipfix.destinationPodName","ipfix.bytes","ipfix.packets"],"description":"","hits":0,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"highlightAll\":true,\"version\":true,\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"filter\":[]}"},"sort":[["@timestamp","desc"]],"title":"Antrea: Flow Record Table","version":1},"id":"adeb7dc0-b982-11ea-b16e-fb06687c3589","migrationVersion":{"search":"7.4.0"},"references":[{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"search","updated_at":"2021-08-07T23:30:40.150Z","version":"WzE1LDFd"}
-{"attributes":{"description":"","hits":0,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}"},"optionsJSON":"{\"hidePanelTitles\":false,\"useMargins\":true}","panelsJSON":"[{\"embeddableConfig\":{\"title\":\"\"},\"gridData\":{\"h\":3,\"i\":\"fef76e06-bf55-4447-bd27-bb06afa1a590\",\"w\":48,\"x\":0,\"y\":0},\"panelIndex\":\"fef76e06-bf55-4447-bd27-bb06afa1a590\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_0\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":10,\"i\":\"9540e56c-70eb-498e-a587-6fc4b4fa2d98\",\"w\":11,\"x\":0,\"y\":3},\"panelIndex\":\"9540e56c-70eb-498e-a587-6fc4b4fa2d98\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_1\"},{\"embeddableConfig\":{\"title\":\"\"},\"gridData\":{\"h\":10,\"i\":\"69a239b5-0a27-4108-937f-2e8396f7ee61\",\"w\":37,\"x\":11,\"y\":3},\"panelIndex\":\"69a239b5-0a27-4108-937f-2e8396f7ee61\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_2\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":10,\"i\":\"f98c36a9-f87b-45c2-85ed-f2d8782f9404\",\"w\":48,\"x\":0,\"y\":13},\"panelIndex\":\"f98c36a9-f87b-45c2-85ed-f2d8782f9404\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_3\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":65,\"i\":\"9eb3e16c-8161-4d9d-bb5c-431d3b622890\",\"w\":48,\"x\":0,\"y\":23},\"panelIndex\":\"9eb3e16c-8161-4d9d-bb5c-431d3b622890\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_4\"}]","timeRestore":false,"title":"Flow Record Dashboard","version":1},"id":"2ab9c220-b984-11ea-b16e-fb06687c3589","migrationVersion":{"dashboard":"7.3.0"},"references":[{"id":"a96b21c0-b9ae-11ea-b16e-fb06687c3589","name":"panel_0","type":"visualization"},{"id":"5eef9cb0-b982-11ea-b16e-fb06687c3589","name":"panel_1","type":"visualization"},{"id":"df9ec4c0-b983-11ea-b16e-fb06687c3589","name":"panel_2","type":"visualization"},{"id":"5fc91750-b983-11ea-b16e-fb06687c3589","name":"panel_3","type":"visualization"},{"id":"adeb7dc0-b982-11ea-b16e-fb06687c3589","name":"panel_4","type":"search"}],"type":"dashboard","updated_at":"2021-08-07T23:30:40.150Z","version":"WzE2LDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}"},"title":"Pod-to-Pod Traffic Reverse Cumulative Bytes","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"vega\",\"aggs\":[],\"params\":{\"spec\":\"{\\n \\\"$schema\\\": \\\"https://vega.github.io/schema/vega/v3.0.json\\\",\\n \\\"data\\\": [\\n {\\n \\\"name\\\": \\\"rawData\\\",\\n \\\"url\\\": {\\n \\\"%context%\\\": true,\\n \\\"%timefield%\\\": \\\"@timestamp\\\",\\n \\\"index\\\": \\\"flow-*\\\",\\n \\\"body\\\": {\\n \\\"size\\\": 0,\\n \\\"aggs\\\": {\\n \\\"table\\\": {\\n \\\"composite\\\": {\\n \\\"size\\\": 1000,\\n \\\"sources\\\": [\\n {\\\"stk1\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.sourcePodName.keyword\\\"}}},\\n {\\\"stk1ns\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.sourcePodNamespace.keyword\\\"}}},\\n {\\\"stk2\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.destinationPodName.keyword\\\"}}},\\n {\\\"stk2ns\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.destinationPodNamespace.keyword\\\"}}},\\n {\\\"stk3\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.sourceIP.keyword\\\"}}},\\n {\\\"stk4\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.destinationIP.keyword\\\"}}}\\n {\\\"stk5\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.flowTypeStr.keyword\\\"}}}\\n ]\\n },\\n \\t\\t\\t\\\"aggs\\\": {\\n \\t\\t\\t\\t\\\"bytes\\\": {\\n \\t\\t\\t\\t\\t\\\"sum\\\": {\\n \\t\\t\\t\\t\\t\\t\\\"field\\\": \\\"ipfix.reverseOctetDeltaCountFromSourceNode\\\"\\n \\t\\t\\t\\t\\t}\\n \\t\\t\\t\\t}\\n \\t\\t\\t}\\n }\\n }\\n }\\n },\\n \\\"format\\\": {\\\"property\\\": \\\"aggregations.table.buckets\\\"},\\n \\\"transform\\\": [\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk1ns +'/'+ datum.key.stk1\\\", \\\"as\\\": \\\"stk1s\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"(datum.key.stk1==''?datum.key.stk3:datum.stk1s)\\\", \\\"as\\\": \\\"stk1\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk2ns +'/'+ datum.key.stk2\\\", \\\"as\\\": \\\"stk2s\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"(datum.key.stk2==''?datum.key.stk4:datum.stk2s)\\\", \\\"as\\\": \\\"stk2\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk3\\\", \\\"as\\\": \\\"stk3\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk4\\\", \\\"as\\\": \\\"stk4\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk5\\\", \\\"as\\\": \\\"stk5\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.bytes.value\\\", \\\"as\\\": \\\"size\\\"}\\n ]\\n },\\n {\\n \\\"name\\\": \\\"nodes\\\",\\n \\\"source\\\": \\\"rawData\\\",\\n \\\"transform\\\": [\\n {\\n \\\"type\\\": \\\"filter\\\",\\n \\\"expr\\\": \\\"(datum.stk5 == 'Inter-Node' || datum.stk5 == 'Intra-Node') && !groupSelector || groupSelector.stk1 == datum.stk1 || groupSelector.stk2 == datum.stk2\\\"\\n },\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.stk1+datum.stk2\\\", \\\"as\\\": \\\"key\\\"},\\n {\\\"type\\\": \\\"fold\\\", \\\"fields\\\": [\\\"stk1\\\", \\\"stk2\\\"], \\\"as\\\": [\\\"stack\\\", \\\"grpId\\\"]},\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"datum.stack == 'stk1' ? datum.stk1+datum.stk2 : datum.stk2+datum.stk1\\\",\\n \\\"as\\\": \\\"sortField\\\"\\n },\\n {\\n \\\"type\\\": \\\"stack\\\",\\n \\\"groupby\\\": [\\\"stack\\\"],\\n \\\"sort\\\": {\\\"field\\\": \\\"sortField\\\", \\\"order\\\": \\\"descending\\\"},\\n \\\"field\\\": \\\"size\\\"\\n },\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"(datum.y0+datum.y1)/2\\\", \\\"as\\\": \\\"yc\\\"}\\n ]\\n },\\n {\\n \\\"name\\\": \\\"groups\\\",\\n \\\"source\\\": \\\"nodes\\\",\\n \\\"transform\\\": [\\n {\\n \\\"type\\\": \\\"aggregate\\\",\\n \\\"groupby\\\": [\\\"stack\\\", \\\"grpId\\\"],\\n \\\"fields\\\": [\\\"size\\\"],\\n \\\"ops\\\": [\\\"sum\\\"],\\n \\\"as\\\": [\\\"total\\\"]\\n },\\n {\\n \\\"type\\\": \\\"stack\\\",\\n \\\"groupby\\\": [\\\"stack\\\"],\\n \\\"sort\\\": {\\\"field\\\": \\\"grpId\\\", \\\"order\\\": \\\"descending\\\"},\\n \\\"field\\\": \\\"total\\\"\\n },\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"scale('y', datum.y0)\\\", \\\"as\\\": \\\"scaledY0\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"scale('y', datum.y1)\\\", \\\"as\\\": \\\"scaledY1\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.stack == 'stk1'\\\", \\\"as\\\": \\\"rightLabel\\\"},\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"datum.total/domain('y')[1]\\\",\\n \\\"as\\\": \\\"percentage\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"destinationNodes\\\",\\n \\\"source\\\": \\\"nodes\\\",\\n \\\"transform\\\": [{\\\"type\\\": \\\"filter\\\", \\\"expr\\\": \\\"datum.stack == 'stk2'\\\"}]\\n },\\n {\\n \\\"name\\\": \\\"edges\\\",\\n \\\"source\\\": \\\"nodes\\\",\\n \\\"transform\\\": [\\n {\\\"type\\\": \\\"filter\\\", \\\"expr\\\": \\\"datum.stack == 'stk1'\\\"},\\n {\\n \\\"type\\\": \\\"lookup\\\",\\n \\\"from\\\": \\\"destinationNodes\\\",\\n \\\"key\\\": \\\"key\\\",\\n \\\"fields\\\": [\\\"key\\\"],\\n \\\"as\\\": [\\\"target\\\"]\\n },\\n {\\n \\\"type\\\": \\\"linkpath\\\",\\n \\\"orient\\\": \\\"horizontal\\\",\\n \\\"shape\\\": \\\"diagonal\\\",\\n \\\"sourceY\\\": {\\\"expr\\\": \\\"scale('y', datum.yc)\\\"},\\n \\\"sourceX\\\": {\\\"expr\\\": \\\"scale('x', 'stk1') + bandwidth('x')\\\"},\\n \\\"targetY\\\": {\\\"expr\\\": \\\"scale('y', datum.target.yc)\\\"},\\n \\\"targetX\\\": {\\\"expr\\\": \\\"scale('x', 'stk2')\\\"}\\n },\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"range('y')[0]-scale('y', datum.size)\\\",\\n \\\"as\\\": \\\"strokeWidth\\\"\\n },\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"datum.size/domain('y')[1]\\\",\\n \\\"as\\\": \\\"percentage\\\"\\n }\\n ]\\n }\\n ],\\n \\\"scales\\\": [\\n {\\n \\\"name\\\": \\\"x\\\",\\n \\\"type\\\": \\\"band\\\",\\n \\\"range\\\": \\\"width\\\",\\n \\\"domain\\\": [\\\"stk1\\\", \\\"stk2\\\"],\\n \\\"paddingOuter\\\": 0.01,\\n \\\"paddingInner\\\": 0.98\\n },\\n {\\n \\\"name\\\": \\\"y\\\",\\n \\\"type\\\": \\\"linear\\\",\\n \\\"range\\\": \\\"height\\\",\\n \\\"domain\\\": {\\\"data\\\": \\\"nodes\\\", \\\"field\\\": \\\"y1\\\"}\\n },\\n {\\n \\\"name\\\": \\\"color\\\",\\n \\\"type\\\": \\\"ordinal\\\",\\n \\\"range\\\": \\\"category\\\",\\n \\\"domain\\\": {\\\"data\\\": \\\"rawData\\\", \\\"fields\\\": [\\\"stk1\\\",\\\"stk2\\\"]}\\n },\\n {\\n \\\"name\\\": \\\"stackNames\\\",\\n \\\"type\\\": \\\"ordinal\\\",\\n \\\"range\\\": [\\\"Source Pod\\\", \\\"Destination Pod\\\"],\\n \\\"domain\\\": [\\\"stk1\\\", \\\"stk2\\\"]\\n }\\n ],\\n \\\"axes\\\": [\\n {\\n \\\"orient\\\": \\\"bottom\\\",\\n \\\"scale\\\": \\\"x\\\",\\n \\\"labelColor\\\": {\\n \\\"value\\\": \\\"#888888\\\"\\n },\\n \\\"encode\\\": {\\n \\\"labels\\\": {\\n \\\"update\\\": {\\n \\\"text\\\": {\\\"scale\\\": \\\"stackNames\\\", \\\"field\\\": \\\"value\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 14}\\n }\\n }\\n }\\n },\\n {\\n \\\"orient\\\": \\\"left\\\",\\n \\\"scale\\\": \\\"y\\\",\\n \\\"labelColor\\\": {\\n \\\"value\\\": \\\"#888888\\\"\\n },\\n \\\"encode\\\": {\\n \\\"labels\\\": {\\n \\\"update\\\": {\\n \\\"text\\\": {\\\"signal\\\": \\\"format(datum.value, '.2s') + 'B'\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 12}\\n }\\n }\\n }\\n }\\n ],\\n \\\"marks\\\": [\\n {\\n \\\"type\\\": \\\"path\\\",\\n \\\"name\\\": \\\"edgeMark\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"edges\\\"},\\n \\\"clip\\\": true,\\n \\\"encode\\\": {\\n \\\"update\\\": {\\n \\\"stroke\\\": [\\n {\\n \\\"test\\\": \\\"groupSelector && groupSelector.stack=='stk1'\\\",\\n \\\"scale\\\": \\\"color\\\",\\n \\\"field\\\": \\\"stk2\\\"\\n },\\n {\\\"scale\\\": \\\"color\\\", \\\"field\\\": \\\"stk1\\\"}\\n ],\\n \\\"strokeWidth\\\": {\\\"field\\\": \\\"strokeWidth\\\"},\\n \\\"path\\\": {\\\"field\\\": \\\"path\\\"},\\n \\\"strokeOpacity\\\": {\\n \\\"signal\\\": \\\"!groupSelector && (groupHover.stk1 == datum.stk1 || groupHover.stk2 == datum.stk2) ? 0.75 : 0.3\\\"\\n },\\n \\\"zindex\\\": {\\n \\\"signal\\\": \\\"!groupSelector && (groupHover.stk1 == datum.stk1 || groupHover.stk2 == datum.stk2) ? 1 : 0\\\"\\n },\\n \\\"tooltip\\\": {\\n \\\"signal\\\": \\\"{'title': datum.stk1 + ' → ' + datum.stk2 + ' ' + format(datum.size, '.2s') + 'B (' + format(datum.percentage, '.1%') + ')', 'IP Address': datum.stk3 + ' → ' + datum.stk4}\\\"\\n }\\n },\\n \\\"hover\\\": {\\\"strokeOpacity\\\": {\\\"value\\\": 0.75}}\\n }\\n },\\n {\\n \\\"type\\\": \\\"rect\\\",\\n \\\"name\\\": \\\"groupMark\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"groups\\\"},\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"fill\\\": {\\\"scale\\\": \\\"color\\\", \\\"field\\\": \\\"grpId\\\"},\\n \\\"width\\\": {\\\"scale\\\": \\\"x\\\", \\\"band\\\": 1}\\n },\\n \\\"update\\\": {\\n \\\"x\\\": {\\\"scale\\\": \\\"x\\\", \\\"field\\\": \\\"stack\\\"},\\n \\\"y\\\": {\\\"field\\\": \\\"scaledY0\\\"},\\n \\\"y2\\\": {\\\"field\\\": \\\"scaledY1\\\"},\\n \\\"fillOpacity\\\": {\\\"value\\\": 0.7},\\n \\\"tooltip\\\": {\\n \\\"signal\\\": \\\"datum.grpId + ' ' + format(datum.total, '.2s') + 'B (' + format(datum.percentage, '.1%') + ')'\\\"\\n }\\n },\\n \\\"hover\\\": {\\\"fillOpacity\\\": {\\\"value\\\": 1}}\\n }\\n },\\n {\\n \\\"type\\\": \\\"text\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"groups\\\"},\\n \\\"interactive\\\": false,\\n \\\"encode\\\": {\\n \\\"update\\\": {\\n \\\"x\\\": {\\n \\\"signal\\\": \\\"scale('x', datum.stack) + (datum.rightLabel ? bandwidth('x') + 8 : -8)\\\"\\n },\\n \\\"yc\\\": {\\\"signal\\\": \\\"(datum.scaledY0 + datum.scaledY1)/2\\\"},\\n \\\"align\\\": {\\\"signal\\\": \\\"datum.rightLabel ? 'left' : 'right'\\\"},\\n \\\"baseline\\\": {\\\"value\\\": \\\"middle\\\"},\\n \\\"fontWeight\\\": {\\\"value\\\": \\\"bold\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 12},\\n \\\"text\\\": {\\n \\\"signal\\\": \\\"abs(datum.scaledY0-datum.scaledY1) > 10 ? datum.grpId : ''\\\"\\n }\\n }\\n }\\n },\\n {\\n \\\"type\\\": \\\"group\\\",\\n \\\"data\\\": [\\n {\\n \\\"name\\\": \\\"dataForShowAll\\\",\\n \\\"values\\\": [{}],\\n \\\"transform\\\": [{\\\"type\\\": \\\"filter\\\", \\\"expr\\\": \\\"groupSelector\\\"}]\\n }\\n ],\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"xc\\\": {\\\"signal\\\": \\\"width/2\\\"},\\n \\\"y\\\": {\\\"value\\\": 30},\\n \\\"width\\\": {\\\"value\\\": 100},\\n \\\"height\\\": {\\\"value\\\": 36}\\n }\\n },\\n \\\"marks\\\": [\\n {\\n \\\"type\\\": \\\"group\\\",\\n \\\"name\\\": \\\"groupReset\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"dataForShowAll\\\"},\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"cornerRadius\\\": {\\\"value\\\": 3.5},\\n \\\"fill\\\": {\\\"value\\\": \\\"#666666\\\"},\\n \\\"height\\\": {\\\"field\\\": {\\\"group\\\": \\\"height\\\"}},\\n \\\"width\\\": {\\\"field\\\": {\\\"group\\\": \\\"width\\\"}}\\n },\\n \\\"update\\\": {\\\"opacity\\\": {\\\"value\\\": 1}},\\n \\\"hover\\\": {\\\"fill\\\": {\\\"value\\\": \\\"#444444\\\"}}\\n },\\n \\\"marks\\\": [\\n {\\n \\\"type\\\": \\\"text\\\",\\n \\\"interactive\\\": false,\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"xc\\\": {\\\"field\\\": {\\\"group\\\": \\\"width\\\"}, \\\"mult\\\": 0.5},\\n \\\"yc\\\": {\\\"field\\\": {\\\"group\\\": \\\"height\\\"}, \\\"mult\\\": 0.5, \\\"offset\\\": 1},\\n \\\"align\\\": {\\\"value\\\": \\\"center\\\"},\\n \\\"baseline\\\": {\\\"value\\\": \\\"middle\\\"},\\n \\\"text\\\": {\\\"value\\\": \\\"Show All\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 14},\\n \\\"stroke\\\": {\\\"value\\\": \\\"#ecf0f1\\\"}\\n }\\n }\\n }\\n ]\\n }\\n ]\\n }\\n ],\\n \\\"signals\\\": [\\n {\\n \\\"name\\\": \\\"groupHover\\\",\\n \\\"value\\\": {},\\n \\\"on\\\": [\\n {\\n \\\"events\\\": \\\"@groupMark:mouseover\\\",\\n \\\"update\\\": \\\"{stk1:datum.stack=='stk1' && datum.grpId, stk2:datum.stack=='stk2' && datum.grpId}\\\"\\n },\\n {\\\"events\\\": \\\"mouseout\\\", \\\"update\\\": \\\"{}\\\"}\\n ]\\n },\\n {\\n \\\"name\\\": \\\"groupSelector\\\",\\n \\\"value\\\": false,\\n \\\"on\\\": [\\n {\\n \\\"events\\\": \\\"@groupMark:click!\\\",\\n \\\"update\\\": \\\"{stack:datum.stack, stk1:datum.stack=='stk1' && datum.grpId, stk2:datum.stack=='stk2' && datum.grpId}\\\"\\n },\\n {\\n \\\"events\\\": [\\n {\\\"type\\\": \\\"click\\\", \\\"markname\\\": \\\"groupReset\\\"},\\n {\\\"type\\\": \\\"dblclick\\\"}\\n ],\\n \\\"update\\\": \\\"false\\\"\\n }\\n ]\\n }\\n ]\\n}\"},\"title\":\"Pod-to-Pod Traffic Reverse Cumulative Bytes\"}"},"id":"2bd8fe60-c243-11ea-873e-8f9a9a3cbdc1","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzE3LDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Aggregated Rx Mbps by Service Acting as Destination","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"show_legend\":1,\"show_grid\":1,\"axis_min\":\"0\",\"filter\":\"\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false,\"index_pattern\":\"flow-*\",\"interval\":\"1m\",\"time_field\":\"ipfix.flowEndSeconds\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"rgba(144,201,227,1)\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"type\":\"sum\",\"field\":\"ipfix.throughput\"},{\"script\":\"params.bytes * 8 \",\"id\":\"dd0b81d0-b9a6-11ea-9740-552c943910e4\",\"type\":\"calculation\",\"variables\":[{\"id\":\"e1f87e50-b9a6-11ea-9740-552c943910e4\",\"name\":\"bytes\",\"field\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\"}]}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":\"2\",\"point_size\":\"0\",\"fill\":\"0.6\",\"stacked\":\"none\",\"split_color_mode\":\"rainbow\",\"label\":\"Bytes\",\"terms_field\":\"ipfix.destinationServicePortName.keyword\",\"terms_size\":\"30\",\"terms_order_by\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"value_template\":\"{{value}}its/s\",\"type\":\"timeseries\"}]},\"title\":\"Aggregated Rx Mbps by Service Acting as Destination\"}"},"id":"2fb72bf0-d086-11ea-a734-57fc7859997d","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzE4LDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}"},"title":"Overview Nav","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"markdown\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"metrics\":[{\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"count\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"offset_time\":\"-5y\",\"split_color_mode\":\"gradient\"}],\"interval\":\"auto\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"show_grid\":1,\"markdown_vertical_align\":\"top\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false,\"time_field\":null,\"index_pattern\":\"flow-*\",\"markdown_css\":\"#markdown-61ca57f0-469d-11e7-af02-69e470af7417 p{color:#cccccc;margin-top:0;margin-bottom:8px;text-align:right}#markdown-61ca57f0-469d-11e7-af02-69e470af7417 p a{color:#1eadbd;font-size:17px;font-weight:bold;text-decoration:none}#markdown-61ca57f0-469d-11e7-af02-69e470af7417 p a strong{color:#ffac12;font-weight:bold}#markdown-61ca57f0-469d-11e7-af02-69e470af7417 hr{background-color:#cccccc;margin:0;height:1px}\",\"markdown_less\":\"p {\\n color: #cccccc;\\n margin-top: 0px;\\n margin-bottom: 8px;\\n text-align: right;\\n}\\np a {\\n color: #1eadbd;\\n\\tfont-size: 17px;\\n\\tfont-weight: bold;\\n\\ttext-decoration: none;\\n}\\np a strong {\\n color: #ffac12;\\n\\tfont-weight: bold;\\n}\\nhr {\\n background-color: #cccccc;\\n margin: 0px;\\n height: 1px;\\n}\",\"markdown\":\"[**Overview**](#/dashboard/3b331b30-b987-11ea-b16e-fb06687c3589) | [Pod-to-Pod Flow](#/dashboard/c2b15fb0-b9a8-11ea-b16e-fb06687c3589) | [Pod-to-External Flow](#/dashboard/3ed71e80-a92d-11eb-a7ef-5dcb53008c10) | [Pod-to-Service Flow](#/dashboard/6d77e8a0-513a-11eb-a19a-05e08a82dcf8) | [Node](#/dashboard/5400cdf0-cd2e-11ea-8911-87da3aad0324) | [Network Policy](#/dashboard/c5af6850-23b2-11eb-90d2-a7a4de48218a) | [Flow Records](#/dashboard/2ab9c220-b984-11ea-b16e-fb06687c3589)\"},\"title\":\"Overview Nav\"}"},"id":"b990e3f0-b9ae-11ea-b16e-fb06687c3589","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzE5LDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"filter\":[]}"},"title":"Source Pod Bytes","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"pie\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"sum\",\"schema\":\"metric\",\"params\":{\"field\":\"ipfix.bytes\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ipfix.sourcePodName.keyword\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":30,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Client\"}}],\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":true,\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100},\"dimensions\":{\"metric\":{\"accessor\":1,\"format\":{\"id\":\"number\"},\"params\":{},\"aggType\":\"sum\"},\"buckets\":[{\"accessor\":0,\"format\":{\"id\":\"terms\",\"params\":{\"id\":\"string\",\"otherBucketLabel\":\"Other\",\"missingBucketLabel\":\"Missing\"}},\"params\":{},\"aggType\":\"terms\"},{\"accessor\":2,\"format\":{\"id\":\"terms\",\"params\":{\"id\":\"string\",\"otherBucketLabel\":\"Other\",\"missingBucketLabel\":\"Missing\"}},\"params\":{},\"aggType\":\"terms\"}]}},\"title\":\"Source Pod Bytes\"}"},"id":"b265b3e0-b985-11ea-b16e-fb06687c3589","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzIwLDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"filter\":[]}"},"title":"Source Pod Packets","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"pie\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"sum\",\"schema\":\"metric\",\"params\":{\"field\":\"ipfix.packets\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ipfix.sourcePodName.keyword\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":30,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Client\"}}],\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":true,\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100},\"dimensions\":{\"metric\":{\"accessor\":0,\"format\":{\"id\":\"number\"},\"params\":{},\"aggType\":\"count\"}}},\"title\":\"Source Pod Packets\"}"},"id":"3efa51d0-b986-11ea-b16e-fb06687c3589","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzIxLDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"filter\":[]}"},"title":"Destination Pod Packets","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"pie\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"sum\",\"schema\":\"metric\",\"params\":{\"field\":\"ipfix.packets\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ipfix.destinationPodName.keyword\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":30,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Server\"}}],\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":true,\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100},\"dimensions\":{\"metric\":{\"accessor\":0,\"format\":{\"id\":\"number\"},\"params\":{},\"aggType\":\"count\"}}},\"title\":\"Destination Pod Packets\"}"},"id":"6ac7d9e0-b986-11ea-b16e-fb06687c3589","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzIyLDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"filter\":[]}"},"title":"Source Pod Bytes (IP)","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"pie\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"sum\",\"schema\":\"metric\",\"params\":{\"field\":\"ipfix.bytes\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ipfix.sourceIP.keyword\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":20,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}],\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":true,\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100},\"dimensions\":{\"metric\":{\"accessor\":1,\"format\":{\"id\":\"number\"},\"params\":{},\"aggType\":\"sum\"},\"buckets\":[{\"accessor\":0,\"format\":{\"id\":\"terms\",\"params\":{\"id\":\"string\",\"otherBucketLabel\":\"Other\",\"missingBucketLabel\":\"Missing\"}},\"params\":{},\"aggType\":\"terms\"}]}},\"title\":\"Source Pod Bytes (IP)\"}"},"id":"a33e14e0-b992-11ea-b16e-fb06687c3589","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzIzLDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"filter\":[]}"},"title":"Source Pod Packets (IP)","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"pie\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"sum\",\"schema\":\"metric\",\"params\":{\"field\":\"ipfix.packets\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ipfix.sourceIP.keyword\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":20,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}],\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":true,\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100},\"dimensions\":{\"metric\":{\"accessor\":1,\"format\":{\"id\":\"number\"},\"params\":{},\"aggType\":\"sum\"},\"buckets\":[{\"accessor\":0,\"format\":{\"id\":\"terms\",\"params\":{\"id\":\"string\",\"otherBucketLabel\":\"Other\",\"missingBucketLabel\":\"Missing\"}},\"params\":{},\"aggType\":\"terms\"}]}},\"title\":\"Source Pod Packets (IP)\"}"},"id":"b14081e0-b992-11ea-b16e-fb06687c3589","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzI0LDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"filter\":[]}"},"title":"Destination Pod Bytes (IP)","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"pie\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"sum\",\"schema\":\"metric\",\"params\":{\"field\":\"ipfix.bytes\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ipfix.destinationIP.keyword\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":20,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}],\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":true,\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100},\"dimensions\":{\"metric\":{\"accessor\":0,\"format\":{\"id\":\"number\"},\"params\":{},\"aggType\":\"count\"}}},\"title\":\"Destination Pod Bytes (IP)\"}"},"id":"910eee20-b992-11ea-b16e-fb06687c3589","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzI1LDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"filter\":[]}"},"title":"Destination Pod Packets (IP)","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"pie\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"sum\",\"schema\":\"metric\",\"params\":{\"field\":\"ipfix.packets\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ipfix.destinationIP.keyword\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":20,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}],\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":true,\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100},\"dimensions\":{\"metric\":{\"accessor\":1,\"format\":{\"id\":\"number\"},\"params\":{},\"aggType\":\"sum\"},\"buckets\":[{\"accessor\":0,\"format\":{\"id\":\"terms\",\"params\":{\"id\":\"string\",\"otherBucketLabel\":\"Other\",\"missingBucketLabel\":\"Missing\"}},\"params\":{},\"aggType\":\"terms\"}]}},\"title\":\"Destination Pod Packets (IP)\"}"},"id":"c74e1b50-b992-11ea-b16e-fb06687c3589","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzI2LDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"filter\":[]}"},"title":"Source Pod Flow Count","uiStateJSON":"{\"vis\":{\"legendOpen\":true}}","version":1,"visState":"{\"type\":\"horizontal_bar\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Record Count\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"ipfix.sourcePodName.keyword\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":20,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Client\"}}],\"params\":{\"type\":\"histogram\",\"grid\":{\"categoryLines\":false,\"valueAxis\":\"ValueAxis-1\"},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":200},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":75,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"Record Count\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"showCircles\":true,\"data\":{\"id\":\"1\",\"label\":\"Record Count\"}}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"top\",\"times\":[],\"addTimeMarker\":false,\"labels\":{\"show\":true},\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#34130C\"},\"dimensions\":{\"x\":null,\"y\":[{\"accessor\":1,\"format\":{\"id\":\"number\"},\"params\":{},\"aggType\":\"count\"}],\"series\":[{\"accessor\":0,\"format\":{\"id\":\"terms\",\"params\":{\"id\":\"string\",\"otherBucketLabel\":\"Other\",\"missingBucketLabel\":\"Missing\"}},\"params\":{},\"aggType\":\"terms\"}]}},\"title\":\"Source Pod Flow Count\"}"},"id":"d3760780-b988-11ea-b16e-fb06687c3589","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzI3LDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"filter\":[]}"},"title":"Destination Pod Flow Count","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"histogram\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Record Count\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"ipfix.destinationPodName.keyword\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":20,\"otherBucket\":true,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\"}}],\"params\":{\"type\":\"histogram\",\"grid\":{\"categoryLines\":false,\"valueAxis\":\"ValueAxis-1\"},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"left\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"rotate\":0,\"filter\":false,\"truncate\":200},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\",\"mode\":\"normal\"},\"labels\":{\"show\":true,\"rotate\":75,\"filter\":true,\"truncate\":100},\"title\":{\"text\":\"Record Count\"}}],\"seriesParams\":[{\"show\":true,\"type\":\"histogram\",\"mode\":\"normal\",\"valueAxis\":\"ValueAxis-1\",\"drawLinesBetweenPoints\":true,\"lineWidth\":2,\"showCircles\":true,\"data\":{\"label\":\"Record Count\",\"id\":\"1\"}}],\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"top\",\"times\":[],\"addTimeMarker\":false,\"labels\":{\"show\":true},\"thresholdLine\":{\"show\":false,\"value\":10,\"width\":1,\"style\":\"full\",\"color\":\"#34130C\"},\"dimensions\":{\"x\":null,\"y\":[{\"accessor\":1,\"format\":{\"id\":\"number\"},\"params\":{},\"aggType\":\"count\"}],\"series\":[{\"accessor\":0,\"format\":{\"id\":\"terms\",\"params\":{\"id\":\"string\",\"otherBucketLabel\":\"Other\",\"missingBucketLabel\":\"Missing\"}},\"params\":{},\"aggType\":\"terms\"}]}},\"title\":\"Destination Pod Flow Count\"}"},"id":"766c7960-b989-11ea-b16e-fb06687c3589","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzI4LDFd"}
-{"attributes":{"description":"","hits":0,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}"},"optionsJSON":"{\"hidePanelTitles\":false,\"useMargins\":true}","panelsJSON":"[{\"embeddableConfig\":{\"title\":\"\"},\"gridData\":{\"h\":3,\"i\":\"611b0a9e-2dd7-40b9-ab13-a388e16ab1f0\",\"w\":47,\"x\":0,\"y\":0},\"panelIndex\":\"611b0a9e-2dd7-40b9-ab13-a388e16ab1f0\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_0\"},{\"embeddableConfig\":{\"title\":\"\"},\"gridData\":{\"h\":8,\"i\":\"6b959c34-c8dd-4587-985e-f005036d5c19\",\"w\":47,\"x\":0,\"y\":3},\"panelIndex\":\"6b959c34-c8dd-4587-985e-f005036d5c19\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_1\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":10,\"i\":\"d0bcb363-e35c-4eda-8bc1-3bde850ff7cf\",\"w\":12,\"x\":0,\"y\":11},\"panelIndex\":\"d0bcb363-e35c-4eda-8bc1-3bde850ff7cf\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_2\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":10,\"i\":\"34ae553a-89a9-48c7-be20-aed5378f047f\",\"w\":12,\"x\":12,\"y\":11},\"panelIndex\":\"34ae553a-89a9-48c7-be20-aed5378f047f\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_3\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":10,\"i\":\"688aaf07-3775-4eea-8b89-dd21a3105983\",\"w\":12,\"x\":24,\"y\":11},\"panelIndex\":\"688aaf07-3775-4eea-8b89-dd21a3105983\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_4\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":10,\"i\":\"f772179d-9071-4f66-b658-11b29d42893a\",\"w\":11,\"x\":36,\"y\":11},\"panelIndex\":\"f772179d-9071-4f66-b658-11b29d42893a\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_5\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":9,\"i\":\"65de1d73-69b3-418a-a087-87c6c3fa03aa\",\"w\":12,\"x\":0,\"y\":21},\"panelIndex\":\"65de1d73-69b3-418a-a087-87c6c3fa03aa\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_6\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":9,\"i\":\"99310550-57db-4649-b384-7034750f0fa5\",\"w\":12,\"x\":12,\"y\":21},\"panelIndex\":\"99310550-57db-4649-b384-7034750f0fa5\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_7\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":9,\"i\":\"e70a5b6d-195b-4ead-b413-5ebc0ca91f8b\",\"w\":12,\"x\":24,\"y\":21},\"panelIndex\":\"e70a5b6d-195b-4ead-b413-5ebc0ca91f8b\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_8\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":9,\"i\":\"df8ade74-a938-473c-adda-b3c0ac35b9ce\",\"w\":11,\"x\":36,\"y\":21},\"panelIndex\":\"df8ade74-a938-473c-adda-b3c0ac35b9ce\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_9\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":12,\"i\":\"c8b1671d-c6aa-4b68-9ca7-0fd6613fbeea\",\"w\":24,\"x\":0,\"y\":30},\"panelIndex\":\"c8b1671d-c6aa-4b68-9ca7-0fd6613fbeea\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_10\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":12,\"i\":\"cafff520-4093-43a8-b6e9-8585e21ce179\",\"w\":23,\"x\":24,\"y\":30},\"panelIndex\":\"cafff520-4093-43a8-b6e9-8585e21ce179\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_11\"}]","timeRestore":false,"title":"Overview Dashboard","version":1},"id":"3b331b30-b987-11ea-b16e-fb06687c3589","migrationVersion":{"dashboard":"7.3.0"},"references":[{"id":"b990e3f0-b9ae-11ea-b16e-fb06687c3589","name":"panel_0","type":"visualization"},{"id":"df9ec4c0-b983-11ea-b16e-fb06687c3589","name":"panel_1","type":"visualization"},{"id":"b265b3e0-b985-11ea-b16e-fb06687c3589","name":"panel_2","type":"visualization"},{"id":"3efa51d0-b986-11ea-b16e-fb06687c3589","name":"panel_3","type":"visualization"},{"id":"051d3d60-b986-11ea-b16e-fb06687c3589","name":"panel_4","type":"visualization"},{"id":"6ac7d9e0-b986-11ea-b16e-fb06687c3589","name":"panel_5","type":"visualization"},{"id":"a33e14e0-b992-11ea-b16e-fb06687c3589","name":"panel_6","type":"visualization"},{"id":"b14081e0-b992-11ea-b16e-fb06687c3589","name":"panel_7","type":"visualization"},{"id":"910eee20-b992-11ea-b16e-fb06687c3589","name":"panel_8","type":"visualization"},{"id":"c74e1b50-b992-11ea-b16e-fb06687c3589","name":"panel_9","type":"visualization"},{"id":"d3760780-b988-11ea-b16e-fb06687c3589","name":"panel_10","type":"visualization"},{"id":"766c7960-b989-11ea-b16e-fb06687c3589","name":"panel_11","type":"visualization"}],"type":"dashboard","updated_at":"2021-08-07T23:30:40.150Z","version":"WzI5LDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Aggregated Tx Mbps by Service Acting as Destination","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"show_legend\":1,\"show_grid\":1,\"axis_min\":\"0\",\"filter\":\"\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false,\"index_pattern\":\"flow-*\",\"interval\":\"1m\",\"time_field\":\"ipfix.flowEndSeconds\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"rgba(144,201,227,1)\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"type\":\"sum\",\"field\":\"ipfix.reverseThroughput\"},{\"script\":\"params.bytes * 8\",\"id\":\"dd0b81d0-b9a6-11ea-9740-552c943910e4\",\"type\":\"calculation\",\"variables\":[{\"id\":\"e1f87e50-b9a6-11ea-9740-552c943910e4\",\"name\":\"bytes\",\"field\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\"}]}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":\"2\",\"point_size\":\"0\",\"fill\":\"0.6\",\"stacked\":\"none\",\"split_color_mode\":\"rainbow\",\"label\":\"Bytes\",\"terms_field\":\"ipfix.destinationServicePortName.keyword\",\"terms_size\":\"30\",\"terms_order_by\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"value_template\":\"{{value}}its/s\",\"type\":\"timeseries\"}]},\"title\":\"Aggregated Tx Mbps by Service Acting as Destination\"}"},"id":"3ccd6430-d086-11ea-a734-57fc7859997d","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzMwLDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"lucene\",\"query\":\"\"},\"filter\":[]}"},"title":"Pod-to-External Flow Nav","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"index_pattern\":\"flow-*\",\"interval\":\"auto\",\"isModelInvalid\":false,\"markdown_css\":\"#markdown-61ca57f0-469d-11e7-af02-69e470af7417 p{color:#cccccc;margin-top:0;margin-bottom:8px;text-align:right}#markdown-61ca57f0-469d-11e7-af02-69e470af7417 p a{color:#1eadbd;font-size:17px;font-weight:bold;text-decoration:none}#markdown-61ca57f0-469d-11e7-af02-69e470af7417 p a strong{color:#ffac12;font-weight:bold}#markdown-61ca57f0-469d-11e7-af02-69e470af7417 hr{background-color:#cccccc;margin:0;height:1px}\",\"markdown_less\":\"p {\\n color: #cccccc;\\n margin-top: 0px;\\n margin-bottom: 8px;\\n text-align: right;\\n}\\np a {\\n color: #1eadbd;\\n\\tfont-size: 17px;\\n\\tfont-weight: bold;\\n\\ttext-decoration: none;\\n}\\np a strong {\\n color: #ffac12;\\n\\tfont-weight: bold;\\n}\\nhr {\\n background-color: #cccccc;\\n margin: 0px;\\n height: 1px;\\n}\",\"markdown_vertical_align\":\"top\",\"series\":[{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"number\",\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"line_width\":1,\"metrics\":[{\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"count\"}],\"offset_time\":\"-5y\",\"point_size\":1,\"separate_axis\":0,\"split_color_mode\":\"gradient\",\"split_mode\":\"everything\",\"stacked\":\"none\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":null,\"type\":\"markdown\",\"markdown\":\"[Overview](#/dashboard/3b331b30-b987-11ea-b16e-fb06687c3589) | [Pod-to-Pod Flow](#/dashboard/c2b15fb0-b9a8-11ea-b16e-fb06687c3589) | [**Pod-to-External Flow**](#/dashboard/3ed71e80-a92d-11eb-a7ef-5dcb53008c10) | [Pod-to-Service Flow](#/dashboard/6d77e8a0-513a-11eb-a19a-05e08a82dcf8) | [Node](#/dashboard/5400cdf0-cd2e-11ea-8911-87da3aad0324) | [Network Policy](#/dashboard/c5af6850-23b2-11eb-90d2-a7a4de48218a) | [Flow Records](#/dashboard/2ab9c220-b984-11ea-b16e-fb06687c3589)\"},\"title\":\"Pod-to-External Flow Nav\"}"},"id":"af8f70b0-a93b-11eb-a7ef-5dcb53008c10","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzMxLDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}"},"title":"Pod-to-External Traffic Cumulative Bytes","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"vega\",\"aggs\":[],\"params\":{\"spec\":\"{\\n \\\"$schema\\\": \\\"https://vega.github.io/schema/vega/v3.0.json\\\",\\n \\\"data\\\": [\\n {\\n \\\"name\\\": \\\"rawData\\\",\\n \\\"url\\\": {\\n \\\"%context%\\\": true,\\n \\\"%timefield%\\\": \\\"@timestamp\\\",\\n \\\"index\\\": \\\"flow-*\\\",\\n \\\"body\\\": {\\n \\\"size\\\": 0,\\n \\\"aggs\\\": {\\n \\\"table\\\": {\\n \\\"composite\\\": {\\n \\\"size\\\": 1000,\\n \\\"sources\\\": [\\n {\\\"stk1\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.sourcePodName.keyword\\\"}}},\\n {\\\"stk1ns\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.sourcePodNamespace.keyword\\\"}}},\\n {\\\"stk2\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.destinationIP.keyword\\\"}}},\\n {\\\"stk3\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.sourceIP.keyword\\\"}}},\\n {\\\"stk4\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.flowTypeStr.keyword\\\"}}},\\n ]\\n },\\n \\t\\t\\t\\\"aggs\\\": {\\n \\t\\t\\t\\t\\\"bytes\\\": {\\n \\t\\t\\t\\t\\t\\\"sum\\\": {\\n \\t\\t\\t\\t\\t\\t\\\"field\\\": \\\"ipfix.octetDeltaCountFromSourceNode\\\"\\n \\t\\t\\t\\t\\t}\\n \\t\\t\\t\\t}\\n \\t\\t\\t}\\n }\\n }\\n }\\n },\\n \\\"format\\\": {\\\"property\\\": \\\"aggregations.table.buckets\\\"},\\n \\\"transform\\\": [\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk1ns +'/'+ datum.key.stk1\\\", \\\"as\\\": \\\"stk1s\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"(datum.key.stk1==''?datum.key.stk3:datum.stk1s)\\\", \\\"as\\\": \\\"stk1\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk2\\\", \\\"as\\\": \\\"stk2\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk3\\\", \\\"as\\\": \\\"stk3\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk4\\\", \\\"as\\\": \\\"stk4\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.bytes.value\\\", \\\"as\\\": \\\"size\\\"}\\n ]\\n },\\n {\\n \\\"name\\\": \\\"nodes\\\",\\n \\\"source\\\": \\\"rawData\\\",\\n \\\"transform\\\": [\\n {\\n \\\"type\\\": \\\"filter\\\",\\n \\\"expr\\\": \\\"datum.stk4 =='To External' && !groupSelector || groupSelector.stk1 == datum.stk1 || groupSelector.stk2 == datum.stk2\\\"\\n },\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.stk1+datum.stk2\\\", \\\"as\\\": \\\"key\\\"},\\n {\\\"type\\\": \\\"fold\\\", \\\"fields\\\": [\\\"stk1\\\", \\\"stk2\\\"], \\\"as\\\": [\\\"stack\\\", \\\"grpId\\\"]},\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"datum.stack == 'stk1' ? datum.stk1+datum.stk2 : datum.stk2+datum.stk1\\\",\\n \\\"as\\\": \\\"sortField\\\"\\n },\\n {\\n \\\"type\\\": \\\"stack\\\",\\n \\\"groupby\\\": [\\\"stack\\\"],\\n \\\"sort\\\": {\\\"field\\\": \\\"sortField\\\", \\\"order\\\": \\\"descending\\\"},\\n \\\"field\\\": \\\"size\\\"\\n },\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"(datum.y0+datum.y1)/2\\\", \\\"as\\\": \\\"yc\\\"}\\n ]\\n },\\n {\\n \\\"name\\\": \\\"groups\\\",\\n \\\"source\\\": \\\"nodes\\\",\\n \\\"transform\\\": [\\n {\\n \\\"type\\\": \\\"aggregate\\\",\\n \\\"groupby\\\": [\\\"stack\\\", \\\"grpId\\\"],\\n \\\"fields\\\": [\\\"size\\\"],\\n \\\"ops\\\": [\\\"sum\\\"],\\n \\\"as\\\": [\\\"total\\\"]\\n },\\n {\\n \\\"type\\\": \\\"stack\\\",\\n \\\"groupby\\\": [\\\"stack\\\"],\\n \\\"sort\\\": {\\\"field\\\": \\\"grpId\\\", \\\"order\\\": \\\"descending\\\"},\\n \\\"field\\\": \\\"total\\\"\\n },\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"scale('y', datum.y0)\\\", \\\"as\\\": \\\"scaledY0\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"scale('y', datum.y1)\\\", \\\"as\\\": \\\"scaledY1\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.stack == 'stk1'\\\", \\\"as\\\": \\\"rightLabel\\\"},\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"datum.total/domain('y')[1]\\\",\\n \\\"as\\\": \\\"percentage\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"destinationNodes\\\",\\n \\\"source\\\": \\\"nodes\\\",\\n \\\"transform\\\": [{\\\"type\\\": \\\"filter\\\", \\\"expr\\\": \\\"datum.stack == 'stk2'\\\"}]\\n },\\n {\\n \\\"name\\\": \\\"edges\\\",\\n \\\"source\\\": \\\"nodes\\\",\\n \\\"transform\\\": [\\n {\\\"type\\\": \\\"filter\\\", \\\"expr\\\": \\\"datum.stack == 'stk1'\\\"},\\n {\\n \\\"type\\\": \\\"lookup\\\",\\n \\\"from\\\": \\\"destinationNodes\\\",\\n \\\"key\\\": \\\"key\\\",\\n \\\"fields\\\": [\\\"key\\\"],\\n \\\"as\\\": [\\\"target\\\"]\\n },\\n {\\n \\\"type\\\": \\\"linkpath\\\",\\n \\\"orient\\\": \\\"horizontal\\\",\\n \\\"shape\\\": \\\"diagonal\\\",\\n \\\"sourceY\\\": {\\\"expr\\\": \\\"scale('y', datum.yc)\\\"},\\n \\\"sourceX\\\": {\\\"expr\\\": \\\"scale('x', 'stk1') + bandwidth('x')\\\"},\\n \\\"targetY\\\": {\\\"expr\\\": \\\"scale('y', datum.target.yc)\\\"},\\n \\\"targetX\\\": {\\\"expr\\\": \\\"scale('x', 'stk2')\\\"}\\n },\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"range('y')[0]-scale('y', datum.size)\\\",\\n \\\"as\\\": \\\"strokeWidth\\\"\\n },\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"datum.size/domain('y')[1]\\\",\\n \\\"as\\\": \\\"percentage\\\"\\n }\\n ]\\n }\\n ],\\n \\\"scales\\\": [\\n {\\n \\\"name\\\": \\\"x\\\",\\n \\\"type\\\": \\\"band\\\",\\n \\\"range\\\": \\\"width\\\",\\n \\\"domain\\\": [\\\"stk1\\\", \\\"stk2\\\"],\\n \\\"paddingOuter\\\": 0.01,\\n \\\"paddingInner\\\": 0.98\\n },\\n {\\n \\\"name\\\": \\\"y\\\",\\n \\\"type\\\": \\\"linear\\\",\\n \\\"range\\\": \\\"height\\\",\\n \\\"domain\\\": {\\\"data\\\": \\\"nodes\\\", \\\"field\\\": \\\"y1\\\"}\\n },\\n {\\n \\\"name\\\": \\\"color\\\",\\n \\\"type\\\": \\\"ordinal\\\",\\n \\\"range\\\": \\\"category\\\",\\n \\\"domain\\\": {\\\"data\\\": \\\"rawData\\\", \\\"fields\\\": [\\\"stk1\\\",\\\"stk2\\\"]}\\n },\\n {\\n \\\"name\\\": \\\"stackNames\\\",\\n \\\"type\\\": \\\"ordinal\\\",\\n \\\"range\\\": [\\\"Source Pod\\\", \\\"Destination IP\\\"],\\n \\\"domain\\\": [\\\"stk1\\\", \\\"stk2\\\"]\\n }\\n ],\\n \\\"axes\\\": [\\n {\\n \\\"orient\\\": \\\"bottom\\\",\\n \\\"scale\\\": \\\"x\\\",\\n \\\"labelColor\\\": {\\n \\\"value\\\": \\\"#888888\\\"\\n },\\n \\\"encode\\\": {\\n \\\"labels\\\": {\\n \\\"update\\\": {\\n \\\"text\\\": {\\\"scale\\\": \\\"stackNames\\\", \\\"field\\\": \\\"value\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 14}\\n }\\n }\\n }\\n },\\n {\\n \\\"orient\\\": \\\"left\\\",\\n \\\"scale\\\": \\\"y\\\",\\n \\\"labelColor\\\": {\\n \\\"value\\\": \\\"#888888\\\"\\n },\\n \\\"encode\\\": {\\n \\\"labels\\\": {\\n \\\"update\\\": {\\n \\\"text\\\": {\\\"signal\\\": \\\"format(datum.value, '.2s') + 'B'\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 12}\\n }\\n }\\n }\\n }\\n ],\\n \\\"marks\\\": [\\n {\\n \\\"type\\\": \\\"path\\\",\\n \\\"name\\\": \\\"edgeMark\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"edges\\\"},\\n \\\"clip\\\": true,\\n \\\"encode\\\": {\\n \\\"update\\\": {\\n \\\"stroke\\\": [\\n {\\n \\\"test\\\": \\\"groupSelector && groupSelector.stack=='stk1'\\\",\\n \\\"scale\\\": \\\"color\\\",\\n \\\"field\\\": \\\"stk2\\\"\\n },\\n {\\\"scale\\\": \\\"color\\\", \\\"field\\\": \\\"stk1\\\"}\\n ],\\n \\\"strokeWidth\\\": {\\\"field\\\": \\\"strokeWidth\\\"},\\n \\\"path\\\": {\\\"field\\\": \\\"path\\\"},\\n \\\"strokeOpacity\\\": {\\n \\\"signal\\\": \\\"!groupSelector && (groupHover.stk1 == datum.stk1 || groupHover.stk2 == datum.stk2) ? 0.75 : 0.3\\\"\\n },\\n \\\"zindex\\\": {\\n \\\"signal\\\": \\\"!groupSelector && (groupHover.stk1 == datum.stk1 || groupHover.stk2 == datum.stk2) ? 1 : 0\\\"\\n },\\n \\\"tooltip\\\": {\\n \\\"signal\\\": \\\"{'title': datum.stk1 + ' → ' + datum.stk2 + ' ' + format(datum.size, '.2s') + 'B (' + format(datum.percentage, '.1%') + ')', 'IP Address': datum.stk3 +' → ' + datum.stk2 }\\\"\\n }\\n },\\n \\\"hover\\\": {\\\"strokeOpacity\\\": {\\\"value\\\": 0.75}}\\n }\\n },\\n {\\n \\\"type\\\": \\\"rect\\\",\\n \\\"name\\\": \\\"groupMark\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"groups\\\"},\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"fill\\\": {\\\"scale\\\": \\\"color\\\", \\\"field\\\": \\\"grpId\\\"},\\n \\\"width\\\": {\\\"scale\\\": \\\"x\\\", \\\"band\\\": 1}\\n },\\n \\\"update\\\": {\\n \\\"x\\\": {\\\"scale\\\": \\\"x\\\", \\\"field\\\": \\\"stack\\\"},\\n \\\"y\\\": {\\\"field\\\": \\\"scaledY0\\\"},\\n \\\"y2\\\": {\\\"field\\\": \\\"scaledY1\\\"},\\n \\\"fillOpacity\\\": {\\\"value\\\": 0.7},\\n \\\"tooltip\\\": {\\n \\\"signal\\\": \\\"datum.grpId + ' ' + format(datum.total, '.2s') + 'B (' + format(datum.percentage, '.1%') + ')'\\\"\\n }\\n },\\n \\\"hover\\\": {\\\"fillOpacity\\\": {\\\"value\\\": 1}}\\n }\\n },\\n {\\n \\\"type\\\": \\\"text\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"groups\\\"},\\n \\\"interactive\\\": false,\\n \\\"encode\\\": {\\n \\\"update\\\": {\\n \\\"x\\\": {\\n \\\"signal\\\": \\\"scale('x', datum.stack) + (datum.rightLabel ? bandwidth('x') + 8 : -8)\\\"\\n },\\n \\\"yc\\\": {\\\"signal\\\": \\\"(datum.scaledY0 + datum.scaledY1)/2\\\"},\\n \\\"align\\\": {\\\"signal\\\": \\\"datum.rightLabel ? 'left' : 'right'\\\"},\\n \\\"baseline\\\": {\\\"value\\\": \\\"middle\\\"},\\n \\\"fontWeight\\\": {\\\"value\\\": \\\"bold\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 12},\\n \\\"text\\\": {\\n \\\"signal\\\": \\\"abs(datum.scaledY0-datum.scaledY1) > 10 ? datum.grpId : ''\\\"\\n }\\n }\\n }\\n },\\n {\\n \\\"type\\\": \\\"group\\\",\\n \\\"data\\\": [\\n {\\n \\\"name\\\": \\\"dataForShowAll\\\",\\n \\\"values\\\": [{}],\\n \\\"transform\\\": [{\\\"type\\\": \\\"filter\\\", \\\"expr\\\": \\\"groupSelector\\\"}]\\n }\\n ],\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"xc\\\": {\\\"signal\\\": \\\"width/2\\\"},\\n \\\"y\\\": {\\\"value\\\": 30},\\n \\\"width\\\": {\\\"value\\\": 100},\\n \\\"height\\\": {\\\"value\\\": 36}\\n }\\n },\\n \\\"marks\\\": [\\n {\\n \\\"type\\\": \\\"group\\\",\\n \\\"name\\\": \\\"groupReset\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"dataForShowAll\\\"},\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"cornerRadius\\\": {\\\"value\\\": 3.5},\\n \\\"fill\\\": {\\\"value\\\": \\\"#666666\\\"},\\n \\\"height\\\": {\\\"field\\\": {\\\"group\\\": \\\"height\\\"}},\\n \\\"width\\\": {\\\"field\\\": {\\\"group\\\": \\\"width\\\"}}\\n },\\n \\\"update\\\": {\\\"opacity\\\": {\\\"value\\\": 1}},\\n \\\"hover\\\": {\\\"fill\\\": {\\\"value\\\": \\\"#444444\\\"}}\\n },\\n \\\"marks\\\": [\\n {\\n \\\"type\\\": \\\"text\\\",\\n \\\"interactive\\\": false,\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"xc\\\": {\\\"field\\\": {\\\"group\\\": \\\"width\\\"}, \\\"mult\\\": 0.5},\\n \\\"yc\\\": {\\\"field\\\": {\\\"group\\\": \\\"height\\\"}, \\\"mult\\\": 0.5, \\\"offset\\\": 1},\\n \\\"align\\\": {\\\"value\\\": \\\"center\\\"},\\n \\\"baseline\\\": {\\\"value\\\": \\\"middle\\\"},\\n \\\"text\\\": {\\\"value\\\": \\\"Show All\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 14},\\n \\\"stroke\\\": {\\\"value\\\": \\\"#ecf0f1\\\"}\\n }\\n }\\n }\\n ]\\n }\\n ]\\n }\\n ],\\n \\\"signals\\\": [\\n {\\n \\\"name\\\": \\\"groupHover\\\",\\n \\\"value\\\": {},\\n \\\"on\\\": [\\n {\\n \\\"events\\\": \\\"@groupMark:mouseover\\\",\\n \\\"update\\\": \\\"{stk1:datum.stack=='stk1' && datum.grpId, stk2:datum.stack=='stk2' && datum.grpId}\\\"\\n },\\n {\\\"events\\\": \\\"mouseout\\\", \\\"update\\\": \\\"{}\\\"}\\n ]\\n },\\n {\\n \\\"name\\\": \\\"groupSelector\\\",\\n \\\"value\\\": false,\\n \\\"on\\\": [\\n {\\n \\\"events\\\": \\\"@groupMark:click!\\\",\\n \\\"update\\\": \\\"{stack:datum.stack, stk1:datum.stack=='stk1' && datum.grpId, stk2:datum.stack=='stk2' && datum.grpId}\\\"\\n },\\n {\\n \\\"events\\\": [\\n {\\\"type\\\": \\\"click\\\", \\\"markname\\\": \\\"groupReset\\\"},\\n {\\\"type\\\": \\\"dblclick\\\"}\\n ],\\n \\\"update\\\": \\\"false\\\"\\n }\\n ]\\n }\\n ]\\n}\"},\"title\":\"Pod-to-External Traffic Cumulative Bytes\"}"},"id":"7a428f90-a937-11eb-a7ef-5dcb53008c10","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzMyLDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Tx Mbps by Pod-to-External Flow","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"show_legend\":1,\"show_grid\":1,\"axis_min\":\"0\",\"filter\":\"\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false,\"index_pattern\":\"flow-*\",\"interval\":\"1m\",\"time_field\":\"ipfix.flowEndSeconds\",\"background_color_rules\":[{\"id\":\"4010d970-50b9-11eb-8f30-87baf4f5ad91\"}],\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"rgba(144,201,227,1)\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"type\":\"sum\",\"field\":\"ipfix.throughput\"},{\"script\":\"params.bytes * 8 \",\"id\":\"dd0b81d0-b9a6-11ea-9740-552c943910e4\",\"type\":\"calculation\",\"variables\":[{\"id\":\"e1f87e50-b9a6-11ea-9740-552c943910e4\",\"name\":\"bytes\",\"field\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\"}]}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":\"2\",\"point_size\":\"0\",\"fill\":\"0.6\",\"stacked\":\"none\",\"split_color_mode\":\"rainbow\",\"label\":\"Bytes\",\"terms_field\":\"ipfix.flowKeyPodToExternal.keyword\",\"terms_size\":\"30\",\"terms_order_by\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"value_template\":\"{{value}}it/s\",\"type\":\"timeseries\",\"terms_exclude\":\"\",\"filter\":{\"query\":\"\",\"language\":\"kuery\"}}]},\"title\":\"Tx Mbps by Pod-to-External Flow\"}"},"id":"4a9b7d30-a93f-11eb-a7ef-5dcb53008c10","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzMzLDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Cumulative Bandwidth by Pod-to-External Flow","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"show_legend\":1,\"show_grid\":1,\"axis_min\":\"0\",\"filter\":\"\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false,\"index_pattern\":\"flow-*\",\"interval\":\"1m\",\"time_field\":\"ipfix.flowEndSeconds\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"rgba(144,201,227,1)\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"type\":\"sum\",\"field\":\"ipfix.octetTotalCountFromSourceNode\"},{\"script\":\"params.bytes * 8\",\"id\":\"dd0b81d0-b9a6-11ea-9740-552c943910e4\",\"type\":\"calculation\",\"variables\":[{\"id\":\"e1f87e50-b9a6-11ea-9740-552c943910e4\",\"name\":\"bytes\",\"field\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\"}]}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":\"2\",\"point_size\":\"0\",\"fill\":\"0.6\",\"stacked\":\"none\",\"split_color_mode\":\"rainbow\",\"label\":\"Bytes\",\"terms_field\":\"ipfix.flowKeyPodToExternal.keyword\",\"terms_size\":\"30\",\"terms_order_by\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"value_template\":\"{{value}}\",\"type\":\"timeseries\"}]},\"title\":\"Cumulative Bandwidth by Pod-to-External Flow\"}"},"id":"73518c10-a93f-11eb-a7ef-5dcb53008c10","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzM0LDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Rx Mbps by Pod-to-External Flow","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"show_legend\":1,\"show_grid\":1,\"axis_min\":\"0\",\"filter\":\"\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false,\"index_pattern\":\"flow-*\",\"interval\":\"1m\",\"time_field\":\"ipfix.flowEndSeconds\",\"legend_position\":\"right\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"rgba(144,201,227,1)\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"type\":\"sum\",\"field\":\"ipfix.reverseThroughput\"},{\"script\":\"params.bytes * 8 \",\"id\":\"dd0b81d0-b9a6-11ea-9740-552c943910e4\",\"type\":\"calculation\",\"variables\":[{\"id\":\"e1f87e50-b9a6-11ea-9740-552c943910e4\",\"name\":\"bytes\",\"field\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\"}]}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":\"2\",\"point_size\":\"0\",\"fill\":\"0.6\",\"stacked\":\"none\",\"split_color_mode\":\"rainbow\",\"label\":\"Bytes\",\"terms_field\":\"ipfix.flowKeyPodToExternal.keyword\",\"terms_size\":\"30\",\"terms_order_by\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"value_template\":\"{{value}}it/s\",\"type\":\"timeseries\",\"terms_exclude\":\"\"}]},\"title\":\"Rx Mbps by Pod-to-External Flow\"}"},"id":"857d7e80-a93f-11eb-a7ef-5dcb53008c10","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzM1LDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Aggregated Rx Mbps by Pod Acting as Source","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"show_legend\":1,\"show_grid\":1,\"axis_min\":\"0\",\"filter\":\"\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false,\"index_pattern\":\"flow-*\",\"interval\":\"1m\",\"time_field\":\"ipfix.flowEndSeconds\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"rgba(144,201,227,1)\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"type\":\"sum\",\"field\":\"ipfix.reverseThroughput\"},{\"script\":\"params.bytes * 8\",\"id\":\"dd0b81d0-b9a6-11ea-9740-552c943910e4\",\"type\":\"calculation\",\"variables\":[{\"id\":\"e1f87e50-b9a6-11ea-9740-552c943910e4\",\"name\":\"bytes\",\"field\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\"}]}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":\"2\",\"point_size\":\"0\",\"fill\":\"0.6\",\"stacked\":\"none\",\"split_color_mode\":\"rainbow\",\"label\":\"Bytes\",\"terms_field\":\"ipfix.sourcePodName.keyword\",\"terms_size\":\"30\",\"terms_order_by\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"value_template\":\"{{value}}its/s\",\"type\":\"timeseries\"}]},\"title\":\"Aggregated Rx Mbps by Pod Acting as Source\"}"},"id":"68f05640-c243-11ea-873e-8f9a9a3cbdc1","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzM2LDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"lucene\",\"query\":\"\"},\"filter\":[]}"},"title":"Title: From Source Node","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"index_pattern\":\"flow-*\",\"interval\":\"auto\",\"isModelInvalid\":false,\"markdown_vertical_align\":\"top\",\"series\":[{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"number\",\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"line_width\":1,\"metrics\":[{\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"count\"}],\"offset_time\":\"-5y\",\"point_size\":1,\"separate_axis\":0,\"split_color_mode\":\"gradient\",\"split_mode\":\"everything\",\"stacked\":\"none\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":null,\"type\":\"markdown\",\"markdown_css\":\"#markdown-61ca57f0-469d-11e7-af02-69e470af7417 p{font-size:8pt;margin-top:0;margin-bottom:8px;text-align:left}\",\"markdown_less\":\"p {\\n font-size: 8pt;\\n margin-top: 0px;\\n margin-bottom: 8px;\\n text-align: left;\\n}\",\"markdown\":\"**\\\\*All stats are from source Node if the flow is in between two Nodes (inter-Node flows). This distinction is not applicable for intra-Node flows.**\"},\"title\":\"Title: From Source Node\"}"},"id":"f8323bc0-514f-11eb-a19a-05e08a82dcf8","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzM3LDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Reverse Cumulative Bandwidth by Pod-to-External Flow","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"show_legend\":1,\"show_grid\":1,\"axis_min\":\"0\",\"filter\":\"\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false,\"index_pattern\":\"flow-*\",\"interval\":\"1m\",\"time_field\":\"ipfix.flowEndSeconds\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"rgba(144,201,227,1)\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"type\":\"sum\",\"field\":\"ipfix.reverseOctetTotalCountFromSourceNode\"},{\"script\":\"params.bytes * 8\",\"id\":\"dd0b81d0-b9a6-11ea-9740-552c943910e4\",\"type\":\"calculation\",\"variables\":[{\"id\":\"e1f87e50-b9a6-11ea-9740-552c943910e4\",\"name\":\"bytes\",\"field\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\"}]}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":\"2\",\"point_size\":\"0\",\"fill\":\"0.6\",\"stacked\":\"none\",\"split_color_mode\":\"rainbow\",\"label\":\"Bytes\",\"terms_field\":\"ipfix.flowKeyPodToExternal.keyword\",\"terms_size\":\"30\",\"terms_order_by\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"value_template\":\"{{value}}\",\"type\":\"timeseries\"}]},\"title\":\"Reverse Cumulative Bandwidth by Pod-to-External Flow\"}"},"id":"94adbd20-a93f-11eb-a7ef-5dcb53008c10","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzM4LDFd"}
-{"attributes":{"description":"","hits":0,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}"},"optionsJSON":"{\"hidePanelTitles\":false,\"useMargins\":true}","panelsJSON":"[{\"embeddableConfig\":{\"title\":\"\"},\"gridData\":{\"h\":3,\"i\":\"13e1880c-a00d-42e2-bbaa-9f3dcaddbb18\",\"w\":48,\"x\":0,\"y\":0},\"panelIndex\":\"13e1880c-a00d-42e2-bbaa-9f3dcaddbb18\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_0\"},{\"embeddableConfig\":{\"title\":\"\"},\"gridData\":{\"h\":5,\"i\":\"f5f6c39c-9514-4025-a240-250cfbfc1ab6\",\"w\":48,\"x\":0,\"y\":3},\"panelIndex\":\"f5f6c39c-9514-4025-a240-250cfbfc1ab6\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_1\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":27,\"i\":\"ea45ecd2-c2f9-4973-b999-93f4ba1d3e19\",\"w\":24,\"x\":0,\"y\":8},\"panelIndex\":\"ea45ecd2-c2f9-4973-b999-93f4ba1d3e19\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_2\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":27,\"i\":\"a3fb9b2d-6839-49dc-b1fb-b00a10f02bb6\",\"w\":24,\"x\":24,\"y\":8},\"panelIndex\":\"a3fb9b2d-6839-49dc-b1fb-b00a10f02bb6\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_3\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"84015a09-6cef-47c2-9ff8-422816d286ca\",\"w\":24,\"x\":0,\"y\":35},\"panelIndex\":\"84015a09-6cef-47c2-9ff8-422816d286ca\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_4\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"735892b3-e4d8-4f75-b858-7464477a7adf\",\"w\":24,\"x\":24,\"y\":35},\"panelIndex\":\"735892b3-e4d8-4f75-b858-7464477a7adf\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_5\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"d83090d2-4aa6-4e62-957e-135412ff1c7e\",\"w\":24,\"x\":0,\"y\":50},\"panelIndex\":\"d83090d2-4aa6-4e62-957e-135412ff1c7e\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_6\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"d3a735b0-e1e7-4751-89f4-f69be3d341c5\",\"w\":24,\"x\":24,\"y\":65},\"panelIndex\":\"d3a735b0-e1e7-4751-89f4-f69be3d341c5\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_7\"},{\"embeddableConfig\":{\"title\":\"Aggregated Tx Mbps by Pod Acting as Source\"},\"gridData\":{\"h\":15,\"i\":\"94c135b5-ab6b-41db-831e-7adb96282635\",\"w\":24,\"x\":0,\"y\":65},\"panelIndex\":\"94c135b5-ab6b-41db-831e-7adb96282635\",\"title\":\"Aggregated Tx Mbps by Pod Acting as Source\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_8\"},{\"embeddableConfig\":{\"title\":\"\"},\"gridData\":{\"h\":2,\"i\":\"3b5dd519-11fe-41d0-9379-d6d8576fb688\",\"w\":48,\"x\":0,\"y\":80},\"panelIndex\":\"3b5dd519-11fe-41d0-9379-d6d8576fb688\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_9\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"0d9793b3-945a-48f9-9260-139776553b25\",\"w\":24,\"x\":24,\"y\":50},\"panelIndex\":\"0d9793b3-945a-48f9-9260-139776553b25\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_10\"}]","timeRestore":false,"title":"Pod-to-External Flow Dashboard","version":1},"id":"3ed71e80-a92d-11eb-a7ef-5dcb53008c10","migrationVersion":{"dashboard":"7.3.0"},"references":[{"id":"af8f70b0-a93b-11eb-a7ef-5dcb53008c10","name":"panel_0","type":"visualization"},{"id":"1ec263c0-a93c-11eb-a7ef-5dcb53008c10","name":"panel_1","type":"visualization"},{"id":"7a428f90-a937-11eb-a7ef-5dcb53008c10","name":"panel_2","type":"visualization"},{"id":"0d0aac60-a93b-11eb-a7ef-5dcb53008c10","name":"panel_3","type":"visualization"},{"id":"4a9b7d30-a93f-11eb-a7ef-5dcb53008c10","name":"panel_4","type":"visualization"},{"id":"73518c10-a93f-11eb-a7ef-5dcb53008c10","name":"panel_5","type":"visualization"},{"id":"857d7e80-a93f-11eb-a7ef-5dcb53008c10","name":"panel_6","type":"visualization"},{"id":"68f05640-c243-11ea-873e-8f9a9a3cbdc1","name":"panel_7","type":"visualization"},{"id":"114eba40-55d4-11e8-a695-171fb712da36","name":"panel_8","type":"visualization"},{"id":"f8323bc0-514f-11eb-a19a-05e08a82dcf8","name":"panel_9","type":"visualization"},{"id":"94adbd20-a93f-11eb-a7ef-5dcb53008c10","name":"panel_10","type":"visualization"}],"type":"dashboard","updated_at":"2021-08-07T23:30:40.150Z","version":"WzM5LDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"filter\":[]}"},"title":"Egress Network Policy Packets","uiStateJSON":"{\"vis\":{\"colors\":{\"default\":\"#F2C96D\"}}}","version":1,"visState":"{\"type\":\"pie\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"sum\",\"schema\":\"metric\",\"params\":{\"field\":\"ipfix.packets\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ipfix.egressNetworkPolicyNamespace.keyword\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":30,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"exclude\":\"\",\"customLabel\":\"Namespace\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ipfix.egressNetworkPolicyName.keyword\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Network Policy Name\"}}],\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":true,\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100},\"dimensions\":{\"metric\":{\"accessor\":0,\"format\":{\"id\":\"number\"},\"params\":{},\"aggType\":\"count\"}}},\"title\":\"Egress Network Policy Packets\"}"},"id":"40e05390-23b8-11eb-90d2-a7a4de48218a","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzQwLDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Network Policy Filter","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"input_control_vis\",\"aggs\":[],\"params\":{\"controls\":[{\"id\":\"1526108883717\",\"fieldName\":\"ipfix.egressNetworkPolicyNamespace.keyword\",\"label\":\"Egress Network Policy Namespace\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"size\":1000,\"order\":\"desc\",\"dynamicOptions\":false},\"indexPatternRefName\":\"control_0_index_pattern\"},{\"id\":\"1526107640219\",\"fieldName\":\"ipfix.egressNetworkPolicyName.keyword\",\"label\":\"Egress Network Policy Name\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"size\":1000,\"order\":\"desc\",\"dynamicOptions\":false},\"indexPatternRefName\":\"control_1_index_pattern\"},{\"id\":\"1592936602245\",\"fieldName\":\"ipfix.ingressNetworkPolicyNamespace.keyword\",\"parent\":\"\",\"label\":\"Ingress Network Policy Namespace\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":false,\"size\":1000,\"order\":\"desc\"},\"indexPatternRefName\":\"control_2_index_pattern\"},{\"id\":\"1526108909005\",\"fieldName\":\"ipfix.ingressNetworkPolicyName.keyword\",\"label\":\"Ingress Network Policy Name\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"size\":1000,\"order\":\"desc\",\"dynamicOptions\":false},\"indexPatternRefName\":\"control_3_index_pattern\"}],\"updateFiltersOnChange\":true,\"useTimeFilter\":true,\"pinFilters\":true},\"title\":\"Network Policy Filter\"}"},"id":"4b5a40a0-23b9-11eb-90d2-a7a4de48218a","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_0_index_pattern","type":"index-pattern"},{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_1_index_pattern","type":"index-pattern"},{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_2_index_pattern","type":"index-pattern"},{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_3_index_pattern","type":"index-pattern"}],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzQxLDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Aggregated Tx Mbps by Pod Acting as Destination","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"show_legend\":1,\"show_grid\":1,\"axis_min\":\"0\",\"filter\":\"\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false,\"index_pattern\":\"flow-*\",\"time_field\":\"@timestamp\",\"interval\":\"1m\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"rgba(144,201,227,1)\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"type\":\"sum\",\"field\":\"ipfix.reverseOctetDeltaCount\"},{\"id\":\"071b3440-50b8-11eb-8f30-87baf4f5ad91\",\"type\":\"avg\",\"field\":\"ipfix.interval\"},{\"script\":\"params.bytes * 8 / params.interval\",\"id\":\"dd0b81d0-b9a6-11ea-9740-552c943910e4\",\"type\":\"calculation\",\"variables\":[{\"id\":\"e1f87e50-b9a6-11ea-9740-552c943910e4\",\"name\":\"bytes\",\"field\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\"},{\"id\":\"0e3aa120-50b8-11eb-8f30-87baf4f5ad91\",\"name\":\"interval\",\"field\":\"071b3440-50b8-11eb-8f30-87baf4f5ad91\"}]}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":\"0\",\"fill\":\"0.6\",\"stacked\":\"stacked\",\"split_color_mode\":\"rainbow\",\"label\":\"Bytes\",\"terms_field\":\"ipfix.destinationPodName.keyword\",\"terms_size\":\"30\",\"terms_order_by\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"value_template\":\"{{value}}its/s\",\"type\":\"timeseries\"}]},\"title\":\"Aggregated Tx Mbps by Pod Acting as Destination\"}"},"id":"4dde25b0-b9a8-11ea-b16e-fb06687c3589","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzQyLDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}"},"title":"Node Nav","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"markdown\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"metrics\":[{\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"count\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"offset_time\":\"-5y\",\"split_color_mode\":\"gradient\"}],\"interval\":\"auto\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"show_grid\":1,\"markdown_vertical_align\":\"top\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false,\"time_field\":null,\"index_pattern\":\"flow-*\",\"markdown_css\":\"#markdown-61ca57f0-469d-11e7-af02-69e470af7417 p{color:#cccccc;margin-top:0;margin-bottom:8px;text-align:right}#markdown-61ca57f0-469d-11e7-af02-69e470af7417 p a{color:#1eadbd;font-size:17px;font-weight:bold;text-decoration:none}#markdown-61ca57f0-469d-11e7-af02-69e470af7417 p a strong{color:#ffac12;font-weight:bold}#markdown-61ca57f0-469d-11e7-af02-69e470af7417 hr{background-color:#cccccc;margin:0;height:1px}\",\"markdown_less\":\"p {\\n color: #cccccc;\\n margin-top: 0px;\\n margin-bottom: 8px;\\n text-align: right;\\n}\\np a {\\n color: #1eadbd;\\n\\tfont-size: 17px;\\n\\tfont-weight: bold;\\n\\ttext-decoration: none;\\n}\\np a strong {\\n color: #ffac12;\\n\\tfont-weight: bold;\\n}\\nhr {\\n background-color: #cccccc;\\n margin: 0px;\\n height: 1px;\\n}\",\"markdown\":\"[Overview](#/dashboard/3b331b30-b987-11ea-b16e-fb06687c3589) | [Pod-to-Pod Flow](#/dashboard/c2b15fb0-b9a8-11ea-b16e-fb06687c3589) | [Pod-to-External Flow](#/dashboard/3ed71e80-a92d-11eb-a7ef-5dcb53008c10) | [Pod-to-Service Flow](#/dashboard/6d77e8a0-513a-11eb-a19a-05e08a82dcf8) | [**Node**](#/dashboard/5400cdf0-cd2e-11ea-8911-87da3aad0324) | [Network Policy](#/dashboard/c5af6850-23b2-11eb-90d2-a7a4de48218a) | [Flow Records](#/dashboard/2ab9c220-b984-11ea-b16e-fb06687c3589)\\n\"},\"title\":\"Node Nav\"}"},"id":"c0940350-cd43-11ea-8911-87da3aad0324","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzQzLDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}"},"title":"Node Cumulative Bytes","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"vega\",\"aggs\":[],\"params\":{\"spec\":\"{\\n \\\"$schema\\\": \\\"https://vega.github.io/schema/vega/v3.0.json\\\",\\n \\\"data\\\": [\\n {\\n \\\"name\\\": \\\"rawData\\\",\\n \\\"url\\\": {\\n \\\"%context%\\\": true,\\n \\\"%timefield%\\\": \\\"@timestamp\\\",\\n \\\"index\\\": \\\"flow-*\\\",\\n \\\"body\\\": {\\n \\\"size\\\": 0,\\n \\\"aggs\\\": {\\n \\\"table\\\": {\\n \\\"composite\\\": {\\n \\\"size\\\": 1000,\\n \\\"sources\\\": [\\n {\\\"stk1\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.sourceNodeName.keyword\\\"}}},\\n {\\\"stk2\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.destinationNodeName.keyword\\\"}}},\\n {\\\"stk3\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.sourceIP.keyword\\\"}}},\\n {\\\"stk4\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.destinationIP.keyword\\\"}}}\\n ]\\n },\\n \\t\\t\\t\\\"aggs\\\": {\\n \\t\\t\\t\\t\\\"bytes\\\": {\\n \\t\\t\\t\\t\\t\\\"sum\\\": {\\n \\t\\t\\t\\t\\t\\t\\\"field\\\": \\\"ipfix.octetDeltaCountFromSourceNode\\\"\\n \\t\\t\\t\\t\\t}\\n \\t\\t\\t\\t}\\n \\t\\t\\t}\\n }\\n }\\n }\\n },\\n \\\"format\\\": {\\\"property\\\": \\\"aggregations.table.buckets\\\"},\\n \\\"transform\\\": [\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"(datum.key.stk1==''?datum.key.stk3:datum.key.stk1)\\\", \\\"as\\\": \\\"stk1\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"(datum.key.stk2==''?datum.key.stk4:datum.key.stk2)\\\", \\\"as\\\": \\\"stk2\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk3\\\", \\\"as\\\": \\\"stk3\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk4\\\", \\\"as\\\": \\\"stk4\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.bytes.value\\\", \\\"as\\\": \\\"size\\\"}\\n ]\\n },\\n {\\n \\\"name\\\": \\\"nodes\\\",\\n \\\"source\\\": \\\"rawData\\\",\\n \\\"transform\\\": [\\n {\\n \\\"type\\\": \\\"filter\\\",\\n \\\"expr\\\": \\\"!groupSelector || groupSelector.stk1 == datum.stk1 || groupSelector.stk2 == datum.stk2\\\"\\n },\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.stk1+datum.stk2+datum.stk3+datum.stk4\\\", \\\"as\\\": \\\"key\\\"},\\n {\\\"type\\\": \\\"fold\\\", \\\"fields\\\": [\\\"stk1\\\", \\\"stk2\\\"], \\\"as\\\": [\\\"stack\\\", \\\"grpId\\\"]},\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"datum.stack == 'stk1' ? datum.stk1+datum.stk2 : datum.stk2+datum.stk1\\\",\\n \\\"as\\\": \\\"sortField\\\"\\n },\\n {\\n \\\"type\\\": \\\"stack\\\",\\n \\\"groupby\\\": [\\\"stack\\\"],\\n \\\"sort\\\": {\\\"field\\\": \\\"sortField\\\", \\\"order\\\": \\\"descending\\\"},\\n \\\"field\\\": \\\"size\\\"\\n },\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"(datum.y0+datum.y1)/2\\\", \\\"as\\\": \\\"yc\\\"}\\n ]\\n },\\n {\\n \\\"name\\\": \\\"groups\\\",\\n \\\"source\\\": \\\"nodes\\\",\\n \\\"transform\\\": [\\n {\\n \\\"type\\\": \\\"aggregate\\\",\\n \\\"groupby\\\": [\\\"stack\\\", \\\"grpId\\\"],\\n \\\"fields\\\": [\\\"size\\\"],\\n \\\"ops\\\": [\\\"sum\\\"],\\n \\\"as\\\": [\\\"total\\\"]\\n },\\n {\\n \\\"type\\\": \\\"stack\\\",\\n \\\"groupby\\\": [\\\"stack\\\"],\\n \\\"sort\\\": {\\\"field\\\": \\\"grpId\\\", \\\"order\\\": \\\"descending\\\"},\\n \\\"field\\\": \\\"total\\\"\\n },\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"scale('y', datum.y0)\\\", \\\"as\\\": \\\"scaledY0\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"scale('y', datum.y1)\\\", \\\"as\\\": \\\"scaledY1\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.stack == 'stk1'\\\", \\\"as\\\": \\\"rightLabel\\\"},\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"datum.total/domain('y')[1]\\\",\\n \\\"as\\\": \\\"percentage\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"destinationNodes\\\",\\n \\\"source\\\": \\\"nodes\\\",\\n \\\"transform\\\": [{\\\"type\\\": \\\"filter\\\", \\\"expr\\\": \\\"datum.stack == 'stk2'\\\"}]\\n },\\n {\\n \\\"name\\\": \\\"edges\\\",\\n \\\"source\\\": \\\"nodes\\\",\\n \\\"transform\\\": [\\n {\\\"type\\\": \\\"filter\\\", \\\"expr\\\": \\\"datum.stack == 'stk1'\\\"},\\n {\\n \\\"type\\\": \\\"lookup\\\",\\n \\\"from\\\": \\\"destinationNodes\\\",\\n \\\"key\\\": \\\"key\\\",\\n \\\"fields\\\": [\\\"key\\\"],\\n \\\"as\\\": [\\\"target\\\"]\\n },\\n {\\n \\\"type\\\": \\\"linkpath\\\",\\n \\\"orient\\\": \\\"horizontal\\\",\\n \\\"shape\\\": \\\"diagonal\\\",\\n \\\"sourceY\\\": {\\\"expr\\\": \\\"scale('y', datum.yc)\\\"},\\n \\\"sourceX\\\": {\\\"expr\\\": \\\"scale('x', 'stk1') + bandwidth('x')\\\"},\\n \\\"targetY\\\": {\\\"expr\\\": \\\"scale('y', datum.target.yc)\\\"},\\n \\\"targetX\\\": {\\\"expr\\\": \\\"scale('x', 'stk2')\\\"}\\n },\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"range('y')[0]-scale('y', datum.size)\\\",\\n \\\"as\\\": \\\"strokeWidth\\\"\\n },\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"datum.size/domain('y')[1]\\\",\\n \\\"as\\\": \\\"percentage\\\"\\n }\\n ]\\n }\\n ],\\n \\\"scales\\\": [\\n {\\n \\\"name\\\": \\\"x\\\",\\n \\\"type\\\": \\\"band\\\",\\n \\\"range\\\": \\\"width\\\",\\n \\\"domain\\\": [\\\"stk1\\\", \\\"stk2\\\"],\\n \\\"paddingOuter\\\": 0.01,\\n \\\"paddingInner\\\": 0.98\\n },\\n {\\n \\\"name\\\": \\\"y\\\",\\n \\\"type\\\": \\\"linear\\\",\\n \\\"range\\\": \\\"height\\\",\\n \\\"domain\\\": {\\\"data\\\": \\\"nodes\\\", \\\"field\\\": \\\"y1\\\"}\\n },\\n {\\n \\\"name\\\": \\\"color\\\",\\n \\\"type\\\": \\\"ordinal\\\",\\n \\\"range\\\": \\\"category\\\",\\n \\\"domain\\\": {\\\"data\\\": \\\"rawData\\\", \\\"fields\\\": [\\\"stk1\\\",\\\"stk2\\\"]}\\n },\\n {\\n \\\"name\\\": \\\"stackNames\\\",\\n \\\"type\\\": \\\"ordinal\\\",\\n \\\"range\\\": [\\\"Source\\\", \\\"Destination\\\"],\\n \\\"domain\\\": [\\\"stk1\\\", \\\"stk2\\\"]\\n }\\n ],\\n \\\"axes\\\": [\\n {\\n \\\"orient\\\": \\\"bottom\\\",\\n \\\"scale\\\": \\\"x\\\",\\n \\\"labelColor\\\": {\\n \\\"value\\\": \\\"#888888\\\"\\n },\\n \\\"encode\\\": {\\n \\\"labels\\\": {\\n \\\"update\\\": {\\n \\\"text\\\": {\\\"scale\\\": \\\"stackNames\\\", \\\"field\\\": \\\"value\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 14}\\n }\\n }\\n }\\n },\\n {\\n \\\"orient\\\": \\\"left\\\",\\n \\\"scale\\\": \\\"y\\\",\\n \\\"labelColor\\\": {\\n \\\"value\\\": \\\"#888888\\\"\\n },\\n \\\"encode\\\": {\\n \\\"labels\\\": {\\n \\\"update\\\": {\\n \\\"text\\\": {\\\"signal\\\": \\\"format(datum.value, '.2s') + 'B'\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 12}\\n }\\n }\\n }\\n }\\n ],\\n \\\"marks\\\": [\\n {\\n \\\"type\\\": \\\"path\\\",\\n \\\"name\\\": \\\"edgeMark\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"edges\\\"},\\n \\\"clip\\\": true,\\n \\\"encode\\\": {\\n \\\"update\\\": {\\n \\\"stroke\\\": [\\n {\\n \\\"test\\\": \\\"groupSelector && groupSelector.stack=='stk1'\\\",\\n \\\"scale\\\": \\\"color\\\",\\n \\\"field\\\": \\\"stk2\\\"\\n },\\n {\\\"scale\\\": \\\"color\\\", \\\"field\\\": \\\"stk1\\\"}\\n ],\\n \\\"strokeWidth\\\": {\\\"field\\\": \\\"strokeWidth\\\"},\\n \\\"path\\\": {\\\"field\\\": \\\"path\\\"},\\n \\\"strokeOpacity\\\": {\\n \\\"signal\\\": \\\"!groupSelector && (groupHover.stk1 == datum.stk1 || groupHover.stk2 == datum.stk2) ? 0.75 : 0.3\\\"\\n },\\n \\\"zindex\\\": {\\n \\\"signal\\\": \\\"!groupSelector && (groupHover.stk1 == datum.stk1 || groupHover.stk2 == datum.stk2) ? 1 : 0\\\"\\n },\\n \\\"tooltip\\\": {\\n \\\"signal\\\": \\\"{'title': datum.stk1 + ' → ' + datum.stk2 + ' ' + format(datum.size, '.2s') + 'B (' + format(datum.percentage, '.1%') + ')', 'IP Address': datum.stk3 +' → ' + datum.stk4 }\\\"\\n }\\n },\\n \\\"hover\\\": {\\\"strokeOpacity\\\": {\\\"value\\\": 0.75}}\\n }\\n },\\n {\\n \\\"type\\\": \\\"rect\\\",\\n \\\"name\\\": \\\"groupMark\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"groups\\\"},\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"fill\\\": {\\\"scale\\\": \\\"color\\\", \\\"field\\\": \\\"grpId\\\"},\\n \\\"width\\\": {\\\"scale\\\": \\\"x\\\", \\\"band\\\": 1}\\n },\\n \\\"update\\\": {\\n \\\"x\\\": {\\\"scale\\\": \\\"x\\\", \\\"field\\\": \\\"stack\\\"},\\n \\\"y\\\": {\\\"field\\\": \\\"scaledY0\\\"},\\n \\\"y2\\\": {\\\"field\\\": \\\"scaledY1\\\"},\\n \\\"fillOpacity\\\": {\\\"value\\\": 0.7},\\n \\\"tooltip\\\": {\\n \\\"signal\\\": \\\"datum.grpId + ' ' + format(datum.total, '.2s') + 'B (' + format(datum.percentage, '.1%') + ')'\\\"\\n }\\n },\\n \\\"hover\\\": {\\\"fillOpacity\\\": {\\\"value\\\": 1}}\\n }\\n },\\n {\\n \\\"type\\\": \\\"text\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"groups\\\"},\\n \\\"interactive\\\": false,\\n \\\"encode\\\": {\\n \\\"update\\\": {\\n \\\"x\\\": {\\n \\\"signal\\\": \\\"scale('x', datum.stack) + (datum.rightLabel ? bandwidth('x') + 8 : -8)\\\"\\n },\\n \\\"yc\\\": {\\\"signal\\\": \\\"(datum.scaledY0 + datum.scaledY1)/2\\\"},\\n \\\"align\\\": {\\\"signal\\\": \\\"datum.rightLabel ? 'left' : 'right'\\\"},\\n \\\"baseline\\\": {\\\"value\\\": \\\"middle\\\"},\\n \\\"fontWeight\\\": {\\\"value\\\": \\\"bold\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 12},\\n \\\"text\\\": {\\n \\\"signal\\\": \\\"abs(datum.scaledY0-datum.scaledY1) > 10 ? datum.grpId : ''\\\"\\n }\\n }\\n }\\n },\\n {\\n \\\"type\\\": \\\"group\\\",\\n \\\"data\\\": [\\n {\\n \\\"name\\\": \\\"dataForShowAll\\\",\\n \\\"values\\\": [{}],\\n \\\"transform\\\": [{\\\"type\\\": \\\"filter\\\", \\\"expr\\\": \\\"groupSelector\\\"}]\\n }\\n ],\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"xc\\\": {\\\"signal\\\": \\\"width/2\\\"},\\n \\\"y\\\": {\\\"value\\\": 30},\\n \\\"width\\\": {\\\"value\\\": 100},\\n \\\"height\\\": {\\\"value\\\": 36}\\n }\\n },\\n \\\"marks\\\": [\\n {\\n \\\"type\\\": \\\"group\\\",\\n \\\"name\\\": \\\"groupReset\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"dataForShowAll\\\"},\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"cornerRadius\\\": {\\\"value\\\": 3.5},\\n \\\"fill\\\": {\\\"value\\\": \\\"#666666\\\"},\\n \\\"height\\\": {\\\"field\\\": {\\\"group\\\": \\\"height\\\"}},\\n \\\"width\\\": {\\\"field\\\": {\\\"group\\\": \\\"width\\\"}}\\n },\\n \\\"update\\\": {\\\"opacity\\\": {\\\"value\\\": 1}},\\n \\\"hover\\\": {\\\"fill\\\": {\\\"value\\\": \\\"#444444\\\"}}\\n },\\n \\\"marks\\\": [\\n {\\n \\\"type\\\": \\\"text\\\",\\n \\\"interactive\\\": false,\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"xc\\\": {\\\"field\\\": {\\\"group\\\": \\\"width\\\"}, \\\"mult\\\": 0.5},\\n \\\"yc\\\": {\\\"field\\\": {\\\"group\\\": \\\"height\\\"}, \\\"mult\\\": 0.5, \\\"offset\\\": 1},\\n \\\"align\\\": {\\\"value\\\": \\\"center\\\"},\\n \\\"baseline\\\": {\\\"value\\\": \\\"middle\\\"},\\n \\\"text\\\": {\\\"value\\\": \\\"Show All\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 14},\\n \\\"stroke\\\": {\\\"value\\\": \\\"#ecf0f1\\\"}\\n }\\n }\\n }\\n ]\\n }\\n ]\\n }\\n ],\\n \\\"signals\\\": [\\n {\\n \\\"name\\\": \\\"groupHover\\\",\\n \\\"value\\\": {},\\n \\\"on\\\": [\\n {\\n \\\"events\\\": \\\"@groupMark:mouseover\\\",\\n \\\"update\\\": \\\"{stk1:datum.stack=='stk1' && datum.grpId, stk2:datum.stack=='stk2' && datum.grpId}\\\"\\n },\\n {\\\"events\\\": \\\"mouseout\\\", \\\"update\\\": \\\"{}\\\"}\\n ]\\n },\\n {\\n \\\"name\\\": \\\"groupSelector\\\",\\n \\\"value\\\": false,\\n \\\"on\\\": [\\n {\\n \\\"events\\\": \\\"@groupMark:click!\\\",\\n \\\"update\\\": \\\"{stack:datum.stack, stk1:datum.stack=='stk1' && datum.grpId, stk2:datum.stack=='stk2' && datum.grpId}\\\"\\n },\\n {\\n \\\"events\\\": [\\n {\\\"type\\\": \\\"click\\\", \\\"markname\\\": \\\"groupReset\\\"},\\n {\\\"type\\\": \\\"dblclick\\\"}\\n ],\\n \\\"update\\\": \\\"false\\\"\\n }\\n ]\\n }\\n ]\\n}\"},\"title\":\"Node Cumulative Bytes\"}"},"id":"5b165620-cd36-11ea-8911-87da3aad0324","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzQ0LDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"filter\":[]}"},"title":"Aggregated Tx Mbps by Node Acting as Source (Heatmap)","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"heatmap\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"sum\",\"schema\":\"metric\",\"params\":{\"field\":\"ipfix.throughput\",\"json\":\"{ \\n \\\"script\\\" : \\\"_value / 1024/1024\\\" \\n}\",\"customLabel\":\"Node Throughput\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"ipfix.flowEndSeconds\",\"timeRange\":{\"from\":\"now-1h\",\"to\":\"now\"},\"useNormalizedEsInterval\":true,\"scaleMetricValues\":false,\"interval\":\"1m\",\"drop_partials\":false,\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Time\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"ipfix.sourceNodeName.keyword\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":10,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"exclude\":\"\\\"\\\"\",\"customLabel\":\"Source Node Name\"}}],\"params\":{\"type\":\"heatmap\",\"addTooltip\":true,\"addLegend\":true,\"enableHover\":false,\"legendPosition\":\"right\",\"times\":[],\"colorsNumber\":10,\"colorSchema\":\"Greens\",\"setColorRange\":false,\"colorsRange\":[],\"invertColors\":false,\"percentageMode\":false,\"valueAxes\":[{\"show\":false,\"id\":\"ValueAxis-1\",\"type\":\"value\",\"scale\":{\"type\":\"linear\",\"defaultYExtents\":false},\"labels\":{\"show\":false,\"rotate\":0,\"overwriteColor\":false,\"color\":\"black\"}}]},\"title\":\"Aggregated Tx Mbps by Node Acting as Source (Heatmap)\"}"},"id":"e4855250-612c-11eb-aaaf-792dd02d0158","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzQ1LDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"filter\":[]}"},"title":"Aggregated Rx Mbps by Node Acting as Source (Heatmap)","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"heatmap\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"sum\",\"schema\":\"metric\",\"params\":{\"field\":\"ipfix.reverseThroughput\",\"json\":\"{ \\n \\\"script\\\" : \\\"_value / 1024/1024\\\" \\n}\",\"customLabel\":\"Node Throughput (Reverse)\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"schema\":\"segment\",\"params\":{\"field\":\"ipfix.flowEndSeconds\",\"timeRange\":{\"from\":\"now-1h\",\"to\":\"now\"},\"useNormalizedEsInterval\":true,\"scaleMetricValues\":false,\"interval\":\"1m\",\"drop_partials\":false,\"min_doc_count\":1,\"extended_bounds\":{},\"customLabel\":\"Time\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"ipfix.sourceNodeName.keyword\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":10,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"exclude\":\"\\\"\\\"\",\"customLabel\":\"Source Node Name\"}}],\"params\":{\"type\":\"heatmap\",\"addTooltip\":true,\"addLegend\":true,\"enableHover\":false,\"legendPosition\":\"right\",\"times\":[],\"colorsNumber\":10,\"colorSchema\":\"Greens\",\"setColorRange\":false,\"colorsRange\":[],\"invertColors\":false,\"percentageMode\":false,\"valueAxes\":[{\"show\":false,\"id\":\"ValueAxis-1\",\"type\":\"value\",\"scale\":{\"type\":\"linear\",\"defaultYExtents\":false},\"labels\":{\"show\":false,\"rotate\":0,\"overwriteColor\":false,\"color\":\"black\"}}]},\"title\":\"Aggregated Rx Mbps by Node Acting as Source (Heatmap)\"}"},"id":"f9b2c4f0-612c-11eb-aaaf-792dd02d0158","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzQ2LDFd"}
-{"attributes":{"description":"","hits":0,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}"},"optionsJSON":"{\"hidePanelTitles\":false,\"useMargins\":true}","panelsJSON":"[{\"embeddableConfig\":{\"title\":\"\"},\"gridData\":{\"h\":3,\"i\":\"bf65a47f-1490-4143-8b39-b4c58cb7e035\",\"w\":48,\"x\":0,\"y\":0},\"panelIndex\":\"bf65a47f-1490-4143-8b39-b4c58cb7e035\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_0\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":23,\"i\":\"74fca433-a353-4042-83c4-5f39ca49309f\",\"w\":24,\"x\":0,\"y\":3},\"panelIndex\":\"74fca433-a353-4042-83c4-5f39ca49309f\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_1\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":23,\"i\":\"0cb5399f-d965-4dd6-9b4f-6b09f138fa48\",\"w\":24,\"x\":24,\"y\":3},\"panelIndex\":\"0cb5399f-d965-4dd6-9b4f-6b09f138fa48\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_2\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":11,\"i\":\"d5b1b4df-a268-44fc-82a7-74fd370cb6a8\",\"w\":24,\"x\":0,\"y\":26},\"panelIndex\":\"d5b1b4df-a268-44fc-82a7-74fd370cb6a8\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_3\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":11,\"i\":\"de83b6b5-b7d3-46a8-af90-6ddc85897c6e\",\"w\":24,\"x\":24,\"y\":26},\"panelIndex\":\"de83b6b5-b7d3-46a8-af90-6ddc85897c6e\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_4\"},{\"embeddableConfig\":{\"title\":\"Aggregated Tx Mbps by Node Acting as Source (MBit/s)\",\"vis\":null},\"gridData\":{\"h\":15,\"i\":\"898f3b90-9f29-487b-8c15-7160c5e9909f\",\"w\":24,\"x\":0,\"y\":37},\"panelIndex\":\"898f3b90-9f29-487b-8c15-7160c5e9909f\",\"title\":\"Aggregated Tx Mbps by Node Acting as Source (MBit/s)\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_5\"},{\"embeddableConfig\":{\"title\":\"Aggregated Rx Mbps by Node Acting as Source (MBit/s)\",\"vis\":null},\"gridData\":{\"h\":15,\"i\":\"a551f0c9-a9f2-4909-b0ef-7d60f98484f3\",\"w\":24,\"x\":24,\"y\":37},\"panelIndex\":\"a551f0c9-a9f2-4909-b0ef-7d60f98484f3\",\"title\":\"Aggregated Rx Mbps by Node Acting as Source (MBit/s)\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_6\"}]","timeRestore":false,"title":"Node Throughput Dashboard","version":1},"id":"5400cdf0-cd2e-11ea-8911-87da3aad0324","migrationVersion":{"dashboard":"7.3.0"},"references":[{"id":"c0940350-cd43-11ea-8911-87da3aad0324","name":"panel_0","type":"visualization"},{"id":"5b165620-cd36-11ea-8911-87da3aad0324","name":"panel_1","type":"visualization"},{"id":"211178f0-cd37-11ea-8911-87da3aad0324","name":"panel_2","type":"visualization"},{"id":"226c4040-cd32-11ea-8911-87da3aad0324","name":"panel_3","type":"visualization"},{"id":"089a7d70-cd33-11ea-8911-87da3aad0324","name":"panel_4","type":"visualization"},{"id":"e4855250-612c-11eb-aaaf-792dd02d0158","name":"panel_5","type":"visualization"},{"id":"f9b2c4f0-612c-11eb-aaaf-792dd02d0158","name":"panel_6","type":"visualization"}],"type":"dashboard","updated_at":"2021-08-07T23:30:40.150Z","version":"WzQ3LDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}"},"title":"Pod-to-Pod Traffic Cumulative Bytes","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"vega\",\"aggs\":[],\"params\":{\"spec\":\"{\\n \\\"$schema\\\": \\\"https://vega.github.io/schema/vega/v3.0.json\\\",\\n \\\"data\\\": [\\n {\\n \\\"name\\\": \\\"rawData\\\",\\n \\\"url\\\": {\\n \\\"%context%\\\": true,\\n \\\"%timefield%\\\": \\\"@timestamp\\\",\\n \\\"index\\\": \\\"flow-*\\\",\\n \\\"body\\\": {\\n \\\"size\\\": 0,\\n \\\"aggs\\\": {\\n \\\"table\\\": {\\n \\\"composite\\\": {\\n \\\"size\\\": 1000,\\n \\\"sources\\\": [\\n {\\\"stk1\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.sourcePodName.keyword\\\"}}},\\n {\\\"stk1ns\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.sourcePodNamespace.keyword\\\"}}},\\n {\\\"stk2\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.destinationPodName.keyword\\\"}}},\\n {\\\"stk2ns\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.destinationPodNamespace.keyword\\\"}}},\\n {\\\"stk3\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.sourceIP.keyword\\\"}}},\\n {\\\"stk4\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.destinationIP.keyword\\\"}}},\\n {\\\"stk5\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.flowTypeStr.keyword\\\"}}},\\n ]\\n },\\n \\t\\t\\t\\\"aggs\\\": {\\n \\t\\t\\t\\t\\\"bytes\\\": {\\n \\t\\t\\t\\t\\t\\\"sum\\\": {\\n \\t\\t\\t\\t\\t\\t\\\"field\\\": \\\"ipfix.octetDeltaCountFromSourceNode\\\"\\n \\t\\t\\t\\t\\t}\\n \\t\\t\\t\\t}\\n \\t\\t\\t}\\n }\\n }\\n }\\n },\\n \\\"format\\\": {\\\"property\\\": \\\"aggregations.table.buckets\\\"},\\n \\\"transform\\\": [\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk1ns +'/'+ datum.key.stk1\\\", \\\"as\\\": \\\"stk1s\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"(datum.key.stk1==''?datum.key.stk3:datum.stk1s)\\\", \\\"as\\\": \\\"stk1\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk2ns +'/'+ datum.key.stk2\\\", \\\"as\\\": \\\"stk2s\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"(datum.key.stk2==''?datum.key.stk4:datum.stk2s)\\\", \\\"as\\\": \\\"stk2\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk3\\\", \\\"as\\\": \\\"stk3\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk4\\\", \\\"as\\\": \\\"stk4\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk5\\\", \\\"as\\\": \\\"stk5\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.bytes.value\\\", \\\"as\\\": \\\"size\\\"}\\n ]\\n },\\n {\\n \\\"name\\\": \\\"nodes\\\",\\n \\\"source\\\": \\\"rawData\\\",\\n \\\"transform\\\": [\\n {\\n \\\"type\\\": \\\"filter\\\",\\n \\\"expr\\\": \\\"(datum.stk5=='Inter-Node' || datum.stk5 == 'Intra-Node') && !groupSelector || groupSelector.stk1 == datum.stk1 || groupSelector.stk2 == datum.stk2\\\"\\n },\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.stk1+datum.stk2\\\", \\\"as\\\": \\\"key\\\"},\\n {\\\"type\\\": \\\"fold\\\", \\\"fields\\\": [\\\"stk1\\\", \\\"stk2\\\"], \\\"as\\\": [\\\"stack\\\", \\\"grpId\\\"]},\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"datum.stack == 'stk1' ? datum.stk1+datum.stk2 : datum.stk2+datum.stk1\\\",\\n \\\"as\\\": \\\"sortField\\\"\\n },\\n {\\n \\\"type\\\": \\\"stack\\\",\\n \\\"groupby\\\": [\\\"stack\\\"],\\n \\\"sort\\\": {\\\"field\\\": \\\"sortField\\\", \\\"order\\\": \\\"descending\\\"},\\n \\\"field\\\": \\\"size\\\"\\n },\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"(datum.y0+datum.y1)/2\\\", \\\"as\\\": \\\"yc\\\"}\\n ]\\n },\\n {\\n \\\"name\\\": \\\"groups\\\",\\n \\\"source\\\": \\\"nodes\\\",\\n \\\"transform\\\": [\\n {\\n \\\"type\\\": \\\"aggregate\\\",\\n \\\"groupby\\\": [\\\"stack\\\", \\\"grpId\\\"],\\n \\\"fields\\\": [\\\"size\\\"],\\n \\\"ops\\\": [\\\"sum\\\"],\\n \\\"as\\\": [\\\"total\\\"]\\n },\\n {\\n \\\"type\\\": \\\"stack\\\",\\n \\\"groupby\\\": [\\\"stack\\\"],\\n \\\"sort\\\": {\\\"field\\\": \\\"grpId\\\", \\\"order\\\": \\\"descending\\\"},\\n \\\"field\\\": \\\"total\\\"\\n },\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"scale('y', datum.y0)\\\", \\\"as\\\": \\\"scaledY0\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"scale('y', datum.y1)\\\", \\\"as\\\": \\\"scaledY1\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.stack == 'stk1'\\\", \\\"as\\\": \\\"rightLabel\\\"},\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"datum.total/domain('y')[1]\\\",\\n \\\"as\\\": \\\"percentage\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"destinationNodes\\\",\\n \\\"source\\\": \\\"nodes\\\",\\n \\\"transform\\\": [{\\\"type\\\": \\\"filter\\\", \\\"expr\\\": \\\"datum.stack == 'stk2'\\\"}]\\n },\\n {\\n \\\"name\\\": \\\"edges\\\",\\n \\\"source\\\": \\\"nodes\\\",\\n \\\"transform\\\": [\\n {\\\"type\\\": \\\"filter\\\", \\\"expr\\\": \\\"datum.stack == 'stk1'\\\"},\\n {\\n \\\"type\\\": \\\"lookup\\\",\\n \\\"from\\\": \\\"destinationNodes\\\",\\n \\\"key\\\": \\\"key\\\",\\n \\\"fields\\\": [\\\"key\\\"],\\n \\\"as\\\": [\\\"target\\\"]\\n },\\n {\\n \\\"type\\\": \\\"linkpath\\\",\\n \\\"orient\\\": \\\"horizontal\\\",\\n \\\"shape\\\": \\\"diagonal\\\",\\n \\\"sourceY\\\": {\\\"expr\\\": \\\"scale('y', datum.yc)\\\"},\\n \\\"sourceX\\\": {\\\"expr\\\": \\\"scale('x', 'stk1') + bandwidth('x')\\\"},\\n \\\"targetY\\\": {\\\"expr\\\": \\\"scale('y', datum.target.yc)\\\"},\\n \\\"targetX\\\": {\\\"expr\\\": \\\"scale('x', 'stk2')\\\"}\\n },\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"range('y')[0]-scale('y', datum.size)\\\",\\n \\\"as\\\": \\\"strokeWidth\\\"\\n },\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"datum.size/domain('y')[1]\\\",\\n \\\"as\\\": \\\"percentage\\\"\\n }\\n ]\\n }\\n ],\\n \\\"scales\\\": [\\n {\\n \\\"name\\\": \\\"x\\\",\\n \\\"type\\\": \\\"band\\\",\\n \\\"range\\\": \\\"width\\\",\\n \\\"domain\\\": [\\\"stk1\\\", \\\"stk2\\\"],\\n \\\"paddingOuter\\\": 0.01,\\n \\\"paddingInner\\\": 0.98\\n },\\n {\\n \\\"name\\\": \\\"y\\\",\\n \\\"type\\\": \\\"linear\\\",\\n \\\"range\\\": \\\"height\\\",\\n \\\"domain\\\": {\\\"data\\\": \\\"nodes\\\", \\\"field\\\": \\\"y1\\\"}\\n },\\n {\\n \\\"name\\\": \\\"color\\\",\\n \\\"type\\\": \\\"ordinal\\\",\\n \\\"range\\\": \\\"category\\\",\\n \\\"domain\\\": {\\\"data\\\": \\\"rawData\\\", \\\"fields\\\": [\\\"stk1\\\",\\\"stk2\\\"]}\\n },\\n {\\n \\\"name\\\": \\\"stackNames\\\",\\n \\\"type\\\": \\\"ordinal\\\",\\n \\\"range\\\": [\\\"Source Pod\\\", \\\"Destination Pod\\\"],\\n \\\"domain\\\": [\\\"stk1\\\", \\\"stk2\\\"]\\n }\\n ],\\n \\\"axes\\\": [\\n {\\n \\\"orient\\\": \\\"bottom\\\",\\n \\\"scale\\\": \\\"x\\\",\\n \\\"labelColor\\\": {\\n \\\"value\\\": \\\"#888888\\\"\\n },\\n \\\"encode\\\": {\\n \\\"labels\\\": {\\n \\\"update\\\": {\\n \\\"text\\\": {\\\"scale\\\": \\\"stackNames\\\", \\\"field\\\": \\\"value\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 14}\\n }\\n }\\n }\\n },\\n {\\n \\\"orient\\\": \\\"left\\\",\\n \\\"scale\\\": \\\"y\\\",\\n \\\"labelColor\\\": {\\n \\\"value\\\": \\\"#888888\\\"\\n },\\n \\\"encode\\\": {\\n \\\"labels\\\": {\\n \\\"update\\\": {\\n \\\"text\\\": {\\\"signal\\\": \\\"format(datum.value, '.2s') + 'B'\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 12}\\n }\\n }\\n }\\n }\\n ],\\n \\\"marks\\\": [\\n {\\n \\\"type\\\": \\\"path\\\",\\n \\\"name\\\": \\\"edgeMark\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"edges\\\"},\\n \\\"clip\\\": true,\\n \\\"encode\\\": {\\n \\\"update\\\": {\\n \\\"stroke\\\": [\\n {\\n \\\"test\\\": \\\"groupSelector && groupSelector.stack=='stk1'\\\",\\n \\\"scale\\\": \\\"color\\\",\\n \\\"field\\\": \\\"stk2\\\"\\n },\\n {\\\"scale\\\": \\\"color\\\", \\\"field\\\": \\\"stk1\\\"}\\n ],\\n \\\"strokeWidth\\\": {\\\"field\\\": \\\"strokeWidth\\\"},\\n \\\"path\\\": {\\\"field\\\": \\\"path\\\"},\\n \\\"strokeOpacity\\\": {\\n \\\"signal\\\": \\\"!groupSelector && (groupHover.stk1 == datum.stk1 || groupHover.stk2 == datum.stk2) ? 0.75 : 0.3\\\"\\n },\\n \\\"zindex\\\": {\\n \\\"signal\\\": \\\"!groupSelector && (groupHover.stk1 == datum.stk1 || groupHover.stk2 == datum.stk2) ? 1 : 0\\\"\\n },\\n \\\"tooltip\\\": {\\n \\\"signal\\\": \\\"{'title': datum.stk1 + ' → ' + datum.stk2 + ' ' + format(datum.size, '.2s') + 'B (' + format(datum.percentage, '.1%') + ')', 'IP Address': datum.stk3 +' → ' + datum.stk4 }\\\"\\n }\\n },\\n \\\"hover\\\": {\\\"strokeOpacity\\\": {\\\"value\\\": 0.75}}\\n }\\n },\\n {\\n \\\"type\\\": \\\"rect\\\",\\n \\\"name\\\": \\\"groupMark\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"groups\\\"},\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"fill\\\": {\\\"scale\\\": \\\"color\\\", \\\"field\\\": \\\"grpId\\\"},\\n \\\"width\\\": {\\\"scale\\\": \\\"x\\\", \\\"band\\\": 1}\\n },\\n \\\"update\\\": {\\n \\\"x\\\": {\\\"scale\\\": \\\"x\\\", \\\"field\\\": \\\"stack\\\"},\\n \\\"y\\\": {\\\"field\\\": \\\"scaledY0\\\"},\\n \\\"y2\\\": {\\\"field\\\": \\\"scaledY1\\\"},\\n \\\"fillOpacity\\\": {\\\"value\\\": 0.7},\\n \\\"tooltip\\\": {\\n \\\"signal\\\": \\\"datum.grpId + ' ' + format(datum.total, '.2s') + 'B (' + format(datum.percentage, '.1%') + ')'\\\"\\n }\\n },\\n \\\"hover\\\": {\\\"fillOpacity\\\": {\\\"value\\\": 1}}\\n }\\n },\\n {\\n \\\"type\\\": \\\"text\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"groups\\\"},\\n \\\"interactive\\\": false,\\n \\\"encode\\\": {\\n \\\"update\\\": {\\n \\\"x\\\": {\\n \\\"signal\\\": \\\"scale('x', datum.stack) + (datum.rightLabel ? bandwidth('x') + 8 : -8)\\\"\\n },\\n \\\"yc\\\": {\\\"signal\\\": \\\"(datum.scaledY0 + datum.scaledY1)/2\\\"},\\n \\\"align\\\": {\\\"signal\\\": \\\"datum.rightLabel ? 'left' : 'right'\\\"},\\n \\\"baseline\\\": {\\\"value\\\": \\\"middle\\\"},\\n \\\"fontWeight\\\": {\\\"value\\\": \\\"bold\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 12},\\n \\\"text\\\": {\\n \\\"signal\\\": \\\"abs(datum.scaledY0-datum.scaledY1) > 10 ? datum.grpId : ''\\\"\\n }\\n }\\n }\\n },\\n {\\n \\\"type\\\": \\\"group\\\",\\n \\\"data\\\": [\\n {\\n \\\"name\\\": \\\"dataForShowAll\\\",\\n \\\"values\\\": [{}],\\n \\\"transform\\\": [{\\\"type\\\": \\\"filter\\\", \\\"expr\\\": \\\"groupSelector\\\"}]\\n }\\n ],\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"xc\\\": {\\\"signal\\\": \\\"width/2\\\"},\\n \\\"y\\\": {\\\"value\\\": 30},\\n \\\"width\\\": {\\\"value\\\": 100},\\n \\\"height\\\": {\\\"value\\\": 36}\\n }\\n },\\n \\\"marks\\\": [\\n {\\n \\\"type\\\": \\\"group\\\",\\n \\\"name\\\": \\\"groupReset\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"dataForShowAll\\\"},\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"cornerRadius\\\": {\\\"value\\\": 3.5},\\n \\\"fill\\\": {\\\"value\\\": \\\"#666666\\\"},\\n \\\"height\\\": {\\\"field\\\": {\\\"group\\\": \\\"height\\\"}},\\n \\\"width\\\": {\\\"field\\\": {\\\"group\\\": \\\"width\\\"}}\\n },\\n \\\"update\\\": {\\\"opacity\\\": {\\\"value\\\": 1}},\\n \\\"hover\\\": {\\\"fill\\\": {\\\"value\\\": \\\"#444444\\\"}}\\n },\\n \\\"marks\\\": [\\n {\\n \\\"type\\\": \\\"text\\\",\\n \\\"interactive\\\": false,\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"xc\\\": {\\\"field\\\": {\\\"group\\\": \\\"width\\\"}, \\\"mult\\\": 0.5},\\n \\\"yc\\\": {\\\"field\\\": {\\\"group\\\": \\\"height\\\"}, \\\"mult\\\": 0.5, \\\"offset\\\": 1},\\n \\\"align\\\": {\\\"value\\\": \\\"center\\\"},\\n \\\"baseline\\\": {\\\"value\\\": \\\"middle\\\"},\\n \\\"text\\\": {\\\"value\\\": \\\"Show All\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 14},\\n \\\"stroke\\\": {\\\"value\\\": \\\"#ecf0f1\\\"}\\n }\\n }\\n }\\n ]\\n }\\n ]\\n }\\n ],\\n \\\"signals\\\": [\\n {\\n \\\"name\\\": \\\"groupHover\\\",\\n \\\"value\\\": {},\\n \\\"on\\\": [\\n {\\n \\\"events\\\": \\\"@groupMark:mouseover\\\",\\n \\\"update\\\": \\\"{stk1:datum.stack=='stk1' && datum.grpId, stk2:datum.stack=='stk2' && datum.grpId}\\\"\\n },\\n {\\\"events\\\": \\\"mouseout\\\", \\\"update\\\": \\\"{}\\\"}\\n ]\\n },\\n {\\n \\\"name\\\": \\\"groupSelector\\\",\\n \\\"value\\\": false,\\n \\\"on\\\": [\\n {\\n \\\"events\\\": \\\"@groupMark:click!\\\",\\n \\\"update\\\": \\\"{stack:datum.stack, stk1:datum.stack=='stk1' && datum.grpId, stk2:datum.stack=='stk2' && datum.grpId}\\\"\\n },\\n {\\n \\\"events\\\": [\\n {\\\"type\\\": \\\"click\\\", \\\"markname\\\": \\\"groupReset\\\"},\\n {\\\"type\\\": \\\"dblclick\\\"}\\n ],\\n \\\"update\\\": \\\"false\\\"\\n }\\n ]\\n }\\n ]\\n}\"},\"title\":\"Pod-to-Pod Traffic Cumulative Bytes\"}"},"id":"54525bd0-3373-11e9-aec0-c1d93190f676","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzQ4LDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"filter\":[]}"},"title":"Ingress Network Policy Packets","uiStateJSON":"{\"vis\":{\"colors\":{\"default\":\"#F2C96D\"}}}","version":1,"visState":"{\"type\":\"pie\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"sum\",\"schema\":\"metric\",\"params\":{\"field\":\"ipfix.packets\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ipfix.ingressNetworkPolicyNamespace.keyword\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":30,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"exclude\":\"\",\"customLabel\":\"Namespace\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ipfix.ingressNetworkPolicyName.keyword\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Network Policy Name\"}}],\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":true,\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100},\"dimensions\":{\"metric\":{\"accessor\":0,\"format\":{\"id\":\"number\"},\"params\":{},\"aggType\":\"count\"}}},\"title\":\"Ingress Network Policy Packets\"}"},"id":"56535ab0-23b8-11eb-90d2-a7a4de48218a","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzQ5LDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Cumulative Bandwidth by Pod-to-Pod Flow","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"show_legend\":1,\"show_grid\":1,\"axis_min\":\"0\",\"filter\":\"\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false,\"index_pattern\":\"flow-*\",\"interval\":\"1m\",\"time_field\":\"ipfix.flowEndSeconds\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"rgba(144,201,227,1)\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"type\":\"sum\",\"field\":\"ipfix.octetTotalCountFromSourceNode\"},{\"script\":\"params.bytes * 8\",\"id\":\"dd0b81d0-b9a6-11ea-9740-552c943910e4\",\"type\":\"calculation\",\"variables\":[{\"id\":\"e1f87e50-b9a6-11ea-9740-552c943910e4\",\"name\":\"bytes\",\"field\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\"}]}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":\"2\",\"point_size\":\"0\",\"fill\":\"0.6\",\"stacked\":\"none\",\"split_color_mode\":\"rainbow\",\"label\":\"Bytes\",\"terms_field\":\"ipfix.flowKeyPodToPod.keyword\",\"terms_size\":\"30\",\"terms_order_by\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"value_template\":\"{{value}}\",\"type\":\"timeseries\"}]},\"title\":\"Cumulative Bandwidth by Pod-to-Pod Flow\"}"},"id":"5d8d7b90-4ee6-11eb-b841-6bf6243fda88","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzUwLDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}"},"title":"Pod-to-Service Flow Cumulative Bytes","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"vega\",\"aggs\":[],\"params\":{\"spec\":\"{\\n \\\"$schema\\\": \\\"https://vega.github.io/schema/vega/v3.0.json\\\",\\n \\\"data\\\": [\\n {\\n \\\"name\\\": \\\"rawData\\\",\\n \\\"url\\\": {\\n \\\"%context%\\\": true,\\n \\\"%timefield%\\\": \\\"@timestamp\\\",\\n \\\"index\\\": \\\"flow-*\\\",\\n \\\"body\\\": {\\n \\\"size\\\": 0,\\n \\\"aggs\\\": {\\n \\\"table\\\": {\\n \\\"composite\\\": {\\n \\\"size\\\": 1000,\\n \\\"sources\\\": [\\n {\\\"stk1\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.sourcePodName.keyword\\\"}}},\\n {\\\"stk1ns\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.sourcePodNamespace.keyword\\\"}}},\\n {\\\"stk2\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.destinationServicePortName.keyword\\\"}}},\\n {\\\"stk2p\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.destinationServicePort\\\"}}},\\n {\\\"stk3\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.sourceIP.keyword\\\"}}},\\n {\\\"stk4\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.destinationIP.keyword\\\"}}}\\n ]\\n },\\n \\t\\t\\t\\\"aggs\\\": {\\n \\t\\t\\t\\t\\\"bytes\\\": {\\n \\t\\t\\t\\t\\t\\\"sum\\\": {\\n \\t\\t\\t\\t\\t\\t\\\"field\\\": \\\"ipfix.octetDeltaCountFromSourceNode\\\"\\n \\t\\t\\t\\t\\t}\\n \\t\\t\\t\\t}\\n \\t\\t\\t}\\n }\\n }\\n }\\n },\\n \\\"format\\\": {\\\"property\\\": \\\"aggregations.table.buckets\\\"},\\n \\\"transform\\\": [\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk1ns +'/'+ datum.key.stk1\\\", \\\"as\\\": \\\"stk1s\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"(datum.key.stk1==''?datum.key.stk3:datum.stk1s)\\\", \\\"as\\\": \\\"stk1\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk2 + datum.key.stk2p\\\", \\\"as\\\": \\\"stk2p\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"(datum.key.stk2==''?datum.key.stk4:datum.stk2p)\\\", \\\"as\\\": \\\"stk2\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk3\\\", \\\"as\\\": \\\"stk3\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk4\\\", \\\"as\\\": \\\"stk4\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.bytes.value\\\", \\\"as\\\": \\\"size\\\"}\\n ]\\n },\\n {\\n \\\"name\\\": \\\"nodes\\\",\\n \\\"source\\\": \\\"rawData\\\",\\n \\\"transform\\\": [\\n {\\n \\\"type\\\": \\\"filter\\\",\\n \\\"expr\\\": \\\"!groupSelector || groupSelector.stk1 == datum.stk1 || groupSelector.stk2 == datum.stk2\\\"\\n },\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.stk1+datum.stk2+datum.stk3+datum.stk4\\\", \\\"as\\\": \\\"key\\\"},\\n {\\\"type\\\": \\\"fold\\\", \\\"fields\\\": [\\\"stk1\\\", \\\"stk2\\\"], \\\"as\\\": [\\\"stack\\\", \\\"grpId\\\"]},\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"datum.stack == 'stk1' ? datum.stk1+datum.stk2 : datum.stk2+datum.stk1\\\",\\n \\\"as\\\": \\\"sortField\\\"\\n },\\n {\\n \\\"type\\\": \\\"stack\\\",\\n \\\"groupby\\\": [\\\"stack\\\"],\\n \\\"sort\\\": {\\\"field\\\": \\\"sortField\\\", \\\"order\\\": \\\"descending\\\"},\\n \\\"field\\\": \\\"size\\\"\\n },\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"(datum.y0+datum.y1)/2\\\", \\\"as\\\": \\\"yc\\\"}\\n ]\\n },\\n {\\n \\\"name\\\": \\\"groups\\\",\\n \\\"source\\\": \\\"nodes\\\",\\n \\\"transform\\\": [\\n {\\n \\\"type\\\": \\\"aggregate\\\",\\n \\\"groupby\\\": [\\\"stack\\\", \\\"grpId\\\"],\\n \\\"fields\\\": [\\\"size\\\"],\\n \\\"ops\\\": [\\\"sum\\\"],\\n \\\"as\\\": [\\\"total\\\"]\\n },\\n {\\n \\\"type\\\": \\\"stack\\\",\\n \\\"groupby\\\": [\\\"stack\\\"],\\n \\\"sort\\\": {\\\"field\\\": \\\"grpId\\\", \\\"order\\\": \\\"descending\\\"},\\n \\\"field\\\": \\\"total\\\"\\n },\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"scale('y', datum.y0)\\\", \\\"as\\\": \\\"scaledY0\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"scale('y', datum.y1)\\\", \\\"as\\\": \\\"scaledY1\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.stack == 'stk1'\\\", \\\"as\\\": \\\"rightLabel\\\"},\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"datum.total/domain('y')[1]\\\",\\n \\\"as\\\": \\\"percentage\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"destinationNodes\\\",\\n \\\"source\\\": \\\"nodes\\\",\\n \\\"transform\\\": [{\\\"type\\\": \\\"filter\\\", \\\"expr\\\": \\\"datum.stack == 'stk2'\\\"}]\\n },\\n {\\n \\\"name\\\": \\\"edges\\\",\\n \\\"source\\\": \\\"nodes\\\",\\n \\\"transform\\\": [\\n {\\\"type\\\": \\\"filter\\\", \\\"expr\\\": \\\"datum.stack == 'stk1'\\\"},\\n {\\n \\\"type\\\": \\\"lookup\\\",\\n \\\"from\\\": \\\"destinationNodes\\\",\\n \\\"key\\\": \\\"key\\\",\\n \\\"fields\\\": [\\\"key\\\"],\\n \\\"as\\\": [\\\"target\\\"]\\n },\\n {\\n \\\"type\\\": \\\"linkpath\\\",\\n \\\"orient\\\": \\\"horizontal\\\",\\n \\\"shape\\\": \\\"diagonal\\\",\\n \\\"sourceY\\\": {\\\"expr\\\": \\\"scale('y', datum.yc)\\\"},\\n \\\"sourceX\\\": {\\\"expr\\\": \\\"scale('x', 'stk1') + bandwidth('x')\\\"},\\n \\\"targetY\\\": {\\\"expr\\\": \\\"scale('y', datum.target.yc)\\\"},\\n \\\"targetX\\\": {\\\"expr\\\": \\\"scale('x', 'stk2')\\\"}\\n },\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"range('y')[0]-scale('y', datum.size)\\\",\\n \\\"as\\\": \\\"strokeWidth\\\"\\n },\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"datum.size/domain('y')[1]\\\",\\n \\\"as\\\": \\\"percentage\\\"\\n }\\n ]\\n }\\n ],\\n \\\"scales\\\": [\\n {\\n \\\"name\\\": \\\"x\\\",\\n \\\"type\\\": \\\"band\\\",\\n \\\"range\\\": \\\"width\\\",\\n \\\"domain\\\": [\\\"stk1\\\", \\\"stk2\\\"],\\n \\\"paddingOuter\\\": 0.01,\\n \\\"paddingInner\\\": 0.98\\n },\\n {\\n \\\"name\\\": \\\"y\\\",\\n \\\"type\\\": \\\"linear\\\",\\n \\\"range\\\": \\\"height\\\",\\n \\\"domain\\\": {\\\"data\\\": \\\"nodes\\\", \\\"field\\\": \\\"y1\\\"}\\n },\\n {\\n \\\"name\\\": \\\"color\\\",\\n \\\"type\\\": \\\"ordinal\\\",\\n \\\"range\\\": \\\"category\\\",\\n \\\"domain\\\": {\\\"data\\\": \\\"rawData\\\", \\\"fields\\\": [\\\"stk1\\\",\\\"stk2\\\"]}\\n },\\n {\\n \\\"name\\\": \\\"stackNames\\\",\\n \\\"type\\\": \\\"ordinal\\\",\\n \\\"range\\\": [\\\"Source Pod\\\", \\\"Destination Service\\\"],\\n \\\"domain\\\": [\\\"stk1\\\", \\\"stk2\\\"]\\n }\\n ],\\n \\\"axes\\\": [\\n {\\n \\\"orient\\\": \\\"bottom\\\",\\n \\\"scale\\\": \\\"x\\\",\\n \\\"labelColor\\\": {\\n \\\"value\\\": \\\"#888888\\\"\\n },\\n \\\"encode\\\": {\\n \\\"labels\\\": {\\n \\\"update\\\": {\\n \\\"text\\\": {\\\"scale\\\": \\\"stackNames\\\", \\\"field\\\": \\\"value\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 14}\\n }\\n }\\n }\\n },\\n {\\n \\\"orient\\\": \\\"left\\\",\\n \\\"scale\\\": \\\"y\\\",\\n \\\"labelColor\\\": {\\n \\\"value\\\": \\\"#888888\\\"\\n },\\n \\\"encode\\\": {\\n \\\"labels\\\": {\\n \\\"update\\\": {\\n \\\"text\\\": {\\\"signal\\\": \\\"format(datum.value, '.2s') + 'B'\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 12}\\n }\\n }\\n }\\n }\\n ],\\n \\\"marks\\\": [\\n {\\n \\\"type\\\": \\\"path\\\",\\n \\\"name\\\": \\\"edgeMark\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"edges\\\"},\\n \\\"clip\\\": true,\\n \\\"encode\\\": {\\n \\\"update\\\": {\\n \\\"stroke\\\": [\\n {\\n \\\"test\\\": \\\"groupSelector && groupSelector.stack=='stk1'\\\",\\n \\\"scale\\\": \\\"color\\\",\\n \\\"field\\\": \\\"stk2\\\"\\n },\\n {\\\"scale\\\": \\\"color\\\", \\\"field\\\": \\\"stk1\\\"}\\n ],\\n \\\"strokeWidth\\\": {\\\"field\\\": \\\"strokeWidth\\\"},\\n \\\"path\\\": {\\\"field\\\": \\\"path\\\"},\\n \\\"strokeOpacity\\\": {\\n \\\"signal\\\": \\\"!groupSelector && (groupHover.stk1 == datum.stk1 || groupHover.stk2 == datum.stk2) ? 0.75 : 0.3\\\"\\n },\\n \\\"zindex\\\": {\\n \\\"signal\\\": \\\"!groupSelector && (groupHover.stk1 == datum.stk1 || groupHover.stk2 == datum.stk2) ? 1 : 0\\\"\\n },\\n \\\"tooltip\\\": {\\n \\\"signal\\\": \\\"{'title': datum.stk1 + ' → ' + datum.stk2 + ' ' + format(datum.size, '.2s') + 'B (' + format(datum.percentage, '.1%') + ')', 'IP Address': datum.stk3 +' → ' + datum.stk4 }\\\"\\n }\\n },\\n \\\"hover\\\": {\\\"strokeOpacity\\\": {\\\"value\\\": 0.75}}\\n }\\n },\\n {\\n \\\"type\\\": \\\"rect\\\",\\n \\\"name\\\": \\\"groupMark\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"groups\\\"},\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"fill\\\": {\\\"scale\\\": \\\"color\\\", \\\"field\\\": \\\"grpId\\\"},\\n \\\"width\\\": {\\\"scale\\\": \\\"x\\\", \\\"band\\\": 1}\\n },\\n \\\"update\\\": {\\n \\\"x\\\": {\\\"scale\\\": \\\"x\\\", \\\"field\\\": \\\"stack\\\"},\\n \\\"y\\\": {\\\"field\\\": \\\"scaledY0\\\"},\\n \\\"y2\\\": {\\\"field\\\": \\\"scaledY1\\\"},\\n \\\"fillOpacity\\\": {\\\"value\\\": 0.7},\\n \\\"tooltip\\\": {\\n \\\"signal\\\": \\\"datum.grpId + ' ' + format(datum.total, '.2s') + 'B (' + format(datum.percentage, '.1%') + ')'\\\"\\n }\\n },\\n \\\"hover\\\": {\\\"fillOpacity\\\": {\\\"value\\\": 1}}\\n }\\n },\\n {\\n \\\"type\\\": \\\"text\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"groups\\\"},\\n \\\"interactive\\\": false,\\n \\\"encode\\\": {\\n \\\"update\\\": {\\n \\\"x\\\": {\\n \\\"signal\\\": \\\"scale('x', datum.stack) + (datum.rightLabel ? bandwidth('x') + 8 : -8)\\\"\\n },\\n \\\"yc\\\": {\\\"signal\\\": \\\"(datum.scaledY0 + datum.scaledY1)/2\\\"},\\n \\\"align\\\": {\\\"signal\\\": \\\"datum.rightLabel ? 'left' : 'right'\\\"},\\n \\\"baseline\\\": {\\\"value\\\": \\\"middle\\\"},\\n \\\"fontWeight\\\": {\\\"value\\\": \\\"bold\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 12},\\n \\\"text\\\": {\\n \\\"signal\\\": \\\"abs(datum.scaledY0-datum.scaledY1) > 10 ? datum.grpId : ''\\\"\\n }\\n }\\n }\\n },\\n {\\n \\\"type\\\": \\\"group\\\",\\n \\\"data\\\": [\\n {\\n \\\"name\\\": \\\"dataForShowAll\\\",\\n \\\"values\\\": [{}],\\n \\\"transform\\\": [{\\\"type\\\": \\\"filter\\\", \\\"expr\\\": \\\"groupSelector\\\"}]\\n }\\n ],\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"xc\\\": {\\\"signal\\\": \\\"width/2\\\"},\\n \\\"y\\\": {\\\"value\\\": 30},\\n \\\"width\\\": {\\\"value\\\": 100},\\n \\\"height\\\": {\\\"value\\\": 36}\\n }\\n },\\n \\\"marks\\\": [\\n {\\n \\\"type\\\": \\\"group\\\",\\n \\\"name\\\": \\\"groupReset\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"dataForShowAll\\\"},\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"cornerRadius\\\": {\\\"value\\\": 3.5},\\n \\\"fill\\\": {\\\"value\\\": \\\"#666666\\\"},\\n \\\"height\\\": {\\\"field\\\": {\\\"group\\\": \\\"height\\\"}},\\n \\\"width\\\": {\\\"field\\\": {\\\"group\\\": \\\"width\\\"}}\\n },\\n \\\"update\\\": {\\\"opacity\\\": {\\\"value\\\": 1}},\\n \\\"hover\\\": {\\\"fill\\\": {\\\"value\\\": \\\"#444444\\\"}}\\n },\\n \\\"marks\\\": [\\n {\\n \\\"type\\\": \\\"text\\\",\\n \\\"interactive\\\": false,\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"xc\\\": {\\\"field\\\": {\\\"group\\\": \\\"width\\\"}, \\\"mult\\\": 0.5},\\n \\\"yc\\\": {\\\"field\\\": {\\\"group\\\": \\\"height\\\"}, \\\"mult\\\": 0.5, \\\"offset\\\": 1},\\n \\\"align\\\": {\\\"value\\\": \\\"center\\\"},\\n \\\"baseline\\\": {\\\"value\\\": \\\"middle\\\"},\\n \\\"text\\\": {\\\"value\\\": \\\"Show All\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 14},\\n \\\"stroke\\\": {\\\"value\\\": \\\"#ecf0f1\\\"}\\n }\\n }\\n }\\n ]\\n }\\n ]\\n }\\n ],\\n \\\"signals\\\": [\\n {\\n \\\"name\\\": \\\"groupHover\\\",\\n \\\"value\\\": {},\\n \\\"on\\\": [\\n {\\n \\\"events\\\": \\\"@groupMark:mouseover\\\",\\n \\\"update\\\": \\\"{stk1:datum.stack=='stk1' && datum.grpId, stk2:datum.stack=='stk2' && datum.grpId}\\\"\\n },\\n {\\\"events\\\": \\\"mouseout\\\", \\\"update\\\": \\\"{}\\\"}\\n ]\\n },\\n {\\n \\\"name\\\": \\\"groupSelector\\\",\\n \\\"value\\\": false,\\n \\\"on\\\": [\\n {\\n \\\"events\\\": \\\"@groupMark:click!\\\",\\n \\\"update\\\": \\\"{stack:datum.stack, stk1:datum.stack=='stk1' && datum.grpId, stk2:datum.stack=='stk2' && datum.grpId}\\\"\\n },\\n {\\n \\\"events\\\": [\\n {\\\"type\\\": \\\"click\\\", \\\"markname\\\": \\\"groupReset\\\"},\\n {\\\"type\\\": \\\"dblclick\\\"}\\n ],\\n \\\"update\\\": \\\"false\\\"\\n }\\n ]\\n }\\n ]\\n}\"},\"title\":\"Pod-to-Service Flow Cumulative Bytes\"}"},"id":"67f0ca90-d07b-11ea-a734-57fc7859997d","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzUxLDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"lucene\",\"query\":\"\"},\"filter\":[]}"},"title":"Pod-to-Service Flow Nav","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"index_pattern\":\"flow-*\",\"interval\":\"auto\",\"isModelInvalid\":false,\"markdown_css\":\"#markdown-61ca57f0-469d-11e7-af02-69e470af7417 p{color:#cccccc;margin-top:0;margin-bottom:8px;text-align:right}#markdown-61ca57f0-469d-11e7-af02-69e470af7417 p a{color:#1eadbd;font-size:17px;font-weight:bold;text-decoration:none}#markdown-61ca57f0-469d-11e7-af02-69e470af7417 p a strong{color:#ffac12;font-weight:bold}#markdown-61ca57f0-469d-11e7-af02-69e470af7417 hr{background-color:#cccccc;margin:0;height:1px}\",\"markdown_less\":\"p {\\n color: #cccccc;\\n margin-top: 0px;\\n margin-bottom: 8px;\\n text-align: right;\\n}\\np a {\\n color: #1eadbd;\\n\\tfont-size: 17px;\\n\\tfont-weight: bold;\\n\\ttext-decoration: none;\\n}\\np a strong {\\n color: #ffac12;\\n\\tfont-weight: bold;\\n}\\nhr {\\n background-color: #cccccc;\\n margin: 0px;\\n height: 1px;\\n}\",\"markdown_vertical_align\":\"top\",\"series\":[{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"number\",\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"line_width\":1,\"metrics\":[{\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"count\"}],\"offset_time\":\"-5y\",\"point_size\":1,\"separate_axis\":0,\"split_color_mode\":\"gradient\",\"split_mode\":\"everything\",\"stacked\":\"none\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":null,\"type\":\"markdown\",\"markdown\":\"[Overview](#/dashboard/3b331b30-b987-11ea-b16e-fb06687c3589) | [Pod-to-Pod Flow](#/dashboard/c2b15fb0-b9a8-11ea-b16e-fb06687c3589) | [Pod-to-External Flow](#/dashboard/3ed71e80-a92d-11eb-a7ef-5dcb53008c10) | [**Pod-to-Service Flow**](#/dashboard/6d77e8a0-513a-11eb-a19a-05e08a82dcf8) | [Node](#/dashboard/5400cdf0-cd2e-11ea-8911-87da3aad0324) | [Network Policy](#/dashboard/c5af6850-23b2-11eb-90d2-a7a4de48218a) | [Flow Records](#/dashboard/2ab9c220-b984-11ea-b16e-fb06687c3589)\"},\"title\":\"Pod-to-Service Flow Nav\"}"},"id":"c4e1b7c0-b9a9-11ea-b16e-fb06687c3589","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzUyLDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Pod-to-Service Filter","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"input_control_vis\",\"aggs\":[],\"params\":{\"updateFiltersOnChange\":true,\"useTimeFilter\":true,\"pinFilters\":true,\"controls\":[{\"id\":\"1610147114234\",\"fieldName\":\"ipfix.sourcePodNamespace.keyword\",\"parent\":\"\",\"label\":\"Source Pod Namespace\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":false,\"size\":1000,\"order\":\"desc\"},\"indexPatternRefName\":\"control_0_index_pattern\"},{\"id\":\"1610147099400\",\"fieldName\":\"ipfix.sourcePodName.keyword\",\"parent\":\"\",\"label\":\"Source Pod Name\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":false,\"size\":1000,\"order\":\"desc\"},\"indexPatternRefName\":\"control_1_index_pattern\"},{\"id\":\"1610427679127\",\"fieldName\":\"ipfix.destinationPodNamespace.keyword\",\"parent\":\"\",\"label\":\"Destination Service Namespace\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":false,\"size\":1000,\"order\":\"desc\"},\"indexPatternRefName\":\"control_2_index_pattern\"},{\"id\":\"1595904313889\",\"fieldName\":\"ipfix.destinationServicePortName.keyword\",\"parent\":\"\",\"label\":\"Destination Service Name\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":false,\"size\":1000,\"order\":\"desc\"},\"indexPatternRefName\":\"control_3_index_pattern\"},{\"id\":\"1610067847339\",\"parent\":\"\",\"type\":\"list\",\"label\":\"Destination Service Port\",\"fieldName\":\"ipfix.destinationServicePort\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":true,\"order\":\"desc\",\"size\":1000},\"indexPatternRefName\":\"control_4_index_pattern\"},{\"id\":\"1610147131444\",\"parent\":\"\",\"label\":\"Flow Key (Pod-to-Service)\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":false,\"size\":1000,\"order\":\"desc\"},\"fieldName\":\"ipfix.flowKeyPodToService.keyword\",\"indexPatternRefName\":\"control_5_index_pattern\"},{\"id\":\"1618607115393\",\"fieldName\":\"ipfix.flowTypeStr.keyword\",\"parent\":\"\",\"label\":\"Flow Type\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":false,\"size\":1000,\"order\":\"desc\"},\"indexPatternRefName\":\"control_6_index_pattern\"}]},\"title\":\"Pod-to-Service Filter\"}"},"id":"804d18c0-514d-11eb-a19a-05e08a82dcf8","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_0_index_pattern","type":"index-pattern"},{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_1_index_pattern","type":"index-pattern"},{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_2_index_pattern","type":"index-pattern"},{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_3_index_pattern","type":"index-pattern"},{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_4_index_pattern","type":"index-pattern"},{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_5_index_pattern","type":"index-pattern"},{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_6_index_pattern","type":"index-pattern"}],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzUzLDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}"},"title":"Pod-to-Service Flow Reverse Cumulative Bytes","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"vega\",\"aggs\":[],\"params\":{\"spec\":\"{\\n \\\"$schema\\\": \\\"https://vega.github.io/schema/vega/v3.0.json\\\",\\n \\\"data\\\": [\\n {\\n \\\"name\\\": \\\"rawData\\\",\\n \\\"url\\\": {\\n \\\"%context%\\\": true,\\n \\\"%timefield%\\\": \\\"@timestamp\\\",\\n \\\"index\\\": \\\"flow-*\\\",\\n \\\"body\\\": {\\n \\\"size\\\": 0,\\n \\\"aggs\\\": {\\n \\\"table\\\": {\\n \\\"composite\\\": {\\n \\\"size\\\": 1000,\\n \\\"sources\\\": [\\n {\\\"stk1\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.sourcePodName.keyword\\\"}}},\\n {\\\"stk1ns\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.sourcePodNamespace.keyword\\\"}}},\\n {\\\"stk2\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.destinationServicePortName.keyword\\\"}}},\\n {\\\"stk2p\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.destinationServicePort\\\"}}},\\n {\\\"stk3\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.sourceIP.keyword\\\"}}},\\n {\\\"stk4\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.destinationIP.keyword\\\"}}}\\n ]\\n },\\n \\t\\t\\t\\\"aggs\\\": {\\n \\t\\t\\t\\t\\\"bytes\\\": {\\n \\t\\t\\t\\t\\t\\\"sum\\\": {\\n \\t\\t\\t\\t\\t\\t\\\"field\\\": \\\"ipfix.reverseOctetDeltaCountFromSourceNode\\\"\\n \\t\\t\\t\\t\\t}\\n \\t\\t\\t\\t}\\n \\t\\t\\t}\\n }\\n }\\n }\\n },\\n \\\"format\\\": {\\\"property\\\": \\\"aggregations.table.buckets\\\"},\\n \\\"transform\\\": [\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk1ns +'/'+ datum.key.stk1\\\", \\\"as\\\": \\\"stk1s\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"(datum.key.stk1==''?datum.key.stk3:datum.stk1s)\\\", \\\"as\\\": \\\"stk1\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk2 + datum.key.stk2p\\\", \\\"as\\\": \\\"stk2p\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"(datum.key.stk2==''?datum.key.stk4:datum.stk2p)\\\", \\\"as\\\": \\\"stk2\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk3\\\", \\\"as\\\": \\\"stk3\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk4\\\", \\\"as\\\": \\\"stk4\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.bytes.value\\\", \\\"as\\\": \\\"size\\\"}\\n ]\\n },\\n {\\n \\\"name\\\": \\\"nodes\\\",\\n \\\"source\\\": \\\"rawData\\\",\\n \\\"transform\\\": [\\n {\\n \\\"type\\\": \\\"filter\\\",\\n \\\"expr\\\": \\\"!groupSelector || groupSelector.stk1 == datum.stk1 || groupSelector.stk2 == datum.stk2\\\"\\n },\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.stk1+datum.stk2+datum.stk3+datum.stk4\\\", \\\"as\\\": \\\"key\\\"},\\n {\\\"type\\\": \\\"fold\\\", \\\"fields\\\": [\\\"stk1\\\", \\\"stk2\\\"], \\\"as\\\": [\\\"stack\\\", \\\"grpId\\\"]},\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"datum.stack == 'stk1' ? datum.stk1+datum.stk2 : datum.stk2+datum.stk1\\\",\\n \\\"as\\\": \\\"sortField\\\"\\n },\\n {\\n \\\"type\\\": \\\"stack\\\",\\n \\\"groupby\\\": [\\\"stack\\\"],\\n \\\"sort\\\": {\\\"field\\\": \\\"sortField\\\", \\\"order\\\": \\\"descending\\\"},\\n \\\"field\\\": \\\"size\\\"\\n },\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"(datum.y0+datum.y1)/2\\\", \\\"as\\\": \\\"yc\\\"}\\n ]\\n },\\n {\\n \\\"name\\\": \\\"groups\\\",\\n \\\"source\\\": \\\"nodes\\\",\\n \\\"transform\\\": [\\n {\\n \\\"type\\\": \\\"aggregate\\\",\\n \\\"groupby\\\": [\\\"stack\\\", \\\"grpId\\\"],\\n \\\"fields\\\": [\\\"size\\\"],\\n \\\"ops\\\": [\\\"sum\\\"],\\n \\\"as\\\": [\\\"total\\\"]\\n },\\n {\\n \\\"type\\\": \\\"stack\\\",\\n \\\"groupby\\\": [\\\"stack\\\"],\\n \\\"sort\\\": {\\\"field\\\": \\\"grpId\\\", \\\"order\\\": \\\"descending\\\"},\\n \\\"field\\\": \\\"total\\\"\\n },\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"scale('y', datum.y0)\\\", \\\"as\\\": \\\"scaledY0\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"scale('y', datum.y1)\\\", \\\"as\\\": \\\"scaledY1\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.stack == 'stk1'\\\", \\\"as\\\": \\\"rightLabel\\\"},\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"datum.total/domain('y')[1]\\\",\\n \\\"as\\\": \\\"percentage\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"destinationNodes\\\",\\n \\\"source\\\": \\\"nodes\\\",\\n \\\"transform\\\": [{\\\"type\\\": \\\"filter\\\", \\\"expr\\\": \\\"datum.stack == 'stk2'\\\"}]\\n },\\n {\\n \\\"name\\\": \\\"edges\\\",\\n \\\"source\\\": \\\"nodes\\\",\\n \\\"transform\\\": [\\n {\\\"type\\\": \\\"filter\\\", \\\"expr\\\": \\\"datum.stack == 'stk1'\\\"},\\n {\\n \\\"type\\\": \\\"lookup\\\",\\n \\\"from\\\": \\\"destinationNodes\\\",\\n \\\"key\\\": \\\"key\\\",\\n \\\"fields\\\": [\\\"key\\\"],\\n \\\"as\\\": [\\\"target\\\"]\\n },\\n {\\n \\\"type\\\": \\\"linkpath\\\",\\n \\\"orient\\\": \\\"horizontal\\\",\\n \\\"shape\\\": \\\"diagonal\\\",\\n \\\"sourceY\\\": {\\\"expr\\\": \\\"scale('y', datum.yc)\\\"},\\n \\\"sourceX\\\": {\\\"expr\\\": \\\"scale('x', 'stk1') + bandwidth('x')\\\"},\\n \\\"targetY\\\": {\\\"expr\\\": \\\"scale('y', datum.target.yc)\\\"},\\n \\\"targetX\\\": {\\\"expr\\\": \\\"scale('x', 'stk2')\\\"}\\n },\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"range('y')[0]-scale('y', datum.size)\\\",\\n \\\"as\\\": \\\"strokeWidth\\\"\\n },\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"datum.size/domain('y')[1]\\\",\\n \\\"as\\\": \\\"percentage\\\"\\n }\\n ]\\n }\\n ],\\n \\\"scales\\\": [\\n {\\n \\\"name\\\": \\\"x\\\",\\n \\\"type\\\": \\\"band\\\",\\n \\\"range\\\": \\\"width\\\",\\n \\\"domain\\\": [\\\"stk1\\\", \\\"stk2\\\"],\\n \\\"paddingOuter\\\": 0.01,\\n \\\"paddingInner\\\": 0.98\\n },\\n {\\n \\\"name\\\": \\\"y\\\",\\n \\\"type\\\": \\\"linear\\\",\\n \\\"range\\\": \\\"height\\\",\\n \\\"domain\\\": {\\\"data\\\": \\\"nodes\\\", \\\"field\\\": \\\"y1\\\"}\\n },\\n {\\n \\\"name\\\": \\\"color\\\",\\n \\\"type\\\": \\\"ordinal\\\",\\n \\\"range\\\": \\\"category\\\",\\n \\\"domain\\\": {\\\"data\\\": \\\"rawData\\\", \\\"fields\\\": [\\\"stk1\\\",\\\"stk2\\\"]}\\n },\\n {\\n \\\"name\\\": \\\"stackNames\\\",\\n \\\"type\\\": \\\"ordinal\\\",\\n \\\"range\\\": [\\\"Source Pod\\\", \\\"Destination Service\\\"],\\n \\\"domain\\\": [\\\"stk1\\\", \\\"stk2\\\"]\\n }\\n ],\\n \\\"axes\\\": [\\n {\\n \\\"orient\\\": \\\"bottom\\\",\\n \\\"scale\\\": \\\"x\\\",\\n \\\"labelColor\\\": {\\n \\\"value\\\": \\\"#888888\\\"\\n },\\n \\\"encode\\\": {\\n \\\"labels\\\": {\\n \\\"update\\\": {\\n \\\"text\\\": {\\\"scale\\\": \\\"stackNames\\\", \\\"field\\\": \\\"value\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 14}\\n }\\n }\\n }\\n },\\n {\\n \\\"orient\\\": \\\"left\\\",\\n \\\"scale\\\": \\\"y\\\",\\n \\\"labelColor\\\": {\\n \\\"value\\\": \\\"#888888\\\"\\n },\\n \\\"encode\\\": {\\n \\\"labels\\\": {\\n \\\"update\\\": {\\n \\\"text\\\": {\\\"signal\\\": \\\"format(datum.value, '.2s') + 'B'\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 12}\\n }\\n }\\n }\\n }\\n ],\\n \\\"marks\\\": [\\n {\\n \\\"type\\\": \\\"path\\\",\\n \\\"name\\\": \\\"edgeMark\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"edges\\\"},\\n \\\"clip\\\": true,\\n \\\"encode\\\": {\\n \\\"update\\\": {\\n \\\"stroke\\\": [\\n {\\n \\\"test\\\": \\\"groupSelector && groupSelector.stack=='stk1'\\\",\\n \\\"scale\\\": \\\"color\\\",\\n \\\"field\\\": \\\"stk2\\\"\\n },\\n {\\\"scale\\\": \\\"color\\\", \\\"field\\\": \\\"stk1\\\"}\\n ],\\n \\\"strokeWidth\\\": {\\\"field\\\": \\\"strokeWidth\\\"},\\n \\\"path\\\": {\\\"field\\\": \\\"path\\\"},\\n \\\"strokeOpacity\\\": {\\n \\\"signal\\\": \\\"!groupSelector && (groupHover.stk1 == datum.stk1 || groupHover.stk2 == datum.stk2) ? 0.75 : 0.3\\\"\\n },\\n \\\"zindex\\\": {\\n \\\"signal\\\": \\\"!groupSelector && (groupHover.stk1 == datum.stk1 || groupHover.stk2 == datum.stk2) ? 1 : 0\\\"\\n },\\n \\\"tooltip\\\": {\\n \\\"signal\\\": \\\"{'title': datum.stk1 + ' → ' + datum.stk2 + ' ' + format(datum.size, '.2s') + 'B (' + format(datum.percentage, '.1%') + ')', 'IP Address': datum.stk3 +' → ' + datum.stk4 }\\\"\\n }\\n },\\n \\\"hover\\\": {\\\"strokeOpacity\\\": {\\\"value\\\": 0.75}}\\n }\\n },\\n {\\n \\\"type\\\": \\\"rect\\\",\\n \\\"name\\\": \\\"groupMark\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"groups\\\"},\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"fill\\\": {\\\"scale\\\": \\\"color\\\", \\\"field\\\": \\\"grpId\\\"},\\n \\\"width\\\": {\\\"scale\\\": \\\"x\\\", \\\"band\\\": 1}\\n },\\n \\\"update\\\": {\\n \\\"x\\\": {\\\"scale\\\": \\\"x\\\", \\\"field\\\": \\\"stack\\\"},\\n \\\"y\\\": {\\\"field\\\": \\\"scaledY0\\\"},\\n \\\"y2\\\": {\\\"field\\\": \\\"scaledY1\\\"},\\n \\\"fillOpacity\\\": {\\\"value\\\": 0.7},\\n \\\"tooltip\\\": {\\n \\\"signal\\\": \\\"datum.grpId + ' ' + format(datum.total, '.2s') + 'B (' + format(datum.percentage, '.1%') + ')'\\\"\\n }\\n },\\n \\\"hover\\\": {\\\"fillOpacity\\\": {\\\"value\\\": 1}}\\n }\\n },\\n {\\n \\\"type\\\": \\\"text\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"groups\\\"},\\n \\\"interactive\\\": false,\\n \\\"encode\\\": {\\n \\\"update\\\": {\\n \\\"x\\\": {\\n \\\"signal\\\": \\\"scale('x', datum.stack) + (datum.rightLabel ? bandwidth('x') + 8 : -8)\\\"\\n },\\n \\\"yc\\\": {\\\"signal\\\": \\\"(datum.scaledY0 + datum.scaledY1)/2\\\"},\\n \\\"align\\\": {\\\"signal\\\": \\\"datum.rightLabel ? 'left' : 'right'\\\"},\\n \\\"baseline\\\": {\\\"value\\\": \\\"middle\\\"},\\n \\\"fontWeight\\\": {\\\"value\\\": \\\"bold\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 12},\\n \\\"text\\\": {\\n \\\"signal\\\": \\\"abs(datum.scaledY0-datum.scaledY1) > 10 ? datum.grpId : ''\\\"\\n }\\n }\\n }\\n },\\n {\\n \\\"type\\\": \\\"group\\\",\\n \\\"data\\\": [\\n {\\n \\\"name\\\": \\\"dataForShowAll\\\",\\n \\\"values\\\": [{}],\\n \\\"transform\\\": [{\\\"type\\\": \\\"filter\\\", \\\"expr\\\": \\\"groupSelector\\\"}]\\n }\\n ],\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"xc\\\": {\\\"signal\\\": \\\"width/2\\\"},\\n \\\"y\\\": {\\\"value\\\": 30},\\n \\\"width\\\": {\\\"value\\\": 100},\\n \\\"height\\\": {\\\"value\\\": 36}\\n }\\n },\\n \\\"marks\\\": [\\n {\\n \\\"type\\\": \\\"group\\\",\\n \\\"name\\\": \\\"groupReset\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"dataForShowAll\\\"},\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"cornerRadius\\\": {\\\"value\\\": 3.5},\\n \\\"fill\\\": {\\\"value\\\": \\\"#666666\\\"},\\n \\\"height\\\": {\\\"field\\\": {\\\"group\\\": \\\"height\\\"}},\\n \\\"width\\\": {\\\"field\\\": {\\\"group\\\": \\\"width\\\"}}\\n },\\n \\\"update\\\": {\\\"opacity\\\": {\\\"value\\\": 1}},\\n \\\"hover\\\": {\\\"fill\\\": {\\\"value\\\": \\\"#444444\\\"}}\\n },\\n \\\"marks\\\": [\\n {\\n \\\"type\\\": \\\"text\\\",\\n \\\"interactive\\\": false,\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"xc\\\": {\\\"field\\\": {\\\"group\\\": \\\"width\\\"}, \\\"mult\\\": 0.5},\\n \\\"yc\\\": {\\\"field\\\": {\\\"group\\\": \\\"height\\\"}, \\\"mult\\\": 0.5, \\\"offset\\\": 1},\\n \\\"align\\\": {\\\"value\\\": \\\"center\\\"},\\n \\\"baseline\\\": {\\\"value\\\": \\\"middle\\\"},\\n \\\"text\\\": {\\\"value\\\": \\\"Show All\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 14},\\n \\\"stroke\\\": {\\\"value\\\": \\\"#ecf0f1\\\"}\\n }\\n }\\n }\\n ]\\n }\\n ]\\n }\\n ],\\n \\\"signals\\\": [\\n {\\n \\\"name\\\": \\\"groupHover\\\",\\n \\\"value\\\": {},\\n \\\"on\\\": [\\n {\\n \\\"events\\\": \\\"@groupMark:mouseover\\\",\\n \\\"update\\\": \\\"{stk1:datum.stack=='stk1' && datum.grpId, stk2:datum.stack=='stk2' && datum.grpId}\\\"\\n },\\n {\\\"events\\\": \\\"mouseout\\\", \\\"update\\\": \\\"{}\\\"}\\n ]\\n },\\n {\\n \\\"name\\\": \\\"groupSelector\\\",\\n \\\"value\\\": false,\\n \\\"on\\\": [\\n {\\n \\\"events\\\": \\\"@groupMark:click!\\\",\\n \\\"update\\\": \\\"{stack:datum.stack, stk1:datum.stack=='stk1' && datum.grpId, stk2:datum.stack=='stk2' && datum.grpId}\\\"\\n },\\n {\\n \\\"events\\\": [\\n {\\\"type\\\": \\\"click\\\", \\\"markname\\\": \\\"groupReset\\\"},\\n {\\\"type\\\": \\\"dblclick\\\"}\\n ],\\n \\\"update\\\": \\\"false\\\"\\n }\\n ]\\n }\\n ]\\n}\"},\"title\":\"Pod-to-Service Flow Reverse Cumulative Bytes\"}"},"id":"94b0a1e0-d07b-11ea-a734-57fc7859997d","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzU0LDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}"},"title":"Tx Mbps by Pod-to-Service Flow","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"show_legend\":1,\"show_grid\":1,\"axis_min\":\"0\",\"filter\":\"\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false,\"index_pattern\":\"flow-*\",\"interval\":\"1m\",\"time_field\":\"ipfix.flowEndSeconds\",\"background_color_rules\":[{\"id\":\"4010d970-50b9-11eb-8f30-87baf4f5ad91\"}],\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"rgba(144,201,227,1)\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"type\":\"sum\",\"field\":\"ipfix.throughput\"},{\"script\":\"params.bytes * 8 \",\"id\":\"dd0b81d0-b9a6-11ea-9740-552c943910e4\",\"type\":\"calculation\",\"variables\":[{\"id\":\"e1f87e50-b9a6-11ea-9740-552c943910e4\",\"name\":\"bytes\",\"field\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\"}]}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":\"0\",\"fill\":\"0.6\",\"stacked\":\"none\",\"split_color_mode\":\"rainbow\",\"label\":\"Bytes\",\"terms_field\":\"ipfix.flowKeyPodToService.keyword\",\"terms_size\":\"30\",\"terms_order_by\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"value_template\":\"{{value}}it/s\",\"type\":\"timeseries\",\"terms_exclude\":\"\",\"filter\":{\"query\":\"\",\"language\":\"kuery\"}}]},\"title\":\"Tx Mbps by Pod-to-Service Flow\"}"},"id":"f5f29b00-520a-11eb-8385-698d3cd613b0","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzU1LDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Cumulative Bandwidth by Pod-to-Service Flow","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"show_legend\":1,\"show_grid\":1,\"axis_min\":\"0\",\"filter\":\"\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false,\"index_pattern\":\"flow-*\",\"interval\":\"1m\",\"time_field\":\"ipfix.flowEndSeconds\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"rgba(144,201,227,1)\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"type\":\"sum\",\"field\":\"ipfix.octetTotalCountFromSourceNode\"},{\"script\":\"params.bytes * 8\",\"id\":\"dd0b81d0-b9a6-11ea-9740-552c943910e4\",\"type\":\"calculation\",\"variables\":[{\"id\":\"e1f87e50-b9a6-11ea-9740-552c943910e4\",\"name\":\"bytes\",\"field\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\"}]}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":\"0\",\"fill\":\"0.6\",\"stacked\":\"none\",\"split_color_mode\":\"rainbow\",\"label\":\"Bytes\",\"terms_field\":\"ipfix.flowKeyPodToService.keyword\",\"terms_size\":\"30\",\"terms_order_by\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"value_template\":\"{{value}}\",\"type\":\"timeseries\"}]},\"title\":\"Cumulative Bandwidth by Pod-to-Service Flow\"}"},"id":"d0582e90-520b-11eb-8385-698d3cd613b0","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzU2LDFd"}
-{"attributes":{"description":"","hits":0,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}"},"optionsJSON":"{\"hidePanelTitles\":false,\"useMargins\":true}","panelsJSON":"[{\"embeddableConfig\":{\"title\":\"\"},\"gridData\":{\"h\":3,\"i\":\"027bb966-548e-4c19-84a3-e9e213b0fb70\",\"w\":48,\"x\":0,\"y\":0},\"panelIndex\":\"027bb966-548e-4c19-84a3-e9e213b0fb70\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_0\"},{\"embeddableConfig\":{\"title\":\"\"},\"gridData\":{\"h\":5,\"i\":\"66329618-2ac9-4223-a33d-26cce2e4b455\",\"w\":48,\"x\":0,\"y\":3},\"panelIndex\":\"66329618-2ac9-4223-a33d-26cce2e4b455\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_1\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":29,\"i\":\"2136520e-2f75-45f6-9b38-2469f1ff005b\",\"w\":24,\"x\":0,\"y\":8},\"panelIndex\":\"2136520e-2f75-45f6-9b38-2469f1ff005b\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_2\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":29,\"i\":\"d3671f1d-7a7c-4bf7-95a1-da749654e893\",\"w\":24,\"x\":24,\"y\":8},\"panelIndex\":\"d3671f1d-7a7c-4bf7-95a1-da749654e893\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_3\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"1de71bb0-8f22-4859-9260-a8fea17c3fef\",\"w\":24,\"x\":0,\"y\":37},\"panelIndex\":\"1de71bb0-8f22-4859-9260-a8fea17c3fef\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_4\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"35a3e0b4-822c-4581-bb6c-5583c4473cd7\",\"w\":24,\"x\":24,\"y\":37},\"panelIndex\":\"35a3e0b4-822c-4581-bb6c-5583c4473cd7\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_5\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"e9949d99-56ba-4b45-8064-4ce12f9644ae\",\"w\":24,\"x\":0,\"y\":52},\"panelIndex\":\"e9949d99-56ba-4b45-8064-4ce12f9644ae\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_6\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"ce1167e7-f40a-4b0c-a534-9cbad66fa81b\",\"w\":24,\"x\":24,\"y\":52},\"panelIndex\":\"ce1167e7-f40a-4b0c-a534-9cbad66fa81b\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_7\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"7b627514-6dbc-4b8f-8313-e12c2e44f5c2\",\"w\":24,\"x\":0,\"y\":67},\"panelIndex\":\"7b627514-6dbc-4b8f-8313-e12c2e44f5c2\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_8\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"58600a3f-8de1-4917-bcc0-818a62467c78\",\"w\":24,\"x\":24,\"y\":67},\"panelIndex\":\"58600a3f-8de1-4917-bcc0-818a62467c78\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_9\"},{\"embeddableConfig\":{\"title\":\"\"},\"gridData\":{\"h\":2,\"i\":\"77988700-8d00-4dc7-8ef3-211d8fc1b6e5\",\"w\":48,\"x\":0,\"y\":82},\"panelIndex\":\"77988700-8d00-4dc7-8ef3-211d8fc1b6e5\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_10\"}]","timeRestore":false,"title":"Pod-to-Service Flow Dashboard","version":1},"id":"6d77e8a0-513a-11eb-a19a-05e08a82dcf8","migrationVersion":{"dashboard":"7.3.0"},"references":[{"id":"c4e1b7c0-b9a9-11ea-b16e-fb06687c3589","name":"panel_0","type":"visualization"},{"id":"804d18c0-514d-11eb-a19a-05e08a82dcf8","name":"panel_1","type":"visualization"},{"id":"67f0ca90-d07b-11ea-a734-57fc7859997d","name":"panel_2","type":"visualization"},{"id":"94b0a1e0-d07b-11ea-a734-57fc7859997d","name":"panel_3","type":"visualization"},{"id":"3ccd6430-d086-11ea-a734-57fc7859997d","name":"panel_4","type":"visualization"},{"id":"2fb72bf0-d086-11ea-a734-57fc7859997d","name":"panel_5","type":"visualization"},{"id":"f5f29b00-520a-11eb-8385-698d3cd613b0","name":"panel_6","type":"visualization"},{"id":"20dfae20-520b-11eb-8385-698d3cd613b0","name":"panel_7","type":"visualization"},{"id":"d0582e90-520b-11eb-8385-698d3cd613b0","name":"panel_8","type":"visualization"},{"id":"19374b20-4eea-11eb-b841-6bf6243fda88","name":"panel_9","type":"visualization"},{"id":"f8323bc0-514f-11eb-a19a-05e08a82dcf8","name":"panel_10","type":"visualization"}],"type":"dashboard","updated_at":"2021-08-07T23:30:40.150Z","version":"WzU3LDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Tx Mbps by Pod-to-Pod Flow","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"show_legend\":1,\"show_grid\":1,\"axis_min\":\"0\",\"filter\":\"\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false,\"index_pattern\":\"flow-*\",\"interval\":\"1m\",\"time_field\":\"ipfix.flowEndSeconds\",\"background_color_rules\":[{\"id\":\"4010d970-50b9-11eb-8f30-87baf4f5ad91\"}],\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"rgba(144,201,227,1)\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"type\":\"sum\",\"field\":\"ipfix.throughput\"},{\"script\":\"params.bytes * 8 \",\"id\":\"dd0b81d0-b9a6-11ea-9740-552c943910e4\",\"type\":\"calculation\",\"variables\":[{\"id\":\"e1f87e50-b9a6-11ea-9740-552c943910e4\",\"name\":\"bytes\",\"field\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\"}]}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":\"2\",\"point_size\":\"0\",\"fill\":\"0.6\",\"stacked\":\"none\",\"split_color_mode\":\"rainbow\",\"label\":\"Bytes\",\"terms_field\":\"ipfix.flowKeyPodToPod.keyword\",\"terms_size\":\"30\",\"terms_order_by\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"value_template\":\"{{value}}it/s\",\"type\":\"timeseries\",\"terms_exclude\":\"\",\"filter\":{\"query\":\"\",\"language\":\"kuery\"}}]},\"title\":\"Tx Mbps by Pod-to-Pod Flow\"}"},"id":"8f9b2980-4ee5-11eb-b841-6bf6243fda88","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzU5LDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"filter\":[]}"},"title":"Ingress Network Policy Bytes","uiStateJSON":"{\"vis\":{\"colors\":{\"default\":\"#F2C96D\"}}}","version":1,"visState":"{\"type\":\"pie\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"sum\",\"schema\":\"metric\",\"params\":{\"field\":\"ipfix.bytes\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ipfix.ingressNetworkPolicyNamespace.keyword\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":30,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"exclude\":\"\",\"customLabel\":\"Namespace\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ipfix.ingressNetworkPolicyName.keyword\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Network Policy Name\"}}],\"params\":{\"addLegend\":true,\"addTooltip\":true,\"dimensions\":{\"metric\":{\"accessor\":0,\"aggType\":\"count\",\"format\":{\"id\":\"number\"},\"params\":{}}},\"isDonut\":true,\"labels\":{\"last_level\":true,\"show\":false,\"truncate\":100,\"values\":true},\"legendPosition\":\"right\",\"type\":\"pie\"},\"title\":\"Ingress Network Policy Bytes\"}"},"id":"9b4db300-23b7-11eb-90d2-a7a4de48218a","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzYwLDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Aggregated Rx Mbps by Pod Acting as Destination","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"show_legend\":1,\"show_grid\":1,\"axis_min\":\"0\",\"filter\":\"\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false,\"index_pattern\":\"flow-*\",\"time_field\":\"@timestamp\",\"interval\":\"1m\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"rgba(144,201,227,1)\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"type\":\"sum\",\"field\":\"ipfix.octetDeltaCount\"},{\"id\":\"390d2760-50b8-11eb-8f30-87baf4f5ad91\",\"type\":\"avg\",\"field\":\"ipfix.interval\"},{\"script\":\"params.bytes * 8 / params.interval\",\"id\":\"dd0b81d0-b9a6-11ea-9740-552c943910e4\",\"type\":\"calculation\",\"variables\":[{\"id\":\"e1f87e50-b9a6-11ea-9740-552c943910e4\",\"name\":\"bytes\",\"field\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\"},{\"id\":\"3df84f20-50b8-11eb-8f30-87baf4f5ad91\",\"name\":\"interval\",\"field\":\"390d2760-50b8-11eb-8f30-87baf4f5ad91\"}]}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":\"0\",\"fill\":\"0.6\",\"stacked\":\"stacked\",\"split_color_mode\":\"rainbow\",\"label\":\"Bytes\",\"terms_field\":\"ipfix.destinationPodName.keyword\",\"terms_size\":\"30\",\"terms_order_by\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"value_template\":\"{{value}}its/s\",\"type\":\"timeseries\"}]},\"title\":\"Aggregated Rx Mbps by Pod Acting as Destination\"}"},"id":"a1b7b4f0-c243-11ea-873e-8f9a9a3cbdc1","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzYxLDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\",\"filter\":[]}"},"title":"Egress Network Policy Bytes","uiStateJSON":"{\"vis\":{\"colors\":{\"default\":\"#F2C96D\"}}}","version":1,"visState":"{\"type\":\"pie\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"sum\",\"schema\":\"metric\",\"params\":{\"field\":\"ipfix.bytes\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ipfix.egressNetworkPolicyNamespace.keyword\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":30,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"exclude\":\"\",\"customLabel\":\"Namespace\"}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"ipfix.egressNetworkPolicyName.keyword\",\"orderBy\":\"1\",\"order\":\"desc\",\"size\":5,\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"customLabel\":\"Network Policy Name\"}}],\"params\":{\"type\":\"pie\",\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":true,\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100},\"dimensions\":{\"metric\":{\"accessor\":0,\"format\":{\"id\":\"number\"},\"params\":{},\"aggType\":\"count\"}}},\"title\":\"Egress Network Policy Bytes\"}"},"id":"bc4e0870-23b7-11eb-90d2-a7a4de48218a","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"kibanaSavedObjectMeta.searchSourceJSON.index","type":"index-pattern"}],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzYyLDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Pod-to-Pod Filter","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"input_control_vis\",\"aggs\":[],\"params\":{\"updateFiltersOnChange\":true,\"useTimeFilter\":true,\"pinFilters\":true,\"controls\":[{\"id\":\"1526108909005\",\"fieldName\":\"ipfix.sourcePodNamespace.keyword\",\"label\":\"Source Pod Namespace\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"size\":1000,\"order\":\"desc\",\"dynamicOptions\":false},\"indexPatternRefName\":\"control_0_index_pattern\"},{\"id\":\"1526107640219\",\"fieldName\":\"ipfix.sourcePodName.keyword\",\"label\":\"Source Pod Name\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"size\":1000,\"order\":\"desc\",\"dynamicOptions\":false},\"indexPatternRefName\":\"control_1_index_pattern\"},{\"id\":\"1594408631049\",\"fieldName\":\"ipfix.sourceNodeName.keyword\",\"parent\":\"\",\"label\":\"Source Pod Node\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":false,\"size\":1000,\"order\":\"desc\"},\"indexPatternRefName\":\"control_2_index_pattern\"},{\"id\":\"1592936602245\",\"fieldName\":\"ipfix.destinationPodNamespace.keyword\",\"parent\":\"\",\"label\":\"Destination Pod Namespace\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":false,\"size\":1000,\"order\":\"desc\"},\"indexPatternRefName\":\"control_3_index_pattern\"},{\"id\":\"1526108883717\",\"fieldName\":\"ipfix.destinationPodName.keyword\",\"label\":\"Destination Pod Name\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"size\":1000,\"order\":\"desc\",\"dynamicOptions\":false},\"indexPatternRefName\":\"control_4_index_pattern\"},{\"id\":\"1594408650442\",\"fieldName\":\"ipfix.destinationNodeName.keyword\",\"parent\":\"\",\"label\":\"Destination Pod Node\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":false,\"size\":1000,\"order\":\"desc\"},\"indexPatternRefName\":\"control_5_index_pattern\"},{\"id\":\"1609999080958\",\"parent\":\"\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":false,\"size\":1000,\"order\":\"desc\"},\"fieldName\":\"ipfix.flowKeyPodToPod.keyword\",\"label\":\"Flow Key (Pod-to-Pod)\",\"indexPatternRefName\":\"control_6_index_pattern\"},{\"id\":\"1618607160649\",\"fieldName\":\"ipfix.flowTypeStr.keyword\",\"parent\":\"\",\"label\":\"Flow Type\",\"type\":\"list\",\"options\":{\"type\":\"terms\",\"multiselect\":true,\"dynamicOptions\":false,\"size\":1000,\"order\":\"desc\"},\"indexPatternRefName\":\"control_7_index_pattern\"}]},\"title\":\"Pod-to-Pod Filter\"}"},"id":"bcb98010-514c-11eb-a19a-05e08a82dcf8","migrationVersion":{"visualization":"7.8.0"},"references":[{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_0_index_pattern","type":"index-pattern"},{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_1_index_pattern","type":"index-pattern"},{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_2_index_pattern","type":"index-pattern"},{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_3_index_pattern","type":"index-pattern"},{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_4_index_pattern","type":"index-pattern"},{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_5_index_pattern","type":"index-pattern"},{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_6_index_pattern","type":"index-pattern"},{"id":"e2ab2c50-b981-11ea-b16e-fb06687c3589","name":"control_7_index_pattern","type":"index-pattern"}],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzYzLDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"lucene\",\"query\":\"\"},\"filter\":[]}"},"title":"Network Policy Flow Throughput Diagram","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"vega\",\"aggs\":[],\"params\":{\"spec\":\"{\\n \\\"$schema\\\": \\\"https://vega.github.io/schema/vega/v3.0.json\\\",\\n \\\"data\\\": [\\n {\\n \\\"name\\\": \\\"rawData\\\",\\n \\\"url\\\": {\\n \\\"%context%\\\": true,\\n \\\"%timefield%\\\": \\\"@timestamp\\\",\\n \\\"index\\\": \\\"flow-*\\\",\\n \\\"body\\\": {\\n \\\"size\\\": 0,\\n \\\"aggs\\\": {\\n \\\"table\\\": {\\n \\\"composite\\\": {\\n \\\"size\\\": 1000,\\n \\\"sources\\\": [\\n {\\\"stk1\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.egressNetworkPolicyName.keyword\\\"}}},\\n {\\\"stk1ns\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.egressNetworkPolicyNamespace.keyword\\\"}}},\\n {\\\"stk2\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.ingressNetworkPolicyName.keyword\\\"}}},\\n {\\\"stk2ns\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.ingressNetworkPolicyNamespace.keyword\\\"}}},\\n {\\\"stk3\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.sourceIP.keyword\\\"}}},\\n {\\\"stk4\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.destinationIP.keyword\\\"}}},\\n {\\\"stk5\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.sourcePodName.keyword\\\"}}},\\n {\\\"stk5ns\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.sourcePodNamespace.keyword\\\"}}},\\n {\\\"stk6\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.destinationPodName.keyword\\\"}}},\\n {\\\"stk6ns\\\": {\\\"terms\\\": {\\\"field\\\": \\\"ipfix.destinationPodNamespace.keyword\\\"}}},\\n ]\\n },\\n \\t\\t\\t\\\"aggs\\\": {\\n \\t\\t\\t\\t\\\"bytes\\\": {\\n \\t\\t\\t\\t\\t\\\"sum\\\": {\\n \\t\\t\\t\\t\\t\\t\\\"field\\\": \\\"ipfix.octetDeltaCountFromSourceNode\\\"\\n \\t\\t\\t\\t\\t}\\n \\t\\t\\t\\t}\\n \\t\\t\\t}\\n }\\n }\\n }\\n },\\n \\\"format\\\": {\\\"property\\\": \\\"aggregations.table.buckets\\\"},\\n \\\"transform\\\": [\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk1ns +'/'+ datum.key.stk1\\\", \\\"as\\\": \\\"stk1\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk2ns +'/'+ datum.key.stk2\\\", \\\"as\\\": \\\"stk2\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk3\\\", \\\"as\\\": \\\"stk3\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk4\\\", \\\"as\\\": \\\"stk4\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk5ns +'/'+ datum.key.stk5\\\", \\\"as\\\": \\\"stk5s\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"(datum.key.stk5==''?datum.key.stk3:datum.stk5s)\\\", \\\"as\\\": \\\"stk5\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.key.stk6ns +'/'+ datum.key.stk6\\\", \\\"as\\\": \\\"stk6s\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"(datum.key.stk6==''?datum.key.stk4:datum.stk6s)\\\", \\\"as\\\": \\\"stk6\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.bytes.value\\\", \\\"as\\\": \\\"size\\\"}\\n ]\\n },\\n {\\n \\\"name\\\": \\\"nodes\\\",\\n \\\"source\\\": \\\"rawData\\\",\\n \\\"transform\\\": [\\n {\\n \\\"type\\\": \\\"filter\\\",\\n \\\"expr\\\": \\\"!groupSelector || groupSelector.stk1 == datum.stk1 || groupSelector.stk2 == datum.stk2\\\"\\n },\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.stk1+datum.stk2+datum.stk5+datum.stk6\\\", \\\"as\\\": \\\"key\\\"},\\n {\\\"type\\\": \\\"fold\\\", \\\"fields\\\": [\\\"stk1\\\", \\\"stk2\\\"], \\\"as\\\": [\\\"stack\\\", \\\"grpId\\\"]},\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"datum.stack == 'stk1' ? datum.stk1+datum.stk2 : datum.stk2+datum.stk1\\\",\\n \\\"as\\\": \\\"sortField\\\"\\n },\\n {\\n \\\"type\\\": \\\"stack\\\",\\n \\\"groupby\\\": [\\\"stack\\\"],\\n \\\"sort\\\": {\\\"field\\\": \\\"sortField\\\", \\\"order\\\": \\\"ascending\\\"},\\n \\\"field\\\": \\\"size\\\"\\n },\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"(datum.y0+datum.y1)/2\\\", \\\"as\\\": \\\"yc\\\"}\\n ]\\n },\\n {\\n \\\"name\\\": \\\"groups\\\",\\n \\\"source\\\": \\\"nodes\\\",\\n \\\"transform\\\": [\\n {\\n \\\"type\\\": \\\"aggregate\\\",\\n \\\"groupby\\\": [\\\"stack\\\", \\\"grpId\\\"],\\n \\\"fields\\\": [\\\"size\\\"],\\n \\\"ops\\\": [\\\"sum\\\"],\\n \\\"as\\\": [\\\"total\\\"]\\n },\\n {\\n \\\"type\\\": \\\"stack\\\",\\n \\\"groupby\\\": [\\\"stack\\\"],\\n \\\"sort\\\": {\\\"field\\\": \\\"grpId\\\", \\\"order\\\": \\\"ascending\\\"},\\n \\\"field\\\": \\\"total\\\"\\n },\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"scale('y', datum.y0)\\\", \\\"as\\\": \\\"scaledY0\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"scale('y', datum.y1)\\\", \\\"as\\\": \\\"scaledY1\\\"},\\n {\\\"type\\\": \\\"formula\\\", \\\"expr\\\": \\\"datum.stack == 'stk1'\\\", \\\"as\\\": \\\"rightLabel\\\"},\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"datum.total/domain('y')[1]\\\",\\n \\\"as\\\": \\\"percentage\\\"\\n }\\n ]\\n },\\n {\\n \\\"name\\\": \\\"destinationNodes\\\",\\n \\\"source\\\": \\\"nodes\\\",\\n \\\"transform\\\": [{\\\"type\\\": \\\"filter\\\", \\\"expr\\\": \\\"datum.stack == 'stk2'\\\"}]\\n },\\n {\\n \\\"name\\\": \\\"edges\\\",\\n \\\"source\\\": \\\"nodes\\\",\\n \\\"transform\\\": [\\n {\\\"type\\\": \\\"filter\\\", \\\"expr\\\": \\\"datum.stack == 'stk1'\\\"},\\n {\\n \\\"type\\\": \\\"lookup\\\",\\n \\\"from\\\": \\\"destinationNodes\\\",\\n \\\"key\\\": \\\"key\\\",\\n \\\"fields\\\": [\\\"key\\\"],\\n \\\"as\\\": [\\\"target\\\"]\\n },\\n {\\n \\\"type\\\": \\\"linkpath\\\",\\n \\\"orient\\\": \\\"horizontal\\\",\\n \\\"shape\\\": \\\"diagonal\\\",\\n \\\"sourceY\\\": {\\\"expr\\\": \\\"scale('y', datum.yc)\\\"},\\n \\\"sourceX\\\": {\\\"expr\\\": \\\"scale('x', 'stk1') + bandwidth('x')\\\"},\\n \\\"targetY\\\": {\\\"expr\\\": \\\"scale('y', datum.target.yc)\\\"},\\n \\\"targetX\\\": {\\\"expr\\\": \\\"scale('x', 'stk2')\\\"}\\n },\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"range('y')[0]-scale('y', datum.size)\\\",\\n \\\"as\\\": \\\"strokeWidth\\\"\\n },\\n {\\n \\\"type\\\": \\\"formula\\\",\\n \\\"expr\\\": \\\"datum.size/domain('y')[1]\\\",\\n \\\"as\\\": \\\"percentage\\\"\\n }\\n ]\\n }\\n ],\\n \\\"scales\\\": [\\n {\\n \\\"name\\\": \\\"x\\\",\\n \\\"type\\\": \\\"band\\\",\\n \\\"range\\\": \\\"width\\\",\\n \\\"domain\\\": [\\\"stk1\\\", \\\"stk2\\\"],\\n \\\"paddingOuter\\\": 0.01,\\n \\\"paddingInner\\\": 0.98\\n },\\n {\\n \\\"name\\\": \\\"y\\\",\\n \\\"type\\\": \\\"linear\\\",\\n \\\"range\\\": \\\"height\\\",\\n \\\"domain\\\": {\\\"data\\\": \\\"nodes\\\", \\\"field\\\": \\\"y1\\\"}\\n },\\n {\\n \\\"name\\\": \\\"color\\\",\\n \\\"type\\\": \\\"ordinal\\\",\\n \\\"range\\\": \\\"category\\\",\\n \\\"domain\\\": {\\\"data\\\": \\\"rawData\\\", \\\"fields\\\": [\\\"stk1\\\",\\\"stk2\\\"]}\\n },\\n {\\n \\\"name\\\": \\\"stackNames\\\",\\n \\\"type\\\": \\\"ordinal\\\",\\n \\\"range\\\": [\\\"Egress Network Policy\\\", \\\"Ingress Network Policy\\\"],\\n \\\"domain\\\": [\\\"stk1\\\", \\\"stk2\\\"]\\n }\\n ],\\n \\\"axes\\\": [\\n {\\n \\\"orient\\\": \\\"bottom\\\",\\n \\\"scale\\\": \\\"x\\\",\\n \\\"labelColor\\\": {\\n \\\"value\\\": \\\"#888888\\\"\\n },\\n \\\"encode\\\": {\\n \\\"labels\\\": {\\n \\\"update\\\": {\\n \\\"text\\\": {\\\"scale\\\": \\\"stackNames\\\", \\\"field\\\": \\\"value\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 14}\\n }\\n }\\n }\\n },\\n {\\n \\\"orient\\\": \\\"left\\\",\\n \\\"scale\\\": \\\"y\\\",\\n \\\"labelColor\\\": {\\n \\\"value\\\": \\\"#888888\\\"\\n },\\n \\\"encode\\\": {\\n \\\"labels\\\": {\\n \\\"update\\\": {\\n \\\"text\\\": {\\\"signal\\\": \\\"format(datum.value, '.2s') + 'B'\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 12}\\n }\\n }\\n }\\n }\\n ],\\n \\\"marks\\\": [\\n {\\n \\\"type\\\": \\\"path\\\",\\n \\\"name\\\": \\\"edgeMark\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"edges\\\"},\\n \\\"clip\\\": true,\\n \\\"encode\\\": {\\n \\\"update\\\": {\\n \\\"stroke\\\": [\\n {\\n \\\"test\\\": \\\"groupSelector && groupSelector.stack=='stk1'\\\",\\n \\\"scale\\\": \\\"color\\\",\\n \\\"field\\\": \\\"stk2\\\"\\n },\\n {\\\"scale\\\": \\\"color\\\", \\\"field\\\": \\\"stk1\\\"}\\n ],\\n \\\"strokeWidth\\\": {\\\"field\\\": \\\"strokeWidth\\\"},\\n \\\"path\\\": {\\\"field\\\": \\\"path\\\"},\\n \\\"strokeOpacity\\\": {\\n \\\"signal\\\": \\\"!groupSelector && (groupHover.stk1 == datum.stk1 || groupHover.stk2 == datum.stk2) ? 0.75 : 0.3\\\"\\n },\\n \\\"zindex\\\": {\\n \\\"signal\\\": \\\"!groupSelector && (groupHover.stk1 == datum.stk1 || groupHover.stk2 == datum.stk2) ? 1 : 0\\\"\\n },\\n \\\"tooltip\\\": {\\n \\\"signal\\\": \\\"{'title': datum.stk5 + ' → ' + datum.stk6 + ' ' + format(datum.size, '.2s') + 'B (' + format(datum.percentage, '.1%') + ')', 'Egress Policy': datum.stk1, 'Ingress Policy': datum.stk2, 'IP Address': datum.stk3 +' → ' + datum.stk4 }\\\"\\n }\\n },\\n \\\"hover\\\": {\\\"strokeOpacity\\\": {\\\"value\\\": 0.75}}\\n }\\n },\\n {\\n \\\"type\\\": \\\"rect\\\",\\n \\\"name\\\": \\\"groupMark\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"groups\\\"},\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"fill\\\": {\\\"scale\\\": \\\"color\\\", \\\"field\\\": \\\"grpId\\\"},\\n \\\"width\\\": {\\\"scale\\\": \\\"x\\\", \\\"band\\\": 1}\\n },\\n \\\"update\\\": {\\n \\\"x\\\": {\\\"scale\\\": \\\"x\\\", \\\"field\\\": \\\"stack\\\"},\\n \\\"y\\\": {\\\"field\\\": \\\"scaledY0\\\"},\\n \\\"y2\\\": {\\\"field\\\": \\\"scaledY1\\\"},\\n \\\"fillOpacity\\\": {\\\"value\\\": 0.7},\\n \\\"tooltip\\\": {\\n \\\"signal\\\": \\\"datum.grpId + ' ' + format(datum.total, '.2s') + 'B (' + format(datum.percentage, '.1%') + ')'\\\"\\n }\\n },\\n \\\"hover\\\": {\\\"fillOpacity\\\": {\\\"value\\\": 1}}\\n }\\n },\\n {\\n \\\"type\\\": \\\"text\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"groups\\\"},\\n \\\"interactive\\\": false,\\n \\\"encode\\\": {\\n \\\"update\\\": {\\n \\\"x\\\": {\\n \\\"signal\\\": \\\"scale('x', datum.stack) + (datum.rightLabel ? bandwidth('x') + 8 : -8)\\\"\\n },\\n \\\"yc\\\": {\\\"signal\\\": \\\"(datum.scaledY0 + datum.scaledY1)/2\\\"},\\n \\\"align\\\": {\\\"signal\\\": \\\"datum.rightLabel ? 'left' : 'right'\\\"},\\n \\\"baseline\\\": {\\\"value\\\": \\\"middle\\\"},\\n \\\"fontWeight\\\": {\\\"value\\\": \\\"bold\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 12},\\n \\\"text\\\": {\\n \\\"signal\\\": \\\"abs(datum.scaledY0-datum.scaledY1) > 10 ? datum.grpId : ''\\\"\\n }\\n }\\n }\\n },\\n {\\n \\\"type\\\": \\\"group\\\",\\n \\\"data\\\": [\\n {\\n \\\"name\\\": \\\"dataForShowAll\\\",\\n \\\"values\\\": [{}],\\n \\\"transform\\\": [{\\\"type\\\": \\\"filter\\\", \\\"expr\\\": \\\"groupSelector\\\"}]\\n }\\n ],\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"xc\\\": {\\\"signal\\\": \\\"width/2\\\"},\\n \\\"y\\\": {\\\"value\\\": 30},\\n \\\"width\\\": {\\\"value\\\": 100},\\n \\\"height\\\": {\\\"value\\\": 36}\\n }\\n },\\n \\\"marks\\\": [\\n {\\n \\\"type\\\": \\\"group\\\",\\n \\\"name\\\": \\\"groupReset\\\",\\n \\\"from\\\": {\\\"data\\\": \\\"dataForShowAll\\\"},\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"cornerRadius\\\": {\\\"value\\\": 3.5},\\n \\\"fill\\\": {\\\"value\\\": \\\"#666666\\\"},\\n \\\"height\\\": {\\\"field\\\": {\\\"group\\\": \\\"height\\\"}},\\n \\\"width\\\": {\\\"field\\\": {\\\"group\\\": \\\"width\\\"}}\\n },\\n \\\"update\\\": {\\\"opacity\\\": {\\\"value\\\": 1}},\\n \\\"hover\\\": {\\\"fill\\\": {\\\"value\\\": \\\"#444444\\\"}}\\n },\\n \\\"marks\\\": [\\n {\\n \\\"type\\\": \\\"text\\\",\\n \\\"interactive\\\": false,\\n \\\"encode\\\": {\\n \\\"enter\\\": {\\n \\\"xc\\\": {\\\"field\\\": {\\\"group\\\": \\\"width\\\"}, \\\"mult\\\": 0.5},\\n \\\"yc\\\": {\\\"field\\\": {\\\"group\\\": \\\"height\\\"}, \\\"mult\\\": 0.5, \\\"offset\\\": 1},\\n \\\"align\\\": {\\\"value\\\": \\\"center\\\"},\\n \\\"baseline\\\": {\\\"value\\\": \\\"middle\\\"},\\n \\\"text\\\": {\\\"value\\\": \\\"Show All\\\"},\\n \\\"fontSize\\\": {\\\"value\\\": 14},\\n \\\"stroke\\\": {\\\"value\\\": \\\"#ecf0f1\\\"}\\n }\\n }\\n }\\n ]\\n }\\n ]\\n }\\n ],\\n \\\"signals\\\": [\\n {\\n \\\"name\\\": \\\"groupHover\\\",\\n \\\"value\\\": {},\\n \\\"on\\\": [\\n {\\n \\\"events\\\": \\\"@groupMark:mouseover\\\",\\n \\\"update\\\": \\\"{stk1:datum.stack=='stk1' && datum.grpId, stk2:datum.stack=='stk2' && datum.grpId}\\\"\\n },\\n {\\\"events\\\": \\\"mouseout\\\", \\\"update\\\": \\\"{}\\\"}\\n ]\\n },\\n {\\n \\\"name\\\": \\\"groupSelector\\\",\\n \\\"value\\\": false,\\n \\\"on\\\": [\\n {\\n \\\"events\\\": \\\"@groupMark:click!\\\",\\n \\\"update\\\": \\\"{stack:datum.stack, stk1:datum.stack=='stk1' && datum.grpId, stk2:datum.stack=='stk2' && datum.grpId}\\\"\\n },\\n {\\n \\\"events\\\": [\\n {\\\"type\\\": \\\"click\\\", \\\"markname\\\": \\\"groupReset\\\"},\\n {\\\"type\\\": \\\"dblclick\\\"}\\n ],\\n \\\"update\\\": \\\"false\\\"\\n }\\n ]\\n }\\n ]\\n}\"},\"title\":\"Network Policy Flow Throughput Diagram\"}"},"id":"c08ea960-7a1c-11eb-a325-39e98502337e","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzY0LDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"lucene\",\"query\":\"\"},\"filter\":[]}"},"title":"Pod-to-Pod Flow Nav","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"axis_formatter\":\"number\",\"axis_position\":\"left\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"index_pattern\":\"flow-*\",\"interval\":\"auto\",\"isModelInvalid\":false,\"markdown_css\":\"#markdown-61ca57f0-469d-11e7-af02-69e470af7417 p{color:#cccccc;margin-top:0;margin-bottom:8px;text-align:right}#markdown-61ca57f0-469d-11e7-af02-69e470af7417 p a{color:#1eadbd;font-size:17px;font-weight:bold;text-decoration:none}#markdown-61ca57f0-469d-11e7-af02-69e470af7417 p a strong{color:#ffac12;font-weight:bold}#markdown-61ca57f0-469d-11e7-af02-69e470af7417 hr{background-color:#cccccc;margin:0;height:1px}\",\"markdown_less\":\"p {\\n color: #cccccc;\\n margin-top: 0px;\\n margin-bottom: 8px;\\n text-align: right;\\n}\\np a {\\n color: #1eadbd;\\n\\tfont-size: 17px;\\n\\tfont-weight: bold;\\n\\ttext-decoration: none;\\n}\\np a strong {\\n color: #ffac12;\\n\\tfont-weight: bold;\\n}\\nhr {\\n background-color: #cccccc;\\n margin: 0px;\\n height: 1px;\\n}\",\"markdown_vertical_align\":\"top\",\"series\":[{\"axis_position\":\"right\",\"chart_type\":\"line\",\"color\":\"#68BC00\",\"fill\":0.5,\"formatter\":\"number\",\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"line_width\":1,\"metrics\":[{\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"count\"}],\"offset_time\":\"-5y\",\"point_size\":1,\"separate_axis\":0,\"split_color_mode\":\"gradient\",\"split_mode\":\"everything\",\"stacked\":\"none\"}],\"show_grid\":1,\"show_legend\":1,\"time_field\":null,\"type\":\"markdown\",\"markdown\":\"[Overview](#/dashboard/3b331b30-b987-11ea-b16e-fb06687c3589) | [**Pod-to-Pod Flow**](#/dashboard/c2b15fb0-b9a8-11ea-b16e-fb06687c3589) | [Pod-to-External Flow](#/dashboard/3ed71e80-a92d-11eb-a7ef-5dcb53008c10) | [Pod-to-Service Flow](#/dashboard/6d77e8a0-513a-11eb-a19a-05e08a82dcf8) | [Node](#/dashboard/5400cdf0-cd2e-11ea-8911-87da3aad0324) | [Network Policy](#/dashboard/c5af6850-23b2-11eb-90d2-a7a4de48218a) | [Flow Records](#/dashboard/2ab9c220-b984-11ea-b16e-fb06687c3589)\"},\"title\":\"Pod-to-Pod Flow Nav\"}"},"id":"d5de6870-5148-11eb-a19a-05e08a82dcf8","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzY1LDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Rx Mbps by Pod-to-Pod Flow","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"show_legend\":1,\"show_grid\":1,\"axis_min\":\"0\",\"filter\":\"\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false,\"index_pattern\":\"flow-*\",\"interval\":\"1m\",\"time_field\":\"ipfix.flowEndSeconds\",\"legend_position\":\"right\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"rgba(144,201,227,1)\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"type\":\"sum\",\"field\":\"ipfix.reverseThroughput\"},{\"script\":\"params.bytes * 8 \",\"id\":\"dd0b81d0-b9a6-11ea-9740-552c943910e4\",\"type\":\"calculation\",\"variables\":[{\"id\":\"e1f87e50-b9a6-11ea-9740-552c943910e4\",\"name\":\"bytes\",\"field\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\"}]}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":\"2\",\"point_size\":\"0\",\"fill\":\"0.6\",\"stacked\":\"none\",\"split_color_mode\":\"rainbow\",\"label\":\"Bytes\",\"terms_field\":\"ipfix.flowKeyPodToPod.keyword\",\"terms_size\":\"30\",\"terms_order_by\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"value_template\":\"{{value}}it/s\",\"type\":\"timeseries\",\"terms_exclude\":\"\"}]},\"title\":\"Rx Mbps by Pod-to-Pod Flow\"}"},"id":"c35f47c0-4ee9-11eb-b841-6bf6243fda88","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzY2LDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[]}"},"title":"Reverse Cumulative Bandwidth by Pod-to-Pod Flow","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"timeseries\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"show_legend\":1,\"show_grid\":1,\"axis_min\":\"0\",\"filter\":\"\",\"axis_scale\":\"normal\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false,\"index_pattern\":\"flow-*\",\"interval\":\"1m\",\"time_field\":\"ipfix.flowEndSeconds\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"rgba(144,201,227,1)\",\"split_mode\":\"terms\",\"metrics\":[{\"id\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"type\":\"sum\",\"field\":\"ipfix.reverseOctetTotalCountFromSourceNode\"},{\"script\":\"params.bytes * 8\",\"id\":\"dd0b81d0-b9a6-11ea-9740-552c943910e4\",\"type\":\"calculation\",\"variables\":[{\"id\":\"e1f87e50-b9a6-11ea-9740-552c943910e4\",\"name\":\"bytes\",\"field\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\"}]}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"bytes\",\"chart_type\":\"line\",\"line_width\":\"2\",\"point_size\":\"0\",\"fill\":\"0.6\",\"stacked\":\"none\",\"split_color_mode\":\"rainbow\",\"label\":\"Bytes\",\"terms_field\":\"ipfix.flowKeyPodToPod.keyword\",\"terms_size\":\"30\",\"terms_order_by\":\"a1ba0060-b9a7-11ea-9740-552c943910e4\",\"value_template\":\"{{value}}\",\"type\":\"timeseries\"}]},\"title\":\"Reverse Cumulative Bandwidth by Pod-to-Pod Flow\"}"},"id":"df090970-4ee9-11eb-b841-6bf6243fda88","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzY3LDFd"}
-{"attributes":{"description":"","hits":0,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}"},"optionsJSON":"{\"hidePanelTitles\":false,\"useMargins\":true}","panelsJSON":"[{\"embeddableConfig\":{\"title\":\"\"},\"gridData\":{\"h\":3,\"i\":\"741ac64c-ca0c-4aba-abdd-f493e7f04820\",\"w\":48,\"x\":0,\"y\":0},\"panelIndex\":\"741ac64c-ca0c-4aba-abdd-f493e7f04820\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_0\"},{\"embeddableConfig\":{\"title\":\"\"},\"gridData\":{\"h\":8,\"i\":\"a878455a-38c2-40ec-b2e8-735cb5d282af\",\"w\":48,\"x\":0,\"y\":3},\"panelIndex\":\"a878455a-38c2-40ec-b2e8-735cb5d282af\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_1\"},{\"embeddableConfig\":{\"title\":\"Pod-to-Pod Traffic Cumulative Bytes\"},\"gridData\":{\"h\":27,\"i\":\"6748bbbb-660f-4598-85fa-bed3130fa167\",\"w\":24,\"x\":0,\"y\":11},\"panelIndex\":\"6748bbbb-660f-4598-85fa-bed3130fa167\",\"title\":\"Pod-to-Pod Traffic Cumulative Bytes\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_2\"},{\"embeddableConfig\":{\"title\":\"Pod-to-Pod Traffic Reverse Cumulative Bytes\"},\"gridData\":{\"h\":27,\"i\":\"62ae0c67-a496-464f-b131-2356316dd07d\",\"w\":24,\"x\":24,\"y\":11},\"panelIndex\":\"62ae0c67-a496-464f-b131-2356316dd07d\",\"title\":\"Pod-to-Pod Traffic Reverse Cumulative Bytes\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_3\"},{\"embeddableConfig\":{\"title\":\"Tx Mbps by Pod-to-Pod Flow\"},\"gridData\":{\"h\":15,\"i\":\"f3d0a648-08c2-4b6a-bac3-502e57aa6491\",\"w\":24,\"x\":0,\"y\":38},\"panelIndex\":\"f3d0a648-08c2-4b6a-bac3-502e57aa6491\",\"title\":\"Tx Mbps by Pod-to-Pod Flow\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_4\"},{\"embeddableConfig\":{\"title\":\"Cumulative Bandwidth by Pod-to-Pod Flow\"},\"gridData\":{\"h\":15,\"i\":\"e00e255f-6ca9-491b-91e9-88bb9743f9d2\",\"w\":24,\"x\":24,\"y\":38},\"panelIndex\":\"e00e255f-6ca9-491b-91e9-88bb9743f9d2\",\"title\":\"Cumulative Bandwidth by Pod-to-Pod Flow\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_5\"},{\"embeddableConfig\":{\"title\":\"Rx Mbps by Pod-to-Pod Flow\"},\"gridData\":{\"h\":15,\"i\":\"552fb687-487d-4896-afa9-c5a4731590c3\",\"w\":24,\"x\":0,\"y\":53},\"panelIndex\":\"552fb687-487d-4896-afa9-c5a4731590c3\",\"title\":\"Rx Mbps by Pod-to-Pod Flow\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_6\"},{\"embeddableConfig\":{\"title\":\"Reverse Cumulative Bandwidth by Pod-to-Pod Flow\"},\"gridData\":{\"h\":15,\"i\":\"17c78f77-6667-413a-b3b2-ae99d0bd276c\",\"w\":24,\"x\":24,\"y\":53},\"panelIndex\":\"17c78f77-6667-413a-b3b2-ae99d0bd276c\",\"title\":\"Reverse Cumulative Bandwidth by Pod-to-Pod Flow\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_7\"},{\"embeddableConfig\":{\"title\":\"Aggregated Tx Mbps by Pod Acting as Source\"},\"gridData\":{\"h\":15,\"i\":\"94c135b5-ab6b-41db-831e-7adb96282635\",\"w\":24,\"x\":0,\"y\":68},\"panelIndex\":\"94c135b5-ab6b-41db-831e-7adb96282635\",\"title\":\"Aggregated Tx Mbps by Pod Acting as Source\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_8\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"d3a735b0-e1e7-4751-89f4-f69be3d341c5\",\"w\":24,\"x\":24,\"y\":68},\"panelIndex\":\"d3a735b0-e1e7-4751-89f4-f69be3d341c5\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_9\"},{\"embeddableConfig\":{\"title\":\"\"},\"gridData\":{\"h\":2,\"i\":\"3b5dd519-11fe-41d0-9379-d6d8576fb688\",\"w\":48,\"x\":0,\"y\":83},\"panelIndex\":\"3b5dd519-11fe-41d0-9379-d6d8576fb688\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_10\"}]","timeRestore":false,"title":"Pod-to-Pod Flow Dashboard","version":1},"id":"c2b15fb0-b9a8-11ea-b16e-fb06687c3589","migrationVersion":{"dashboard":"7.3.0"},"references":[{"id":"d5de6870-5148-11eb-a19a-05e08a82dcf8","name":"panel_0","type":"visualization"},{"id":"bcb98010-514c-11eb-a19a-05e08a82dcf8","name":"panel_1","type":"visualization"},{"id":"54525bd0-3373-11e9-aec0-c1d93190f676","name":"panel_2","type":"visualization"},{"id":"2bd8fe60-c243-11ea-873e-8f9a9a3cbdc1","name":"panel_3","type":"visualization"},{"id":"8f9b2980-4ee5-11eb-b841-6bf6243fda88","name":"panel_4","type":"visualization"},{"id":"5d8d7b90-4ee6-11eb-b841-6bf6243fda88","name":"panel_5","type":"visualization"},{"id":"c35f47c0-4ee9-11eb-b841-6bf6243fda88","name":"panel_6","type":"visualization"},{"id":"df090970-4ee9-11eb-b841-6bf6243fda88","name":"panel_7","type":"visualization"},{"id":"114eba40-55d4-11e8-a695-171fb712da36","name":"panel_8","type":"visualization"},{"id":"68f05640-c243-11ea-873e-8f9a9a3cbdc1","name":"panel_9","type":"visualization"},{"id":"f8323bc0-514f-11eb-a19a-05e08a82dcf8","name":"panel_10","type":"visualization"}],"type":"dashboard","updated_at":"2021-08-07T23:30:40.150Z","version":"WzY4LDFd"}
-{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}"},"title":"Network Policy Nav","uiStateJSON":"{}","version":1,"visState":"{\"type\":\"metrics\",\"aggs\":[],\"params\":{\"id\":\"61ca57f0-469d-11e7-af02-69e470af7417\",\"type\":\"markdown\",\"series\":[{\"id\":\"61ca57f1-469d-11e7-af02-69e470af7417\",\"color\":\"#68BC00\",\"split_mode\":\"everything\",\"metrics\":[{\"id\":\"61ca57f2-469d-11e7-af02-69e470af7417\",\"type\":\"count\"}],\"separate_axis\":0,\"axis_position\":\"right\",\"formatter\":\"number\",\"chart_type\":\"line\",\"line_width\":1,\"point_size\":1,\"fill\":0.5,\"stacked\":\"none\",\"offset_time\":\"-5y\",\"split_color_mode\":\"gradient\"}],\"interval\":\"auto\",\"axis_position\":\"left\",\"axis_formatter\":\"number\",\"axis_scale\":\"normal\",\"show_legend\":1,\"show_grid\":1,\"markdown_vertical_align\":\"top\",\"default_index_pattern\":\"flow-*\",\"default_timefield\":\"@timestamp\",\"isModelInvalid\":false,\"time_field\":null,\"index_pattern\":\"flow-*\",\"markdown_css\":\"#markdown-61ca57f0-469d-11e7-af02-69e470af7417 p{color:#cccccc;margin-top:0;margin-bottom:8px;text-align:right}#markdown-61ca57f0-469d-11e7-af02-69e470af7417 p a{color:#1eadbd;font-size:17px;font-weight:bold;text-decoration:none}#markdown-61ca57f0-469d-11e7-af02-69e470af7417 p a strong{color:#ffac12;font-weight:bold}#markdown-61ca57f0-469d-11e7-af02-69e470af7417 hr{background-color:#cccccc;margin:0;height:1px}\",\"markdown_less\":\"p {\\n color: #cccccc;\\n margin-top: 0px;\\n margin-bottom: 8px;\\n text-align: right;\\n}\\np a {\\n color: #1eadbd;\\n\\tfont-size: 17px;\\n\\tfont-weight: bold;\\n\\ttext-decoration: none;\\n}\\np a strong {\\n color: #ffac12;\\n\\tfont-weight: bold;\\n}\\nhr {\\n background-color: #cccccc;\\n margin: 0px;\\n height: 1px;\\n}\",\"markdown\":\"[Overview](#/dashboard/3b331b30-b987-11ea-b16e-fb06687c3589) | [Pod-to-Pod Flow](#/dashboard/c2b15fb0-b9a8-11ea-b16e-fb06687c3589) | [Pod-to-External Flow](#/dashboard/3ed71e80-a92d-11eb-a7ef-5dcb53008c10) | [Pod-to-Service Flow](#/dashboard/6d77e8a0-513a-11eb-a19a-05e08a82dcf8) | [Node](#/dashboard/5400cdf0-cd2e-11ea-8911-87da3aad0324) | [**Network Policy**](#/dashboard/c5af6850-23b2-11eb-90d2-a7a4de48218a) | [Flow Records](#/dashboard/2ab9c220-b984-11ea-b16e-fb06687c3589)\\n\"},\"title\":\"Network Policy Nav\"}"},"id":"d5d25970-23b4-11eb-90d2-a7a4de48218a","migrationVersion":{"visualization":"7.8.0"},"references":[],"type":"visualization","updated_at":"2021-08-07T23:30:40.150Z","version":"WzY5LDFd"}
-{"attributes":{"description":"","hits":0,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}"},"optionsJSON":"{\"hidePanelTitles\":false,\"useMargins\":true}","panelsJSON":"[{\"embeddableConfig\":{\"title\":\"\"},\"gridData\":{\"h\":3,\"i\":\"db9f8c72-9601-41aa-8e29-75e6fb0e900f\",\"w\":48,\"x\":0,\"y\":0},\"panelIndex\":\"db9f8c72-9601-41aa-8e29-75e6fb0e900f\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_0\"},{\"embeddableConfig\":{\"title\":\"\"},\"gridData\":{\"h\":4,\"i\":\"f82e6f3e-2bc5-4331-9496-6e9924fc82ce\",\"w\":48,\"x\":0,\"y\":3},\"panelIndex\":\"f82e6f3e-2bc5-4331-9496-6e9924fc82ce\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_1\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":7,\"i\":\"442c53bd-1458-410d-ba6a-5fd4c69227c8\",\"w\":16,\"x\":0,\"y\":7},\"panelIndex\":\"442c53bd-1458-410d-ba6a-5fd4c69227c8\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_2\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":28,\"i\":\"1bf91279-3ad2-4050-9bc9-cd6ef1a398ab\",\"w\":32,\"x\":16,\"y\":7},\"panelIndex\":\"1bf91279-3ad2-4050-9bc9-cd6ef1a398ab\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_3\"},{\"embeddableConfig\":{\"vis\":{\"colors\":{\"default\":\"#F2C96D\"},\"legendOpen\":true}},\"gridData\":{\"h\":7,\"i\":\"c6c67d51-43bf-4646-98d4-64be3f6f2ab0\",\"w\":16,\"x\":0,\"y\":14},\"panelIndex\":\"c6c67d51-43bf-4646-98d4-64be3f6f2ab0\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_4\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":7,\"i\":\"0304bbb7-21d6-41ea-b750-c582fc141085\",\"w\":16,\"x\":0,\"y\":21},\"panelIndex\":\"0304bbb7-21d6-41ea-b750-c582fc141085\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_5\"},{\"embeddableConfig\":{},\"gridData\":{\"h\":7,\"i\":\"2d0bdde2-b339-4826-8a10-3e1b837fb192\",\"w\":16,\"x\":0,\"y\":28},\"panelIndex\":\"2d0bdde2-b339-4826-8a10-3e1b837fb192\",\"version\":\"7.8.0\",\"panelRefName\":\"panel_6\"}]","timeRestore":false,"title":"Network Policy Dashboard","version":1},"id":"c5af6850-23b2-11eb-90d2-a7a4de48218a","migrationVersion":{"dashboard":"7.3.0"},"references":[{"id":"d5d25970-23b4-11eb-90d2-a7a4de48218a","name":"panel_0","type":"visualization"},{"id":"4b5a40a0-23b9-11eb-90d2-a7a4de48218a","name":"panel_1","type":"visualization"},{"id":"9b4db300-23b7-11eb-90d2-a7a4de48218a","name":"panel_2","type":"visualization"},{"id":"c08ea960-7a1c-11eb-a325-39e98502337e","name":"panel_3","type":"visualization"},{"id":"56535ab0-23b8-11eb-90d2-a7a4de48218a","name":"panel_4","type":"visualization"},{"id":"bc4e0870-23b7-11eb-90d2-a7a4de48218a","name":"panel_5","type":"visualization"},{"id":"40e05390-23b8-11eb-90d2-a7a4de48218a","name":"panel_6","type":"visualization"}],"type":"dashboard","updated_at":"2021-08-07T23:30:40.150Z","version":"WzcwLDFd"}
-{"exportedCount":69,"missingRefCount":0,"missingReferences":[]}
\ No newline at end of file
diff --git a/build/yamls/elk-flow-collector/logstash/filter.rb b/build/yamls/elk-flow-collector/logstash/filter.rb
deleted file mode 100644
index fc4947907d0..00000000000
--- a/build/yamls/elk-flow-collector/logstash/filter.rb
+++ /dev/null
@@ -1,164 +0,0 @@
-require 'date'
-# register accepts the hashmap passed to "script_params"
-# it runs once at startup
-def register(params)
- @@time_map = Hash.new
-end
-
-# filter runs for every event
-# return the list of events to be passed forward
-# returning empty list is equivalent to event.cancel
-def filter(event)
- event.set("[ipfix][bytes]", event.get("[ipfix][octetTotalCount]").to_i)
- event.set("[ipfix][packets]", event.get("[ipfix][packetTotalCount]").to_i)
- if event.get("[ipfix][protocolIdentifier]") == 6
- event.remove("[ipfix][protocolIdentifier]")
- event.set("[ipfix][protocolIdentifier]", "TCP")
- end
- if event.get("[ipfix][protocolIdentifier]") == 17
- event.remove("[ipfix][protocolIdentifier]")
- event.set("[ipfix][protocolIdentifier]", "UDP")
- end
-
- flowType = event.get("[ipfix][flowType]")
- if flowType == 1
- event.set("[ipfix][flowTypeStr]", "Intra-Node")
- elsif flowType == 2
- event.set("[ipfix][flowTypeStr]", "Inter-Node")
- elsif flowType == 3
- event.set("[ipfix][flowTypeStr]", "To External")
- elsif flowType == 4
- event.set("[ipfix][flowTypeStr]", "From External")
- end
-
- ingressRuleAction = event.get("[ipfix][ingressNetworkPolicyRuleAction]")
- egressRuleAction = event.get("[ipfix][egressNetworkPolicyRuleAction]")
- if ingressRuleAction == 0
- event.set("[ipfix][ingressNetworkPolicyRuleActionStr]", "No Action")
- elsif ingressRuleAction == 1
- event.set("[ipfix][ingressNetworkPolicyRuleActionStr]", "Allow")
- elsif ingressRuleAction == 2
- event.set("[ipfix][ingressNetworkPolicyRuleActionStr]", "Drop")
- elsif ingressRuleAction == 3
- event.set("[ipfix][ingressNetworkPolicyRuleActionStr]", "Reject")
- end
- if egressRuleAction == 0
- event.set("[ipfix][egressNetworkPolicyRuleActionStr]", "No Action")
- elsif egressRuleAction == 1
- event.set("[ipfix][egressNetworkPolicyRuleActionStr]", "Allow")
- elsif egressRuleAction == 2
- event.set("[ipfix][egressNetworkPolicyRuleActionStr]", "Drop")
- elsif egressRuleAction == 3
- event.set("[ipfix][egressNetworkPolicyRuleActionStr]", "Reject")
- end
-
- if event.get("[ipfix][destinationIPv6Address]").nil?
- event.set("[ipfix][destinationIP]", event.get("[ipfix][destinationIPv4Address]"))
- else
- event.set("[ipfix][destinationIP]", event.get("[ipfix][destinationIPv6Address]"))
- end
- if event.get("[ipfix][sourceIPv6Address]").nil?
- event.set("[ipfix][sourceIP]", event.get("[ipfix][sourceIPv4Address]"))
- else
- event.set("[ipfix][sourceIP]", event.get("[ipfix][sourceIPv6Address]"))
- end
- if event.get("[ipfix][sourcePodName]") != ""
- if event.get("[ipfix][destinationServicePortName]") != ""
- flowkey = ""
- flowkey << event.get("[ipfix][sourcePodName]")
- flowkey << ":"
- flowkey << event.get("[ipfix][sourceTransportPort]").to_s
- flowkey << "->"
- flowkey << event.get("[ipfix][destinationServicePortName]")
- flowkey << event.get("[ipfix][destinationServicePort]").to_s
- flowkey << " "
- flowkey << event.get("[ipfix][protocolIdentifier]").to_s
- event.set("[ipfix][flowKeyPodToService]", flowkey)
- end
- if event.get("[ipfix][flowType]") != 3
- flowkey = ""
- flowkey << event.get("[ipfix][sourcePodName]")
- flowkey << ":"
- flowkey << event.get("[ipfix][sourceTransportPort]").to_s
- flowkey << "->"
- flowkey << event.get("[ipfix][destinationPodName]")
- flowkey << ":"
- flowkey << event.get("[ipfix][destinationTransportPort]").to_s
- flowkey << " "
- flowkey << event.get("[ipfix][protocolIdentifier]").to_s
- event.set("[ipfix][flowKey]", flowkey)
- event.set("[ipfix][flowKeyPodToPod]", flowkey)
- else
- flowkey = ""
- flowkey << event.get("[ipfix][sourcePodName]")
- flowkey << ":"
- flowkey << event.get("[ipfix][sourceTransportPort]").to_s
- flowkey << "->"
- flowkey << event.get("[ipfix][destinationIP]")
- flowkey << ":"
- flowkey << event.get("[ipfix][destinationTransportPort]").to_s
- flowkey << " "
- flowkey << event.get("[ipfix][protocolIdentifier]").to_s
- event.set("[ipfix][flowKey]", flowkey)
- event.set("[ipfix][flowKeyPodToExternal]", flowkey)
- end
- end
- if event.get("[ipfix][ingressNetworkPolicyName]") == ""
- event.remove("[ipfix][ingressNetworkPolicyName]")
- event.set("[ipfix][ingressNetworkPolicyName]", "N/A")
- end
- if event.get("[ipfix][ingressNetworkPolicyNamespace]") == ""
- event.remove("[ipfix][ingressNetworkPolicyNamespace]")
- event.set("[ipfix][ingressNetworkPolicyNamespace]", "N/A")
- end
- if event.get("[ipfix][egressNetworkPolicyName]") == ""
- event.remove("[ipfix][egressNetworkPolicyName]")
- event.set("[ipfix][egressNetworkPolicyName]", "N/A")
- end
- if event.get("[ipfix][egressNetworkPolicyNamespace]") == ""
- event.remove("[ipfix][egressNetworkPolicyNamespace]")
- event.set("[ipfix][egressNetworkPolicyNamespace]", "N/A")
- end
- ingressNetworkPolicyType = event.get("[ipfix][ingressNetworkPolicyType]")
- if ingressNetworkPolicyType == 1
- event.set("[ipfix][ingressNetworkPolicyTypeStr]", "K8s NetworkPolicy")
- elsif ingressNetworkPolicyType == 2
- event.set("[ipfix][ingressNetworkPolicyTypeStr]", "Antrea NetworkPolicy")
- elsif ingressNetworkPolicyType == 3
- event.set("[ipfix][ingressNetworkPolicyTypeStr]", "Antrea ClusterNetworkPolicy")
- end
- egressNetworkPolicyType = event.get("[ipfix][egressNetworkPolicyType]")
- if egressNetworkPolicyType == 1
- event.set("[ipfix][egressNetworkPolicyTypeStr]", "K8s NetworkPolicy")
- elsif egressNetworkPolicyType == 2
- event.set("[ipfix][egressNetworkPolicyTypeStr]", "Antrea NetworkPolicy")
- elsif egressNetworkPolicyType == 3
- event.set("[ipfix][egressNetworkPolicyTypeStr]", "Antrea ClusterNetworkPolicy")
- end
- key = event.get("[ipfix][flowKey]")
- if @@time_map.has_key?(key)
- t = event.get("[ipfix][flowEndSeconds]").to_i
- duration = t - @@time_map[key]
- # If flowEndSeconds does not change, throughput should be 0.
- if duration == 0
- event.set("[ipfix][throughput]", 0)
- event.set("[ipfix][reverseThroughput]", 0)
- else
- event.set("[ipfix][throughput]", event.get("[ipfix][octetDeltaCountFromSourceNode]").to_i / duration.to_i)
- event.set("[ipfix][reverseThroughput]", event.get("[ipfix][reverseOctetDeltaCountFromSourceNode]").to_i / duration.to_i)
- @@time_map[key] = t
- end
- else
- startTime = event.get("[ipfix][flowStartSeconds]").to_i
- endTime = event.get("[ipfix][flowEndSeconds]").to_i
- duration = endTime-startTime
- # if startTime equals endTime, just set throughput to current octetDeltaCount
- if duration == 0
- duration = 1
- end
- event.set("[ipfix][throughput]", event.get("[ipfix][octetDeltaCountFromSourceNode]").to_i / duration.to_i)
- event.set("[ipfix][reverseThroughput]", event.get("[ipfix][reverseOctetDeltaCountFromSourceNode]").to_i / duration.to_i)
- @@time_map[key] = endTime
- end
- return [event]
-end
diff --git a/build/yamls/elk-flow-collector/logstash/ipfix.yml b/build/yamls/elk-flow-collector/logstash/ipfix.yml
deleted file mode 100644
index fb35cf35ec2..00000000000
--- a/build/yamls/elk-flow-collector/logstash/ipfix.yml
+++ /dev/null
@@ -1,209 +0,0 @@
-# ipfix fields definition file. Antrea-specific fields are with Enterprise ID 56506
----
-0:
- 0:
- - :skip
- 1:
- - :uint64
- - :octetDeltaCount
- 2:
- - :uint64
- - :packetDeltaCount
- 4:
- - :uint8
- - :protocolIdentifier
- 7:
- - :uint16
- - :sourceTransportPort
- 8:
- - :ip4_addr
- - :sourceIPv4Address
- 11:
- - :uint16
- - :destinationTransportPort
- 12:
- - :ip4_addr
- - :destinationIPv4Address
- 27:
- - :ip6_addr
- - :sourceIPv6Address
- 28:
- - :ip6_addr
- - :destinationIPv6Address
- 85:
- - :uint64
- - :octetTotalCount
- 86:
- - :uint64
- - :packetTotalCount
- 136:
- - :uint8
- - :flowEndReason
- 149:
- - :uint32
- - :observationDomainId
- 150:
- - :uint32
- - :flowStartSeconds
- 151:
- - :uint32
- - :flowEndSeconds
-29305:
- 1:
- - :uint64
- - :reverseOctetDeltaCount
- 2:
- - :uint64
- - :reversePacketDeltaCount
- 85:
- - :uint64
- - :reverseOctetTotalCount
- 86:
- - :uint64
- - :reversePacketTotalCount
-# Antrea
-56506:
- 100:
- - :string
- - :sourcePodNamespace
- 101:
- - :string
- - :sourcePodName
- 102:
- - :string
- - :destinationPodNamespace
- 103:
- - :string
- - :destinationPodName
- 104:
- - :string
- - :sourceNodeName
- 105:
- - :string
- - :destinationNodeName
- 106:
- - :ip4_addr
- - :destinationClusterIPv4
- 107:
- - :ip6_addr
- - :destinationClusterIPv6
- 108:
- - :uint16
- - :destinationServicePort
- 109:
- - :string
- - :destinationServicePortName
- 110:
- - :string
- - :ingressNetworkPolicyName
- 111:
- - :string
- - :ingressNetworkPolicyNamespace
- 112:
- - :string
- - :egressNetworkPolicyName
- 113:
- - :string
- - :egressNetworkPolicyNamespace
- 115:
- - :uint8
- - :ingressNetworkPolicyType
- 118:
- - :uint8
- - :egressNetworkPolicyType
- 120:
- - :uint64
- - :packetTotalCountFromSourceNode
- 121:
- - :uint64
- - :octetTotalCountFromSourceNode
- 122:
- - :uint64
- - :packetDeltaCountFromSourceNode
- 123:
- - :uint64
- - :octetDeltaCountFromSourceNode
- 124:
- - :uint64
- - :reversePacketTotalCountFromSourceNode
- 125:
- - :uint64
- - :reverseOctetTotalCountFromSourceNode
- 126:
- - :uint64
- - :reversePacketDeltaCountFromSourceNode
- 127:
- - :uint64
- - :reverseOctetDeltaCountFromSourceNode
- 128:
- - :uint64
- - :packetTotalCountFromDestinationNode
- 129:
- - :uint64
- - :octetTotalCountFromDestinationNode
- 130:
- - :uint64
- - :packetDeltaCountFromDestinationNode
- 131:
- - :uint64
- - :octetDeltaCountFromDestinationNode
- 132:
- - :uint64
- - :reversePacketTotalCountFromDestinationNode
- 133:
- - :uint64
- - :reverseOctetTotalCountFromDestinationNode
- 134:
- - :uint64
- - :reversePacketDeltaCountFromDestinationNode
- 135:
- - :uint64
- - :reverseOctetDeltaCountFromDestinationNode
- 136:
- - :string
- - :tcpState
- 137:
- - :uint8
- - :flowType
- 139:
- - :uint8
- - :ingressNetworkPolicyRuleAction
- 140:
- - :uint8
- - :egressNetworkPolicyRuleAction
- 141:
- - :string
- - :ingressNetworkPolicyRuleName
- 142:
- - :string
- - :egressNetworkPolicyRuleName
- 143:
- - :string
- - :sourcePodLabels
- 144:
- - :string
- - :destinationPodLabels
- 145:
- - :uint64
- - :throughput
- 146:
- - :uint64
- - :reverseThroughput
- 147:
- - :uint64
- - :throughputFromSourceNode
- 148:
- - :uint64
- - :throughputFromDestinationNode
- 149:
- - :uint64
- - :reverseThroughputFromSourceNode
- 150:
- - :uint64
- - :reverseThroughputFromDestinationNode
- 151:
- - :uint32
- - :flowEndSecondsFromSourceNode
- 152:
- - :uint32
- - :flowEndSecondsFromDestinationNode
diff --git a/build/yamls/elk-flow-collector/logstash/logstash.conf b/build/yamls/elk-flow-collector/logstash/logstash.conf
deleted file mode 100644
index 9bcdc326881..00000000000
--- a/build/yamls/elk-flow-collector/logstash/logstash.conf
+++ /dev/null
@@ -1,63 +0,0 @@
-# The configuration file is for logstash to receive and process flow records
-# it will start a udp listener to receive and decode records using definitions in ipfix.yml,
-# filter the flow records for bytes & packets and output to elasticsearch.
-
-input {
- udp {
- host => "${POD_IP}"
- port => "4739"
- workers => "4"
- queue_size => "2048"
- receive_buffer_bytes => "16777216"
- codec => netflow {
- versions => [10]
- target => "ipfix"
- include_flowset_id => "true"
- cache_ttl => 86400
- ipfix_definitions => "/usr/share/logstash/definitions/ipfix.yml"
- }
- type => "ipfix"
- }
- tcp {
- host => "${POD_IP}"
- port => "4739"
- codec => netflow {
- versions => [10]
- target => "ipfix"
- include_flowset_id => "true"
- # Set template expiration time to 365 days
- cache_ttl => 31536000
- ipfix_definitions => "/usr/share/logstash/definitions/ipfix.yml"
- }
- type => "ipfix"
- }
- tcp {
- host => "${POD_IP}"
- port => "4736"
- codec => json
- }
- udp {
- host => "${POD_IP}"
- port => "4736"
- workers => "4"
- queue_size => "2048"
- receive_buffer_bytes => "16777216"
- codec => json
- }
-}
-
-filter {
- ruby {
- path => "/usr/share/logstash/config/filter.rb"
- }
-}
-
-output {
- elasticsearch {
- hosts => [ "elasticsearch:9200" ]
- ssl => "false"
- ssl_certificate_verification => "false"
- index => "flow-%{+YYYY.MM.dd}"
- }
- stdout {codec => rubydebug}
-}
diff --git a/build/yamls/elk-flow-collector/logstash/logstash.yml b/build/yamls/elk-flow-collector/logstash/logstash.yml
deleted file mode 100644
index 22cfe5a810b..00000000000
--- a/build/yamls/elk-flow-collector/logstash/logstash.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-http.host: "${POD_IP}"
-path.config: /usr/share/logstash/pipeline
-pipeline.workers: 1
-pipeline.batch.size: 125
diff --git a/build/yamls/flow-visibility.yml b/build/yamls/flow-visibility.yml
index 7217afb84f7..45ce2850597 100644
--- a/build/yamls/flow-visibility.yml
+++ b/build/yamls/flow-visibility.yml
@@ -86,26 +86,27 @@ data:
UInt64,\n reverseThroughputFromDestinationNode UInt64,\n trusted
UInt8 DEFAULT 0\n ) engine=MergeTree\n ORDER BY (timeInserted, flowEndSeconds)\n
\ TTL timeInserted + INTERVAL 1 HOUR\n SETTINGS merge_with_ttl_timeout =
- 3600;\n\n CREATE MATERIALIZED VIEW flows_pod_view\n ENGINE = SummingMergeTree\n
- \ ORDER BY (\n timeInserted,\n flowEndSeconds,\n flowEndSecondsFromSourceNode,\n
- \ flowEndSecondsFromDestinationNode,\n sourcePodName,\n destinationPodName,\n
- \ destinationIP,\n destinationServicePortName,\n flowType,\n
- \ sourcePodNamespace,\n destinationPodNamespace)\n TTL timeInserted
- + INTERVAL 1 HOUR\n SETTINGS merge_with_ttl_timeout = 3600\n POPULATE\n
- \ AS SELECT\n timeInserted,\n flowEndSeconds,\n flowEndSecondsFromSourceNode,\n
- \ flowEndSecondsFromDestinationNode,\n sourcePodName,\n destinationPodName,\n
- \ destinationIP,\n destinationServicePortName,\n flowType,\n
- \ sourcePodNamespace,\n destinationPodNamespace,\n sum(octetDeltaCount)
- AS octetDeltaCount,\n sum(reverseOctetDeltaCount) AS reverseOctetDeltaCount,\n
- \ sum(throughput) AS throughput,\n sum(reverseThroughput) AS reverseThroughput,\n
- \ sum(throughputFromSourceNode) AS throughputFromSourceNode,\n sum(throughputFromDestinationNode)
- AS throughputFromDestinationNode\n FROM flows\n GROUP BY\n timeInserted,\n
+ 3600;\n\n CREATE MATERIALIZED VIEW IF NOT EXISTS flows_pod_view\n ENGINE
+ = SummingMergeTree\n ORDER BY (\n timeInserted,\n flowEndSeconds,\n
+ \ flowEndSecondsFromSourceNode,\n flowEndSecondsFromDestinationNode,\n
+ \ sourcePodName,\n destinationPodName,\n destinationIP,\n
+ \ destinationServicePortName,\n flowType,\n sourcePodNamespace,\n
+ \ destinationPodNamespace)\n TTL timeInserted + INTERVAL 1 HOUR\n SETTINGS
+ merge_with_ttl_timeout = 3600\n POPULATE\n AS SELECT\n timeInserted,\n
\ flowEndSeconds,\n flowEndSecondsFromSourceNode,\n flowEndSecondsFromDestinationNode,\n
\ sourcePodName,\n destinationPodName,\n destinationIP,\n
\ destinationServicePortName,\n flowType,\n sourcePodNamespace,\n
- \ destinationPodNamespace;\n\n CREATE MATERIALIZED VIEW flows_node_view\n
- \ ENGINE = SummingMergeTree\n ORDER BY (\n timeInserted,\n flowEndSeconds,\n
+ \ destinationPodNamespace,\n sum(octetDeltaCount) AS octetDeltaCount,\n
+ \ sum(reverseOctetDeltaCount) AS reverseOctetDeltaCount,\n sum(throughput)
+ AS throughput,\n sum(reverseThroughput) AS reverseThroughput,\n sum(throughputFromSourceNode)
+ AS throughputFromSourceNode,\n sum(throughputFromDestinationNode) AS throughputFromDestinationNode\n
+ \ FROM flows\n GROUP BY\n timeInserted,\n flowEndSeconds,\n
\ flowEndSecondsFromSourceNode,\n flowEndSecondsFromDestinationNode,\n
+ \ sourcePodName,\n destinationPodName,\n destinationIP,\n
+ \ destinationServicePortName,\n flowType,\n sourcePodNamespace,\n
+ \ destinationPodNamespace;\n\n CREATE MATERIALIZED VIEW IF NOT EXISTS
+ flows_node_view\n ENGINE = SummingMergeTree\n ORDER BY (\n timeInserted,\n
+ \ flowEndSeconds,\n flowEndSecondsFromSourceNode,\n flowEndSecondsFromDestinationNode,\n
\ sourceNodeName,\n destinationNodeName,\n sourcePodNamespace,\n
\ destinationPodNamespace)\n TTL timeInserted + INTERVAL 1 HOUR\n SETTINGS
merge_with_ttl_timeout = 3600\n POPULATE\n AS SELECT\n timeInserted,\n
@@ -120,9 +121,9 @@ data:
AS reverseThroughputFromDestinationNode\n FROM flows\n GROUP BY\n timeInserted,\n
\ flowEndSeconds,\n flowEndSecondsFromSourceNode,\n flowEndSecondsFromDestinationNode,\n
\ sourceNodeName,\n destinationNodeName,\n sourcePodNamespace,\n
- \ destinationPodNamespace;\n\n CREATE MATERIALIZED VIEW flows_policy_view\n
- \ ENGINE = SummingMergeTree\n ORDER BY (\n timeInserted,\n flowEndSeconds,\n
- \ flowEndSecondsFromSourceNode,\n flowEndSecondsFromDestinationNode,\n
+ \ destinationPodNamespace;\n\n CREATE MATERIALIZED VIEW IF NOT EXISTS
+ flows_policy_view\n ENGINE = SummingMergeTree\n ORDER BY (\n timeInserted,\n
+ \ flowEndSeconds,\n flowEndSecondsFromSourceNode,\n flowEndSecondsFromDestinationNode,\n
\ egressNetworkPolicyName,\n egressNetworkPolicyRuleAction,\n ingressNetworkPolicyName,\n
\ ingressNetworkPolicyRuleAction,\n sourcePodNamespace,\n destinationPodNamespace)\n
\ TTL timeInserted + INTERVAL 1 HOUR\n SETTINGS merge_with_ttl_timeout =
@@ -145,7 +146,7 @@ data:
\ ORDER BY (timeCreated);\n \nEOSQL\n"
kind: ConfigMap
metadata:
- name: clickhouse-mounted-configmap-dkbmg82ctg
+ name: clickhouse-mounted-configmap-58fkkt9b56
namespace: flow-visibility
---
apiVersion: v1
@@ -174,8 +175,8 @@ data:
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
- "id": 2,
- "iteration": 1644612871636,
+ "id": 1,
+ "iteration": 1652994218341,
"links": [],
"liveNow": false,
"panels": [
@@ -1049,7 +1050,7 @@ data:
"query": "SELECT\n $timeSeries as t,\n *\nFROM $table\n\nWHERE $timeFilter\n\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT\n (intDiv(toUInt32(flowEndSeconds), 1) * 1) * 1000 as t,\n *\nFROM default.flows\n\nWHERE flowEndSeconds >= toDateTime(1642715797) AND flowEndSeconds <= toDateTime(1642716697)\n\nORDER BY t",
- "rawSql": "SELECT * \nFROM flows\nWHERE $__timeFilter(flowEndSeconds)",
+ "rawSql": "SELECT * \nFROM flows\nWHERE $__timeFilter(flowEndSeconds)\nORDER BY flowEndSeconds DESC\nLIMIT 10000",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -1129,8 +1130,8 @@ data:
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
- "id": 5,
- "iteration": 1644982999763,
+ "id": 2,
+ "iteration": 1653420082463,
"links": [],
"liveNow": false,
"panels": [
@@ -1207,7 +1208,7 @@ data:
"query": "SELECT SUM(octetDeltaCount), (egressNetworkPolicyName, ingressNetworkPolicyName) AS pair\nFROM $table\nWHERE $timeFilter\nAND (egressNetworkPolicyRuleAction == 1 OR ingressNetworkPolicyRuleAction == 1)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair\n",
"queryType": "sql",
"rawQuery": "SELECT SUM(octetDeltaCount), (egressNetworkPolicyName, ingressNetworkPolicyName) AS pair\nFROM default.flows_policy_view\nWHERE flowEndSeconds >= toDateTime(1642198255) AND flowEndSeconds <= toDateTime(1642200055)\nAND (egressNetworkPolicyRuleAction == 1 OR ingressNetworkPolicyRuleAction == 1)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair",
- "rawSql": "select SUM(octetDeltaCount) as bytes, egressNetworkPolicyName as source, ingressNetworkPolicyName as destination, ingressNetworkPolicyName as destinationIP\nFrom flows_policy_view\nWHERE $__timeFilter(flowEndSeconds) \nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator') \nAND (egressNetworkPolicyRuleAction == 1 OR ingressNetworkPolicyRuleAction == 1)\nGROUP BY source, destination\nHAVING bytes != 0",
+ "rawSql": "select SUM(octetDeltaCount) as bytes, egressNetworkPolicyName as source, ingressNetworkPolicyName as destination, ingressNetworkPolicyName as destinationIP\nFrom flows_policy_view\nWHERE $__timeFilter(flowEndSeconds) \nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator') \nAND (egressNetworkPolicyRuleAction == 1 OR ingressNetworkPolicyRuleAction == 1)\nGROUP BY source, destination\nHAVING bytes != 0\nORDER BY bytes DESC\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -1256,7 +1257,7 @@ data:
"query": "SELECT SUM(reverseOctetDeltaCount), (egressNetworkPolicyName, ingressNetworkPolicyName) AS pair\nFROM $table\nWHERE $timeFilter\nAND (egressNetworkPolicyRuleAction == 1 OR ingressNetworkPolicyRuleAction == 1)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair\n",
"queryType": "randomWalk",
"rawQuery": "SELECT SUM(reverseOctetDeltaCount), (egressNetworkPolicyName, ingressNetworkPolicyName) AS pair\nFROM default.flows_policy_view\nWHERE flowEndSeconds >= toDateTime(1642198301) AND flowEndSeconds <= toDateTime(1642200101)\nAND (egressNetworkPolicyRuleAction == 1 OR ingressNetworkPolicyRuleAction == 1)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair",
- "rawSql": "select SUM(reverseOctetDeltaCount) as bytes, egressNetworkPolicyName as source, ingressNetworkPolicyName as destination, ingressNetworkPolicyName as destinationIP\nFrom flows_policy_view\nWHERE $__timeFilter(flowEndSeconds)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND (egressNetworkPolicyRuleAction == 1 OR ingressNetworkPolicyRuleAction == 1)\nGROUP BY source, destination\nHAVING bytes != 0",
+ "rawSql": "select SUM(reverseOctetDeltaCount) as bytes, egressNetworkPolicyName as source, ingressNetworkPolicyName as destination, ingressNetworkPolicyName as destinationIP\nFrom flows_policy_view\nWHERE $__timeFilter(flowEndSeconds)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND (egressNetworkPolicyRuleAction == 1 OR ingressNetworkPolicyRuleAction == 1)\nGROUP BY source, destination\nHAVING bytes != 0\nORDER BY bytes DESC\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -1365,7 +1366,7 @@ data:
"query": "SELECT $timeSeries as t, SUM(throughputFromSourceNode), sourcePodName\nFROM $table\nWHERE $timeFilter \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSeconds), 60) * 60) * 1000 as t, SUM(throughputFromSourceNode), sourcePodName\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642532448) AND flowEndSeconds <= toDateTime(1642534248) \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(egressNetworkPolicyName, '->', ingressNetworkPolicyName) as pair, SUM(throughput)\nFROM flows_policy_view\nWHERE $__timeFilter(flowEndSeconds) \nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator') \nAND (egressNetworkPolicyRuleAction == 1 OR ingressNetworkPolicyRuleAction == 1)\nGROUP BY time, pair\nHAVING SUM(throughput) != 0\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(egressNetworkPolicyName, '->', ingressNetworkPolicyName) as pair, SUM(throughput)\nFROM flows_policy_view\nWHERE $__timeFilter(flowEndSeconds) \nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator') \nAND (egressNetworkPolicyRuleAction == 1 OR ingressNetworkPolicyRuleAction == 1)\nGROUP BY time, pair\nHAVING SUM(throughput) != 0\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -1493,7 +1494,7 @@ data:
"query": "SELECT $timeSeries as t, SUM(throughputFromSourceNode), sourcePodName\nFROM $table\nWHERE $timeFilter \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSeconds), 60) * 60) * 1000 as t, SUM(throughputFromSourceNode), sourcePodName\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642532448) AND flowEndSeconds <= toDateTime(1642534248) \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(egressNetworkPolicyName, '->', ingressNetworkPolicyName) as pair, SUM(reverseThroughput)\nFROM flows_policy_view\nWHERE $__timeFilter(time)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND (egressNetworkPolicyRuleAction == 1 OR ingressNetworkPolicyRuleAction == 1)\nGROUP BY time, pair\nHAVING SUM(reverseThroughput) != 0\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(egressNetworkPolicyName, '->', ingressNetworkPolicyName) as pair, SUM(reverseThroughput)\nFROM flows_policy_view\nWHERE $__timeFilter(time)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND (egressNetworkPolicyRuleAction == 1 OR ingressNetworkPolicyRuleAction == 1)\nGROUP BY time, pair\nHAVING SUM(reverseThroughput) != 0\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -1621,7 +1622,7 @@ data:
"query": "SELECT $timeSeries as t, SUM(throughputFromSourceNode), sourcePodName\nFROM $table\nWHERE $timeFilter \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSeconds), 60) * 60) * 1000 as t, SUM(throughputFromSourceNode), sourcePodName\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642532448) AND flowEndSeconds <= toDateTime(1642534248) \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, egressNetworkPolicyName, SUM(throughput)\nFROM flows_policy_view\nWHERE sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND egressNetworkPolicyName != ''\nAND egressNetworkPolicyRuleAction == 1\nAND $__timeFilter(time)\nGROUP BY time, egressNetworkPolicyName\nHAVING SUM(throughput) != 0\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, egressNetworkPolicyName, SUM(throughput)\nFROM flows_policy_view\nWHERE sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND egressNetworkPolicyName != ''\nAND egressNetworkPolicyRuleAction == 1\nAND $__timeFilter(time)\nGROUP BY time, egressNetworkPolicyName\nHAVING SUM(throughput) != 0\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -1696,6 +1697,7 @@ data:
"lastNotNull"
],
"fields": "",
+ "limit": 25,
"values": true
},
"tooltip": {
@@ -1709,7 +1711,7 @@ data:
"uid": "PDEE91DDB90597936"
},
"format": 1,
- "rawSql": "SELECT SUM(octetDeltaCount), egressNetworkPolicyName\nFROM flows_policy_view\nWHERE sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND egressNetworkPolicyName != ''\nAND egressNetworkPolicyRuleAction == 1\nAND $__timeFilter(flowEndSeconds)\nGROUP BY egressNetworkPolicyName\nHAVING SUM(octetDeltaCount) != 0",
+ "rawSql": "SELECT SUM(octetDeltaCount) as bytes, egressNetworkPolicyName\nFROM flows_policy_view\nWHERE sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND egressNetworkPolicyName != ''\nAND egressNetworkPolicyRuleAction == 1\nAND $__timeFilter(flowEndSeconds)\nGROUP BY egressNetworkPolicyName\nHAVING SUM(octetDeltaCount) != 0\nORDER BY bytes DESC",
"refId": "A"
}
],
@@ -1814,7 +1816,7 @@ data:
"query": "SELECT $timeSeries as t, SUM(throughputFromSourceNode), sourcePodName\nFROM $table\nWHERE $timeFilter \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSeconds), 60) * 60) * 1000 as t, SUM(throughputFromSourceNode), sourcePodName\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642532448) AND flowEndSeconds <= toDateTime(1642534248) \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, ingressNetworkPolicyName, SUM(throughput)\nFROM flows_policy_view\nWHERE sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND ingressNetworkPolicyName != ''\nAND ingressNetworkPolicyRuleAction == 1\nAND $__timeFilter(time)\nGROUP BY time, ingressNetworkPolicyName\nHAVING SUM(throughput) != 0\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, ingressNetworkPolicyName, SUM(throughput)\nFROM flows_policy_view\nWHERE sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND ingressNetworkPolicyName != ''\nAND ingressNetworkPolicyRuleAction == 1\nAND $__timeFilter(time)\nGROUP BY time, ingressNetworkPolicyName\nHAVING SUM(throughput) != 0\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -1889,6 +1891,7 @@ data:
"lastNotNull"
],
"fields": "",
+ "limit": 25,
"values": true
},
"tooltip": {
@@ -1902,7 +1905,7 @@ data:
"uid": "PDEE91DDB90597936"
},
"format": 1,
- "rawSql": "SELECT SUM(octetDeltaCount), ingressNetworkPolicyName\nFROM flows_policy_view\nWHERE sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND ingressNetworkPolicyName != ''\nAND ingressNetworkPolicyRuleAction == 1\nAND $__timeFilter(flowEndSeconds)\nGROUP BY ingressNetworkPolicyName\nHAVING SUM(octetDeltaCount) != 0",
+ "rawSql": "SELECT SUM(octetDeltaCount) as bytes, ingressNetworkPolicyName\nFROM flows_policy_view\nWHERE sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND ingressNetworkPolicyName != ''\nAND ingressNetworkPolicyRuleAction == 1\nAND $__timeFilter(flowEndSeconds)\nGROUP BY ingressNetworkPolicyName\nHAVING SUM(octetDeltaCount) != 0\nORDER BY bytes DESC",
"refId": "A"
}
],
@@ -1972,8 +1975,8 @@ data:
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
- "id": 4,
- "iteration": 1644612915701,
+ "id": 3,
+ "iteration": 1653419912594,
"links": [],
"liveNow": false,
"panels": [
@@ -2015,7 +2018,7 @@ data:
"query": "SELECT SUM(octetDeltaCount), (sourceNodeName, destinationNodeName) as pair\nFROM $table\nWHERE $timeFilter\nAND sourceNodeName != ''\nAND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair\n",
"queryType": "sql",
"rawQuery": false,
- "rawSql": "select SUM(octetDeltaCount) as bytes, sourceNodeName as source, destinationNodeName as destination\nFrom flows_node_view\nWHERE source != '' AND destination != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination",
+ "rawSql": "select SUM(octetDeltaCount) as bytes, sourceNodeName as source, destinationNodeName as destination\nFrom flows_node_view\nWHERE source != '' AND destination != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination\nORDER BY bytes DESC\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -2071,7 +2074,7 @@ data:
"query": "SELECT SUM(reverseOctetDeltaCount), (sourceNodeName, destinationNodeName) as pair\nFROM $table\nWHERE $timeFilter\nAND sourceNodeName != ''\nAND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair\n",
"queryType": "randomWalk",
"rawQuery": false,
- "rawSql": "select SUM(reverseOctetDeltaCount) as bytes, sourceNodeName as source, destinationNodeName as destination\nFrom flows_node_view\nWHERE source != '' AND destination != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination",
+ "rawSql": "select SUM(reverseOctetDeltaCount) as bytes, sourceNodeName as source, destinationNodeName as destination\nFrom flows_node_view\nWHERE source != '' AND destination != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination\nORDER BY bytes DESC\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -2180,7 +2183,7 @@ data:
"query": "SELECT $timeSeries as t, SUM(throughputFromDestinationNode), destinationNodeName\nFROM $table\nWHERE $timeFilter\nAND sourceNodeName != ''\nAND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY destinationNodeName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSecondsFromDestinationNode), 60) * 60) * 1000 as t, SUM(throughputFromDestinationNode), destinationNodeName\nFROM default.flows_node_view\nWHERE flowEndSecondsFromDestinationNode >= toDateTime(1642533454) AND flowEndSecondsFromDestinationNode <= toDateTime(1642535254)\nAND sourceNodeName != ''\nAND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY destinationNodeName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourceNodeName, '->', destinationNodeName) as pair, SUM(throughput) as Node\nFROM flows_node_view\nWHERE sourceNodeName != '' AND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, pair\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourceNodeName, '->', destinationNodeName) as pair, SUM(throughput) as Node\nFROM flows_node_view\nWHERE sourceNodeName != '' AND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, pair\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -2308,7 +2311,7 @@ data:
"query": "SELECT $timeSeries as t, SUM(throughputFromDestinationNode), destinationNodeName\nFROM $table\nWHERE $timeFilter\nAND sourceNodeName != ''\nAND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY destinationNodeName, t\nORDER BY t\n",
"queryType": "randomWalk",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSecondsFromDestinationNode), 60) * 60) * 1000 as t, SUM(throughputFromDestinationNode), destinationNodeName\nFROM default.flows_node_view\nWHERE flowEndSecondsFromDestinationNode >= toDateTime(1642533454) AND flowEndSecondsFromDestinationNode <= toDateTime(1642535254)\nAND sourceNodeName != ''\nAND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY destinationNodeName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourceNodeName, '->', destinationNodeName) as pair, SUM(reverseThroughput) as Node\nFROM flows_node_view\nWHERE sourceNodeName != '' AND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, pair\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourceNodeName, '->', destinationNodeName) as pair, SUM(reverseThroughput) as Node\nFROM flows_node_view\nWHERE sourceNodeName != '' AND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, pair\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -2436,7 +2439,7 @@ data:
"query": "SELECT $timeSeries as t, SUM(throughputFromDestinationNode), destinationNodeName\nFROM $table\nWHERE $timeFilter\nAND sourceNodeName != ''\nAND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY destinationNodeName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSecondsFromDestinationNode), 60) * 60) * 1000 as t, SUM(throughputFromDestinationNode), destinationNodeName\nFROM default.flows_node_view\nWHERE flowEndSecondsFromDestinationNode >= toDateTime(1642533454) AND flowEndSecondsFromDestinationNode <= toDateTime(1642535254)\nAND sourceNodeName != ''\nAND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY destinationNodeName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSecondsFromSourceNode) as time, sourceNodeName, SUM(throughputFromSourceNode)\nFROM flows_node_view\nWHERE sourceNodeName != '' \nAND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, sourceNodeName\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSecondsFromSourceNode) as time, sourceNodeName, SUM(throughputFromSourceNode)\nFROM flows_node_view\nWHERE sourceNodeName != '' \nAND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, sourceNodeName\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -2513,6 +2516,7 @@ data:
"lastNotNull"
],
"fields": "",
+ "limit": 25,
"values": true
},
"tooltip": {
@@ -2526,7 +2530,7 @@ data:
"uid": "PDEE91DDB90597936"
},
"format": 1,
- "rawSql": "SELECT SUM(octetDeltaCount), sourceNodeName\nFROM flows_node_view\nWHERE sourceNodeName != '' AND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY sourceNodeName",
+ "rawSql": "SELECT SUM(octetDeltaCount) as bytes, sourceNodeName\nFROM flows_node_view\nWHERE sourceNodeName != '' AND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY sourceNodeName\nORDER BY bytes DESC",
"refId": "A"
}
],
@@ -2631,7 +2635,7 @@ data:
"query": "SELECT $timeSeries as t, SUM(throughputFromDestinationNode), destinationNodeName\nFROM $table\nWHERE $timeFilter\nAND sourceNodeName != ''\nAND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY destinationNodeName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSecondsFromDestinationNode), 60) * 60) * 1000 as t, SUM(throughputFromDestinationNode), destinationNodeName\nFROM default.flows_node_view\nWHERE flowEndSecondsFromDestinationNode >= toDateTime(1642533454) AND flowEndSecondsFromDestinationNode <= toDateTime(1642535254)\nAND sourceNodeName != ''\nAND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY destinationNodeName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSecondsFromDestinationNode) as time, destinationNodeName, SUM(throughputFromDestinationNode)\nFROM flows_node_view\nWHERE sourceNodeName != '' AND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, destinationNodeName\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSecondsFromDestinationNode) as time, destinationNodeName, SUM(throughputFromDestinationNode)\nFROM flows_node_view\nWHERE sourceNodeName != '' AND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, destinationNodeName\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -2706,6 +2710,7 @@ data:
"lastNotNull"
],
"fields": "",
+ "limit": 25,
"values": true
},
"tooltip": {
@@ -2719,7 +2724,7 @@ data:
"uid": "PDEE91DDB90597936"
},
"format": 1,
- "rawSql": "SELECT SUM(octetDeltaCount), destinationNodeName\nFROM flows_node_view\nWHERE sourceNodeName != '' AND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY destinationNodeName",
+ "rawSql": "SELECT SUM(octetDeltaCount) as bytes, destinationNodeName\nFROM flows_node_view\nWHERE sourceNodeName != '' AND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY destinationNodeName\nORDER BY bytes DESC",
"refId": "A"
}
],
@@ -2762,7 +2767,7 @@ data:
"timezone": "",
"title": "node_to_node_dashboard",
"uid": "1F56RJh7z",
- "version": 10,
+ "version": 5,
"weekStart": ""
}
pod_to_external_dashboard.json: |-
@@ -2789,8 +2794,8 @@ data:
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
- "id": 5,
- "iteration": 1644612843565,
+ "id": 4,
+ "iteration": 1653419876105,
"links": [],
"liveNow": false,
"panels": [
@@ -2831,7 +2836,7 @@ data:
"query": "SELECT SUM(octetDeltaCount), (sourcePodName, destinationIP) AS pair\nFROM $table\nWHERE $timeFilter\nAND flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-aggregator', 'flow-visibility')\nGROUP BY pair\n",
"queryType": "randomWalk",
"rawQuery": "SELECT SUM(octetDeltaCount), (sourcePodName, destinationIP) AS pair\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642534343) AND flowEndSeconds <= toDateTime(1642536143)\nAND flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-aggregator', 'flow-visibility')\nGROUP BY pair",
- "rawSql": "select SUM(octetDeltaCount) as bytes, sourcePodName as source, destinationIP as destination\nFrom flows_pod_view\nWHERE flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination\nHAVING bytes != 0",
+ "rawSql": "select SUM(octetDeltaCount) as bytes, sourcePodName as source, destinationIP as destination\nFrom flows_pod_view\nWHERE flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination\nHAVING bytes != 0\nORDER BY bytes DESC\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -2880,7 +2885,7 @@ data:
"query": "SELECT SUM(reverseOctetDeltaCount), (sourcePodName, destinationIP) AS pair\nFROM $table\nWHERE $timeFilter\nAND flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-aggregator', 'flow-visibility')\nGROUP BY pair\n",
"queryType": "randomWalk",
"rawQuery": "SELECT SUM(reverseOctetDeltaCount), (sourcePodName, destinationIP) AS pair\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642534382) AND flowEndSeconds <= toDateTime(1642536182)\nAND flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-aggregator', 'flow-visibility')\nGROUP BY pair",
- "rawSql": "select SUM(reverseOctetDeltaCount) as bytes, sourcePodName as source, destinationIP as destination\nFrom flows_pod_view\nWHERE flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination\nHAVING bytes != 0",
+ "rawSql": "select SUM(reverseOctetDeltaCount) as bytes, sourcePodName as source, destinationIP as destination\nFrom flows_pod_view\nWHERE flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination\nHAVING bytes != 0\nORDER BY bytes DESC\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -2954,7 +2959,7 @@ data:
"y": 18
},
"id": 2,
- "interval": "60s",
+ "interval": "1s",
"options": {
"legend": {
"calcs": [
@@ -2988,7 +2993,7 @@ data:
"query": "SELECT $timeSeries as t, SUM(octetDeltaCount), (sourcePodName, destinationIP) as pair\nFROM $table\nWHERE $timeFilter\nAND flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair,t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSeconds), 60) * 60) * 1000 as t, SUM(octetDeltaCount), (sourcePodName, destinationIP) as pair\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642534150) AND flowEndSeconds <= toDateTime(1642535950)\nAND flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair,t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourcePodName, '->', destinationIP) as pair, SUM(throughput)\nFROM flows_pod_view\nWHERE flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, pair\nHAVING SUM(throughput) != 0\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourcePodName, '->', destinationIP) as pair, AVG(throughput)\nFROM flows_pod_view\nWHERE flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, pair\nHAVING SUM(throughput) != 0\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -3078,7 +3083,7 @@ data:
"y": 18
},
"id": 7,
- "interval": "60s",
+ "interval": "1s",
"options": {
"legend": {
"calcs": [
@@ -3112,7 +3117,7 @@ data:
"query": "SELECT $timeSeries as t, SUM(reverseOctetDeltaCount), (sourcePodName, destinationIP) as pair\nFROM $table\nWHERE $timeFilter\nAND flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair, t\nORDER BY t",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSeconds), 60) * 60) * 1000 as t, SUM(reverseOctetDeltaCount), (sourcePodName, destinationIP) as pair\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642534246) AND flowEndSeconds <= toDateTime(1642536046)\nAND flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourcePodName, '->', destinationIP) as pair, SUM(reverseThroughput)\nFROM flows_pod_view\nWHERE flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, pair\nHAVING SUM(reverseThroughput) != 0\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourcePodName, '->', destinationIP) as pair, AVG(reverseThroughput)\nFROM flows_pod_view\nWHERE flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, pair\nHAVING SUM(reverseThroughput) != 0\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -3178,7 +3183,7 @@ data:
"timezone": "",
"title": "pod_to_external_dashboard",
"uid": "K9SPrnJ7k",
- "version": 3,
+ "version": 5,
"weekStart": ""
}
pod_to_pod_dashboard.json: |-
@@ -3205,8 +3210,8 @@ data:
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
- "id": 1,
- "iteration": 1644971511247,
+ "id": 5,
+ "iteration": 1653419724493,
"links": [],
"liveNow": false,
"panels": [
@@ -3247,7 +3252,7 @@ data:
"query": "SELECT SUM(octetDeltaCount), (sourcePodName, destinationPodName, destinationIP) AS pair\nFROM $table\nWHERE $timeFilter\nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair\n",
"queryType": "sql",
"rawQuery": "SELECT SUM(octetDeltaCount), (sourcePodName, destinationPodName, destinationIP) AS pair\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642531723) AND flowEndSeconds <= toDateTime(1642533523)\nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair",
- "rawSql": "select SUM(octetDeltaCount) as bytes, sourcePodName as source, destinationPodName as destination, destinationIP\nFrom flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination, destinationIP",
+ "rawSql": "select SUM(octetDeltaCount) as bytes, sourcePodName as source, destinationPodName as destination, destinationIP\nFrom flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination, destinationIP\nORDER BY bytes DESC\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -3296,7 +3301,7 @@ data:
"query": "SELECT SUM(reverseOctetDeltaCount), (sourcePodName, destinationPodName, destinationIP) AS pair\nFROM $table\nWHERE $timeFilter\nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair\n",
"queryType": "randomWalk",
"rawQuery": "SELECT SUM(reverseOctetDeltaCount), (sourcePodName, destinationPodName, destinationIP) AS pair\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642531743) AND flowEndSeconds <= toDateTime(1642533543)\nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair",
- "rawSql": "select SUM(reverseOctetDeltaCount) as bytes, sourcePodName as source, destinationPodName as destination, destinationIP\nFrom flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination, destinationIP",
+ "rawSql": "select SUM(reverseOctetDeltaCount) as bytes, sourcePodName as source, destinationPodName as destination, destinationIP\nFrom flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination, destinationIP\nORDER BY bytes DESC\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -3353,10 +3358,6 @@ data:
{
"color": "green",
"value": null
- },
- {
- "color": "red",
- "value": 80
}
]
},
@@ -3371,7 +3372,7 @@ data:
"y": 18
},
"id": 21,
- "interval": "60s",
+ "interval": "1s",
"options": {
"legend": {
"calcs": [
@@ -3405,7 +3406,7 @@ data:
"query": "SELECT $timeSeries as t, SUM(throughputFromSourceNode), sourcePodName\nFROM $table\nWHERE $timeFilter \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSeconds), 60) * 60) * 1000 as t, SUM(throughputFromSourceNode), sourcePodName\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642532448) AND flowEndSeconds <= toDateTime(1642534248) \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourcePodName, '->', destinationPodName) as pair, SUM(throughput)\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, pair\nHAVING SUM(throughput) > 0\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourcePodName, '->', destinationPodName) as pair, AVG(throughput)\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, pair\nHAVING SUM(throughput) > 0\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -3499,7 +3500,7 @@ data:
"y": 18
},
"id": 22,
- "interval": "60s",
+ "interval": "1s",
"options": {
"legend": {
"calcs": [
@@ -3533,7 +3534,7 @@ data:
"query": "SELECT $timeSeries as t, SUM(throughputFromSourceNode), sourcePodName\nFROM $table\nWHERE $timeFilter \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSeconds), 60) * 60) * 1000 as t, SUM(throughputFromSourceNode), sourcePodName\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642532448) AND flowEndSeconds <= toDateTime(1642534248) \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourcePodName, '->', destinationPodName) as pair, SUM(reverseThroughput)\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, pair\nHAVING SUM(reverseThroughput) > 0\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourcePodName, '->', destinationPodName) as pair, AVG(reverseThroughput)\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, pair\nHAVING SUM(reverseThroughput) > 0\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -3609,10 +3610,6 @@ data:
{
"color": "green",
"value": null
- },
- {
- "color": "red",
- "value": 80
}
]
},
@@ -3661,7 +3658,7 @@ data:
"query": "SELECT $timeSeries as t, SUM(throughputFromSourceNode), sourcePodName\nFROM $table\nWHERE $timeFilter \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSeconds), 60) * 60) * 1000 as t, SUM(throughputFromSourceNode), sourcePodName\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642532448) AND flowEndSeconds <= toDateTime(1642534248) \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSecondsFromSourceNode) as time, sourcePodName, SUM(throughputFromSourceNode)\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, sourcePodName\nHAVING SUM(throughputFromSourceNode) > 0\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSecondsFromSourceNode) as time, sourcePodName, SUM(throughputFromSourceNode)\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, sourcePodName\nHAVING SUM(throughputFromSourceNode) > 0\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -3736,6 +3733,7 @@ data:
"lastNotNull"
],
"fields": "",
+ "limit": 25,
"values": true
},
"tooltip": {
@@ -3750,7 +3748,7 @@ data:
},
"format": 1,
"queryType": "sql",
- "rawSql": "select SUM(octetDeltaCount) as bytes, sourcePodNamespace\nFrom flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY sourcePodNamespace\nHAVING bytes > 0",
+ "rawSql": "select SUM(octetDeltaCount) as bytes, sourcePodNamespace\nFrom flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY sourcePodNamespace\nHAVING bytes > 0\nORDER BY bytes DESC",
"refId": "A"
}
],
@@ -3855,7 +3853,7 @@ data:
"query": "SELECT $timeSeries as t, SUM(throughputFromDestinationNode), destinationPodName\nFROM $table\nWHERE $timeFilter \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY destinationPodName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSecondsFromDestinationNode), 60) * 60) * 1000 as t, SUM(throughputFromDestinationNode), destinationPodName\nFROM default.flows_pod_view\nWHERE flowEndSecondsFromDestinationNode >= toDateTime(1642532702) AND flowEndSecondsFromDestinationNode <= toDateTime(1642534502) \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY destinationPodName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSecondsFromDestinationNode) as time, destinationPodName, SUM(throughputFromDestinationNode)\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, destinationPodName\nHAVING SUM(throughputFromDestinationNode) > 0\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSecondsFromDestinationNode) as time, destinationPodName, SUM(throughputFromDestinationNode)\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, destinationPodName\nHAVING SUM(throughputFromDestinationNode) > 0\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -3943,6 +3941,7 @@ data:
"lastNotNull"
],
"fields": "",
+ "limit": 25,
"values": true
},
"tooltip": {
@@ -3956,7 +3955,7 @@ data:
"uid": "PDEE91DDB90597936"
},
"format": 1,
- "rawSql": "select SUM(octetDeltaCount) as bytes, destinationPodNamespace\nFrom flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY destinationPodNamespace",
+ "rawSql": "select SUM(octetDeltaCount) as bytes, destinationPodNamespace\nFrom flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY destinationPodNamespace\nORDER BY bytes DESC",
"refId": "A"
}
],
@@ -3999,7 +3998,7 @@ data:
"timezone": "",
"title": "pod_to_pod_dashboard",
"uid": "Yxn0Ghh7k",
- "version": 9,
+ "version": 5,
"weekStart": ""
}
pod_to_service_dashboard.json: |-
@@ -4026,8 +4025,8 @@ data:
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
- "id": 1,
- "iteration": 1644612951629,
+ "id": 6,
+ "iteration": 1653420001321,
"links": [],
"liveNow": false,
"panels": [
@@ -4068,7 +4067,7 @@ data:
"query": "SELECT SUM(octetDeltaCount), (sourcePodName, destinationServicePortName) AS pair\nFROM $table\nWHERE $timeFilter\nAND destinationServicePortName != ''\nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair\n",
"queryType": "randomWalk",
"rawQuery": "SELECT SUM(octetDeltaCount), (sourcePodName, destinationServicePortName) AS pair\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642193285) AND flowEndSeconds <= toDateTime(1642195085)\nAND destinationServicePortName != ''\nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair",
- "rawSql": "select SUM(octetDeltaCount) as bytes, sourcePodName as source, destinationServicePortName as destination\nFrom flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationServicePortName != ''\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination",
+ "rawSql": "select SUM(octetDeltaCount) as bytes, sourcePodName as source, destinationServicePortName as destination\nFrom flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationServicePortName != ''\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination\nORDER BY bytes DESC\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -4117,7 +4116,7 @@ data:
"query": "SELECT SUM(reverseOctetDeltaCount), (sourcePodName, destinationServicePortName) AS pair\nFROM $table\nWHERE $timeFilter\nAND destinationServicePortName != ''\nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair\n",
"queryType": "randomWalk",
"rawQuery": "SELECT SUM(reverseOctetDeltaCount), (sourcePodName, destinationServicePortName) AS pair\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642193431) AND flowEndSeconds <= toDateTime(1642195231)\nAND destinationServicePortName != ''\nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair",
- "rawSql": "select SUM(reverseOctetDeltaCount) as bytes, sourcePodName as source, destinationServicePortName as destination\nFrom flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationServicePortName != ''\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination",
+ "rawSql": "select SUM(reverseOctetDeltaCount) as bytes, sourcePodName as source, destinationServicePortName as destination\nFrom flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationServicePortName != ''\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination\nORDER BY bytes DESC\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -4192,7 +4191,7 @@ data:
"y": 18
},
"id": 18,
- "interval": "60s",
+ "interval": "1s",
"options": {
"legend": {
"calcs": [
@@ -4226,7 +4225,7 @@ data:
"query": "SELECT $timeSeries as t, SUM(throughputFromSourceNode), sourcePodName\nFROM $table\nWHERE $timeFilter \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSeconds), 60) * 60) * 1000 as t, SUM(throughputFromSourceNode), sourcePodName\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642532448) AND flowEndSeconds <= toDateTime(1642534248) \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourcePodName, '->', destinationServicePortName) as pair, SUM(throughput) as Pod\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationServicePortName != ''\nAND $__timeFilter(flowEndSeconds)\nGROUP BY time, pair\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourcePodName, '->', destinationServicePortName) as pair, AVG(throughput)\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationServicePortName != ''\nAND $__timeFilter(flowEndSeconds)\nGROUP BY time, pair\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -4320,7 +4319,7 @@ data:
"y": 18
},
"id": 19,
- "interval": "60s",
+ "interval": "1s",
"options": {
"legend": {
"calcs": [
@@ -4354,7 +4353,7 @@ data:
"query": "SELECT $timeSeries as t, SUM(throughputFromSourceNode), sourcePodName\nFROM $table\nWHERE $timeFilter \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSeconds), 60) * 60) * 1000 as t, SUM(throughputFromSourceNode), sourcePodName\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642532448) AND flowEndSeconds <= toDateTime(1642534248) \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourcePodName, '->', destinationServicePortName) as pair, SUM(reverseThroughput) as Pod\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationServicePortName != ''\nAND $__timeFilter(time)\nGROUP BY time, pair\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourcePodName, '->', destinationServicePortName) as pair, AVG(reverseThroughput)\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationServicePortName != ''\nAND $__timeFilter(time)\nGROUP BY time, pair\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -4482,7 +4481,7 @@ data:
"query": "SELECT $timeSeries as t, SUM(throughputFromSourceNode), sourcePodName\nFROM $table\nWHERE $timeFilter \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSeconds), 60) * 60) * 1000 as t, SUM(throughputFromSourceNode), sourcePodName\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642532448) AND flowEndSeconds <= toDateTime(1642534248) \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSecondsFromSourceNode) as time, sourcePodName, SUM(throughputFromSourceNode) as Pod\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationServicePortName != ''\nAND $__timeFilter(time)\nGROUP BY time, sourcePodName\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSecondsFromSourceNode) as time, sourcePodName, SUM(throughputFromSourceNode) as Pod\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationServicePortName != ''\nAND $__timeFilter(time)\nGROUP BY time, sourcePodName\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -4610,7 +4609,7 @@ data:
"query": "SELECT $timeSeries as t, SUM(throughputFromSourceNode), sourcePodName\nFROM $table\nWHERE $timeFilter \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSeconds), 60) * 60) * 1000 as t, SUM(throughputFromSourceNode), sourcePodName\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642532448) AND flowEndSeconds <= toDateTime(1642534248) \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSecondsFromDestinationNode) as time, destinationServicePortName, SUM(throughputFromDestinationNode) as Service\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationServicePortName != ''\nAND $__timeFilter(time)\nGROUP BY time, destinationServicePortName\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSecondsFromDestinationNode) as time, destinationServicePortName, SUM(throughputFromDestinationNode) as Service\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationServicePortName != ''\nAND $__timeFilter(time)\nGROUP BY time, destinationServicePortName\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -4676,12 +4675,12 @@ data:
"timezone": "",
"title": "pod_to_service_dashboard",
"uid": "LGdxbW17z",
- "version": 8,
+ "version": 5,
"weekStart": ""
}
kind: ConfigMap
metadata:
- name: grafana-dashboard-config-gkkgc9d727
+ name: grafana-dashboard-config-gb25bt99t9
namespace: flow-visibility
---
apiVersion: v1
@@ -4881,7 +4880,7 @@ spec:
name: grafana-dashboard-provider-m7d5kfmmc6
name: grafana-dashboard-provider
- configMap:
- name: grafana-dashboard-config-gkkgc9d727
+ name: grafana-dashboard-config-gb25bt99t9
name: grafana-dashboard-config
---
apiVersion: clickhouse.altinity.com/v1
@@ -4934,12 +4933,14 @@ spec:
value: default.flows
- name: MV_NAMES
value: default.flows_pod_view default.flows_node_view default.flows_policy_view
+ - name: STORAGE_SIZE
+ value: 8Gi
image: projects.registry.vmware.com/antrea/flow-visibility-clickhouse-monitor:latest
imagePullPolicy: IfNotPresent
name: clickhouse-monitor
volumes:
- configMap:
- name: clickhouse-mounted-configmap-dkbmg82ctg
+ name: clickhouse-mounted-configmap-58fkkt9b56
name: clickhouse-configmap-volume
- emptyDir:
medium: Memory
diff --git a/build/yamls/flow-visibility/base/clickhouse.yml b/build/yamls/flow-visibility/base/clickhouse.yml
index 18fe72ee747..cfe35293604 100644
--- a/build/yamls/flow-visibility/base/clickhouse.yml
+++ b/build/yamls/flow-visibility/base/clickhouse.yml
@@ -45,32 +45,7 @@ spec:
volumeMounts:
- name: clickhouse-configmap-volume
mountPath: /docker-entrypoint-initdb.d
- - name: clickhouse-storage-volume
- mountPath: /var/lib/clickhouse
- - name: clickhouse-monitor
- image: flow-visibility-clickhouse-monitor
- env:
- - name: CLICKHOUSE_USERNAME
- valueFrom:
- secretKeyRef:
- name: clickhouse-secret
- key: username
- - name: CLICKHOUSE_PASSWORD
- valueFrom:
- secretKeyRef:
- name: clickhouse-secret
- key: password
- - name: DB_URL
- value: "tcp://localhost:9000"
- - name: TABLE_NAME
- value: "default.flows"
- - name: MV_NAMES
- value: "default.flows_pod_view default.flows_node_view default.flows_policy_view"
volumes:
- name: clickhouse-configmap-volume
configMap:
name: $(CLICKHOUSE_CONFIG_MAP_NAME)
- - name: clickhouse-storage-volume
- emptyDir:
- medium: Memory
- sizeLimit: 8Gi
diff --git a/build/yamls/flow-visibility/base/kustomization-e2e.yml b/build/yamls/flow-visibility/base/kustomization-e2e.yml
new file mode 100644
index 00000000000..2511fbc288b
--- /dev/null
+++ b/build/yamls/flow-visibility/base/kustomization-e2e.yml
@@ -0,0 +1,26 @@
+apiVersion: kustomize.config.k8s.io/v1beta1
+kind: Kustomization
+namespace: flow-visibility
+
+resources:
+ - clickhouse.yml
+
+configMapGenerator:
+ - name: clickhouse-mounted-configmap
+ namespace: flow-visibility
+ files:
+ - provisioning/datasources/create_table.sh
+
+# CLICKHOUSE_CONFIG_MAP_NAME exports the value in `metadata.name` from `ConfigMap` named `clickhouse-mounted-configmap`,
+# which is used for inserting the value to a CRD for an object of kind `ClickHouseInstallation`
+vars:
+ - name: CLICKHOUSE_CONFIG_MAP_NAME
+ objref:
+ kind: ConfigMap
+ name: clickhouse-mounted-configmap
+ apiVersion: v1
+ fieldref:
+ fieldpath: metadata.name
+
+configurations:
+ - kustomize-config.yml
diff --git a/build/yamls/flow-visibility/base/provisioning/dashboards/flow_records_dashboard.json b/build/yamls/flow-visibility/base/provisioning/dashboards/flow_records_dashboard.json
index ef012033b6a..97afb0a1b6f 100644
--- a/build/yamls/flow-visibility/base/provisioning/dashboards/flow_records_dashboard.json
+++ b/build/yamls/flow-visibility/base/provisioning/dashboards/flow_records_dashboard.json
@@ -21,8 +21,8 @@
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
- "id": 2,
- "iteration": 1644612871636,
+ "id": 1,
+ "iteration": 1652994218341,
"links": [],
"liveNow": false,
"panels": [
@@ -896,7 +896,7 @@
"query": "SELECT\n $timeSeries as t,\n *\nFROM $table\n\nWHERE $timeFilter\n\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT\n (intDiv(toUInt32(flowEndSeconds), 1) * 1) * 1000 as t,\n *\nFROM default.flows\n\nWHERE flowEndSeconds >= toDateTime(1642715797) AND flowEndSeconds <= toDateTime(1642716697)\n\nORDER BY t",
- "rawSql": "SELECT * \nFROM flows\nWHERE $__timeFilter(flowEndSeconds)",
+ "rawSql": "SELECT * \nFROM flows\nWHERE $__timeFilter(flowEndSeconds)\nORDER BY flowEndSeconds DESC\nLIMIT 10000",
"refId": "A",
"round": "0s",
"skip_comments": true,
diff --git a/build/yamls/flow-visibility/base/provisioning/dashboards/networkpolicy_allow_dashboard.json b/build/yamls/flow-visibility/base/provisioning/dashboards/networkpolicy_allow_dashboard.json
index f37d8de295b..c63ee1d4bd1 100644
--- a/build/yamls/flow-visibility/base/provisioning/dashboards/networkpolicy_allow_dashboard.json
+++ b/build/yamls/flow-visibility/base/provisioning/dashboards/networkpolicy_allow_dashboard.json
@@ -21,8 +21,8 @@
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
- "id": 5,
- "iteration": 1644982999763,
+ "id": 2,
+ "iteration": 1653420082463,
"links": [],
"liveNow": false,
"panels": [
@@ -99,7 +99,7 @@
"query": "SELECT SUM(octetDeltaCount), (egressNetworkPolicyName, ingressNetworkPolicyName) AS pair\nFROM $table\nWHERE $timeFilter\nAND (egressNetworkPolicyRuleAction == 1 OR ingressNetworkPolicyRuleAction == 1)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair\n",
"queryType": "sql",
"rawQuery": "SELECT SUM(octetDeltaCount), (egressNetworkPolicyName, ingressNetworkPolicyName) AS pair\nFROM default.flows_policy_view\nWHERE flowEndSeconds >= toDateTime(1642198255) AND flowEndSeconds <= toDateTime(1642200055)\nAND (egressNetworkPolicyRuleAction == 1 OR ingressNetworkPolicyRuleAction == 1)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair",
- "rawSql": "select SUM(octetDeltaCount) as bytes, egressNetworkPolicyName as source, ingressNetworkPolicyName as destination, ingressNetworkPolicyName as destinationIP\nFrom flows_policy_view\nWHERE $__timeFilter(flowEndSeconds) \nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator') \nAND (egressNetworkPolicyRuleAction == 1 OR ingressNetworkPolicyRuleAction == 1)\nGROUP BY source, destination\nHAVING bytes != 0",
+ "rawSql": "select SUM(octetDeltaCount) as bytes, egressNetworkPolicyName as source, ingressNetworkPolicyName as destination, ingressNetworkPolicyName as destinationIP\nFrom flows_policy_view\nWHERE $__timeFilter(flowEndSeconds) \nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator') \nAND (egressNetworkPolicyRuleAction == 1 OR ingressNetworkPolicyRuleAction == 1)\nGROUP BY source, destination\nHAVING bytes != 0\nORDER BY bytes DESC\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -148,7 +148,7 @@
"query": "SELECT SUM(reverseOctetDeltaCount), (egressNetworkPolicyName, ingressNetworkPolicyName) AS pair\nFROM $table\nWHERE $timeFilter\nAND (egressNetworkPolicyRuleAction == 1 OR ingressNetworkPolicyRuleAction == 1)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair\n",
"queryType": "randomWalk",
"rawQuery": "SELECT SUM(reverseOctetDeltaCount), (egressNetworkPolicyName, ingressNetworkPolicyName) AS pair\nFROM default.flows_policy_view\nWHERE flowEndSeconds >= toDateTime(1642198301) AND flowEndSeconds <= toDateTime(1642200101)\nAND (egressNetworkPolicyRuleAction == 1 OR ingressNetworkPolicyRuleAction == 1)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair",
- "rawSql": "select SUM(reverseOctetDeltaCount) as bytes, egressNetworkPolicyName as source, ingressNetworkPolicyName as destination, ingressNetworkPolicyName as destinationIP\nFrom flows_policy_view\nWHERE $__timeFilter(flowEndSeconds)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND (egressNetworkPolicyRuleAction == 1 OR ingressNetworkPolicyRuleAction == 1)\nGROUP BY source, destination\nHAVING bytes != 0",
+ "rawSql": "select SUM(reverseOctetDeltaCount) as bytes, egressNetworkPolicyName as source, ingressNetworkPolicyName as destination, ingressNetworkPolicyName as destinationIP\nFrom flows_policy_view\nWHERE $__timeFilter(flowEndSeconds)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND (egressNetworkPolicyRuleAction == 1 OR ingressNetworkPolicyRuleAction == 1)\nGROUP BY source, destination\nHAVING bytes != 0\nORDER BY bytes DESC\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -257,7 +257,7 @@
"query": "SELECT $timeSeries as t, SUM(throughputFromSourceNode), sourcePodName\nFROM $table\nWHERE $timeFilter \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSeconds), 60) * 60) * 1000 as t, SUM(throughputFromSourceNode), sourcePodName\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642532448) AND flowEndSeconds <= toDateTime(1642534248) \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(egressNetworkPolicyName, '->', ingressNetworkPolicyName) as pair, SUM(throughput)\nFROM flows_policy_view\nWHERE $__timeFilter(flowEndSeconds) \nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator') \nAND (egressNetworkPolicyRuleAction == 1 OR ingressNetworkPolicyRuleAction == 1)\nGROUP BY time, pair\nHAVING SUM(throughput) != 0\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(egressNetworkPolicyName, '->', ingressNetworkPolicyName) as pair, SUM(throughput)\nFROM flows_policy_view\nWHERE $__timeFilter(flowEndSeconds) \nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator') \nAND (egressNetworkPolicyRuleAction == 1 OR ingressNetworkPolicyRuleAction == 1)\nGROUP BY time, pair\nHAVING SUM(throughput) != 0\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -385,7 +385,7 @@
"query": "SELECT $timeSeries as t, SUM(throughputFromSourceNode), sourcePodName\nFROM $table\nWHERE $timeFilter \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSeconds), 60) * 60) * 1000 as t, SUM(throughputFromSourceNode), sourcePodName\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642532448) AND flowEndSeconds <= toDateTime(1642534248) \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(egressNetworkPolicyName, '->', ingressNetworkPolicyName) as pair, SUM(reverseThroughput)\nFROM flows_policy_view\nWHERE $__timeFilter(time)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND (egressNetworkPolicyRuleAction == 1 OR ingressNetworkPolicyRuleAction == 1)\nGROUP BY time, pair\nHAVING SUM(reverseThroughput) != 0\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(egressNetworkPolicyName, '->', ingressNetworkPolicyName) as pair, SUM(reverseThroughput)\nFROM flows_policy_view\nWHERE $__timeFilter(time)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND (egressNetworkPolicyRuleAction == 1 OR ingressNetworkPolicyRuleAction == 1)\nGROUP BY time, pair\nHAVING SUM(reverseThroughput) != 0\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -513,7 +513,7 @@
"query": "SELECT $timeSeries as t, SUM(throughputFromSourceNode), sourcePodName\nFROM $table\nWHERE $timeFilter \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSeconds), 60) * 60) * 1000 as t, SUM(throughputFromSourceNode), sourcePodName\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642532448) AND flowEndSeconds <= toDateTime(1642534248) \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, egressNetworkPolicyName, SUM(throughput)\nFROM flows_policy_view\nWHERE sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND egressNetworkPolicyName != ''\nAND egressNetworkPolicyRuleAction == 1\nAND $__timeFilter(time)\nGROUP BY time, egressNetworkPolicyName\nHAVING SUM(throughput) != 0\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, egressNetworkPolicyName, SUM(throughput)\nFROM flows_policy_view\nWHERE sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND egressNetworkPolicyName != ''\nAND egressNetworkPolicyRuleAction == 1\nAND $__timeFilter(time)\nGROUP BY time, egressNetworkPolicyName\nHAVING SUM(throughput) != 0\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -588,6 +588,7 @@
"lastNotNull"
],
"fields": "",
+ "limit": 25,
"values": true
},
"tooltip": {
@@ -601,7 +602,7 @@
"uid": "PDEE91DDB90597936"
},
"format": 1,
- "rawSql": "SELECT SUM(octetDeltaCount), egressNetworkPolicyName\nFROM flows_policy_view\nWHERE sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND egressNetworkPolicyName != ''\nAND egressNetworkPolicyRuleAction == 1\nAND $__timeFilter(flowEndSeconds)\nGROUP BY egressNetworkPolicyName\nHAVING SUM(octetDeltaCount) != 0",
+ "rawSql": "SELECT SUM(octetDeltaCount) as bytes, egressNetworkPolicyName\nFROM flows_policy_view\nWHERE sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND egressNetworkPolicyName != ''\nAND egressNetworkPolicyRuleAction == 1\nAND $__timeFilter(flowEndSeconds)\nGROUP BY egressNetworkPolicyName\nHAVING SUM(octetDeltaCount) != 0\nORDER BY bytes DESC",
"refId": "A"
}
],
@@ -706,7 +707,7 @@
"query": "SELECT $timeSeries as t, SUM(throughputFromSourceNode), sourcePodName\nFROM $table\nWHERE $timeFilter \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSeconds), 60) * 60) * 1000 as t, SUM(throughputFromSourceNode), sourcePodName\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642532448) AND flowEndSeconds <= toDateTime(1642534248) \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, ingressNetworkPolicyName, SUM(throughput)\nFROM flows_policy_view\nWHERE sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND ingressNetworkPolicyName != ''\nAND ingressNetworkPolicyRuleAction == 1\nAND $__timeFilter(time)\nGROUP BY time, ingressNetworkPolicyName\nHAVING SUM(throughput) != 0\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, ingressNetworkPolicyName, SUM(throughput)\nFROM flows_policy_view\nWHERE sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND ingressNetworkPolicyName != ''\nAND ingressNetworkPolicyRuleAction == 1\nAND $__timeFilter(time)\nGROUP BY time, ingressNetworkPolicyName\nHAVING SUM(throughput) != 0\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -781,6 +782,7 @@
"lastNotNull"
],
"fields": "",
+ "limit": 25,
"values": true
},
"tooltip": {
@@ -794,7 +796,7 @@
"uid": "PDEE91DDB90597936"
},
"format": 1,
- "rawSql": "SELECT SUM(octetDeltaCount), ingressNetworkPolicyName\nFROM flows_policy_view\nWHERE sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND ingressNetworkPolicyName != ''\nAND ingressNetworkPolicyRuleAction == 1\nAND $__timeFilter(flowEndSeconds)\nGROUP BY ingressNetworkPolicyName\nHAVING SUM(octetDeltaCount) != 0",
+ "rawSql": "SELECT SUM(octetDeltaCount) as bytes, ingressNetworkPolicyName\nFROM flows_policy_view\nWHERE sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND ingressNetworkPolicyName != ''\nAND ingressNetworkPolicyRuleAction == 1\nAND $__timeFilter(flowEndSeconds)\nGROUP BY ingressNetworkPolicyName\nHAVING SUM(octetDeltaCount) != 0\nORDER BY bytes DESC",
"refId": "A"
}
],
diff --git a/build/yamls/flow-visibility/base/provisioning/dashboards/node_to_node_dashboard.json b/build/yamls/flow-visibility/base/provisioning/dashboards/node_to_node_dashboard.json
index 1f673af6ce2..33bdbf1f221 100644
--- a/build/yamls/flow-visibility/base/provisioning/dashboards/node_to_node_dashboard.json
+++ b/build/yamls/flow-visibility/base/provisioning/dashboards/node_to_node_dashboard.json
@@ -21,8 +21,8 @@
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
- "id": 4,
- "iteration": 1644612915701,
+ "id": 3,
+ "iteration": 1653419912594,
"links": [],
"liveNow": false,
"panels": [
@@ -64,7 +64,7 @@
"query": "SELECT SUM(octetDeltaCount), (sourceNodeName, destinationNodeName) as pair\nFROM $table\nWHERE $timeFilter\nAND sourceNodeName != ''\nAND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair\n",
"queryType": "sql",
"rawQuery": false,
- "rawSql": "select SUM(octetDeltaCount) as bytes, sourceNodeName as source, destinationNodeName as destination\nFrom flows_node_view\nWHERE source != '' AND destination != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination",
+ "rawSql": "select SUM(octetDeltaCount) as bytes, sourceNodeName as source, destinationNodeName as destination\nFrom flows_node_view\nWHERE source != '' AND destination != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination\nORDER BY bytes DESC\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -120,7 +120,7 @@
"query": "SELECT SUM(reverseOctetDeltaCount), (sourceNodeName, destinationNodeName) as pair\nFROM $table\nWHERE $timeFilter\nAND sourceNodeName != ''\nAND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair\n",
"queryType": "randomWalk",
"rawQuery": false,
- "rawSql": "select SUM(reverseOctetDeltaCount) as bytes, sourceNodeName as source, destinationNodeName as destination\nFrom flows_node_view\nWHERE source != '' AND destination != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination",
+ "rawSql": "select SUM(reverseOctetDeltaCount) as bytes, sourceNodeName as source, destinationNodeName as destination\nFrom flows_node_view\nWHERE source != '' AND destination != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination\nORDER BY bytes DESC\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -229,7 +229,7 @@
"query": "SELECT $timeSeries as t, SUM(throughputFromDestinationNode), destinationNodeName\nFROM $table\nWHERE $timeFilter\nAND sourceNodeName != ''\nAND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY destinationNodeName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSecondsFromDestinationNode), 60) * 60) * 1000 as t, SUM(throughputFromDestinationNode), destinationNodeName\nFROM default.flows_node_view\nWHERE flowEndSecondsFromDestinationNode >= toDateTime(1642533454) AND flowEndSecondsFromDestinationNode <= toDateTime(1642535254)\nAND sourceNodeName != ''\nAND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY destinationNodeName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourceNodeName, '->', destinationNodeName) as pair, SUM(throughput) as Node\nFROM flows_node_view\nWHERE sourceNodeName != '' AND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, pair\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourceNodeName, '->', destinationNodeName) as pair, SUM(throughput) as Node\nFROM flows_node_view\nWHERE sourceNodeName != '' AND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, pair\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -357,7 +357,7 @@
"query": "SELECT $timeSeries as t, SUM(throughputFromDestinationNode), destinationNodeName\nFROM $table\nWHERE $timeFilter\nAND sourceNodeName != ''\nAND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY destinationNodeName, t\nORDER BY t\n",
"queryType": "randomWalk",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSecondsFromDestinationNode), 60) * 60) * 1000 as t, SUM(throughputFromDestinationNode), destinationNodeName\nFROM default.flows_node_view\nWHERE flowEndSecondsFromDestinationNode >= toDateTime(1642533454) AND flowEndSecondsFromDestinationNode <= toDateTime(1642535254)\nAND sourceNodeName != ''\nAND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY destinationNodeName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourceNodeName, '->', destinationNodeName) as pair, SUM(reverseThroughput) as Node\nFROM flows_node_view\nWHERE sourceNodeName != '' AND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, pair\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourceNodeName, '->', destinationNodeName) as pair, SUM(reverseThroughput) as Node\nFROM flows_node_view\nWHERE sourceNodeName != '' AND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, pair\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -485,7 +485,7 @@
"query": "SELECT $timeSeries as t, SUM(throughputFromDestinationNode), destinationNodeName\nFROM $table\nWHERE $timeFilter\nAND sourceNodeName != ''\nAND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY destinationNodeName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSecondsFromDestinationNode), 60) * 60) * 1000 as t, SUM(throughputFromDestinationNode), destinationNodeName\nFROM default.flows_node_view\nWHERE flowEndSecondsFromDestinationNode >= toDateTime(1642533454) AND flowEndSecondsFromDestinationNode <= toDateTime(1642535254)\nAND sourceNodeName != ''\nAND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY destinationNodeName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSecondsFromSourceNode) as time, sourceNodeName, SUM(throughputFromSourceNode)\nFROM flows_node_view\nWHERE sourceNodeName != '' \nAND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, sourceNodeName\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSecondsFromSourceNode) as time, sourceNodeName, SUM(throughputFromSourceNode)\nFROM flows_node_view\nWHERE sourceNodeName != '' \nAND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, sourceNodeName\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -562,6 +562,7 @@
"lastNotNull"
],
"fields": "",
+ "limit": 25,
"values": true
},
"tooltip": {
@@ -575,7 +576,7 @@
"uid": "PDEE91DDB90597936"
},
"format": 1,
- "rawSql": "SELECT SUM(octetDeltaCount), sourceNodeName\nFROM flows_node_view\nWHERE sourceNodeName != '' AND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY sourceNodeName",
+ "rawSql": "SELECT SUM(octetDeltaCount) as bytes, sourceNodeName\nFROM flows_node_view\nWHERE sourceNodeName != '' AND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY sourceNodeName\nORDER BY bytes DESC",
"refId": "A"
}
],
@@ -680,7 +681,7 @@
"query": "SELECT $timeSeries as t, SUM(throughputFromDestinationNode), destinationNodeName\nFROM $table\nWHERE $timeFilter\nAND sourceNodeName != ''\nAND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY destinationNodeName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSecondsFromDestinationNode), 60) * 60) * 1000 as t, SUM(throughputFromDestinationNode), destinationNodeName\nFROM default.flows_node_view\nWHERE flowEndSecondsFromDestinationNode >= toDateTime(1642533454) AND flowEndSecondsFromDestinationNode <= toDateTime(1642535254)\nAND sourceNodeName != ''\nAND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY destinationNodeName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSecondsFromDestinationNode) as time, destinationNodeName, SUM(throughputFromDestinationNode)\nFROM flows_node_view\nWHERE sourceNodeName != '' AND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, destinationNodeName\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSecondsFromDestinationNode) as time, destinationNodeName, SUM(throughputFromDestinationNode)\nFROM flows_node_view\nWHERE sourceNodeName != '' AND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, destinationNodeName\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -755,6 +756,7 @@
"lastNotNull"
],
"fields": "",
+ "limit": 25,
"values": true
},
"tooltip": {
@@ -768,7 +770,7 @@
"uid": "PDEE91DDB90597936"
},
"format": 1,
- "rawSql": "SELECT SUM(octetDeltaCount), destinationNodeName\nFROM flows_node_view\nWHERE sourceNodeName != '' AND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY destinationNodeName",
+ "rawSql": "SELECT SUM(octetDeltaCount) as bytes, destinationNodeName\nFROM flows_node_view\nWHERE sourceNodeName != '' AND destinationNodeName != ''\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY destinationNodeName\nORDER BY bytes DESC",
"refId": "A"
}
],
@@ -811,6 +813,6 @@
"timezone": "",
"title": "node_to_node_dashboard",
"uid": "1F56RJh7z",
- "version": 10,
+ "version": 5,
"weekStart": ""
}
\ No newline at end of file
diff --git a/build/yamls/flow-visibility/base/provisioning/dashboards/pod_to_external_dashboard.json b/build/yamls/flow-visibility/base/provisioning/dashboards/pod_to_external_dashboard.json
index aba49c31421..3c8863d918b 100644
--- a/build/yamls/flow-visibility/base/provisioning/dashboards/pod_to_external_dashboard.json
+++ b/build/yamls/flow-visibility/base/provisioning/dashboards/pod_to_external_dashboard.json
@@ -21,8 +21,8 @@
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
- "id": 5,
- "iteration": 1644612843565,
+ "id": 4,
+ "iteration": 1653419876105,
"links": [],
"liveNow": false,
"panels": [
@@ -63,7 +63,7 @@
"query": "SELECT SUM(octetDeltaCount), (sourcePodName, destinationIP) AS pair\nFROM $table\nWHERE $timeFilter\nAND flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-aggregator', 'flow-visibility')\nGROUP BY pair\n",
"queryType": "randomWalk",
"rawQuery": "SELECT SUM(octetDeltaCount), (sourcePodName, destinationIP) AS pair\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642534343) AND flowEndSeconds <= toDateTime(1642536143)\nAND flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-aggregator', 'flow-visibility')\nGROUP BY pair",
- "rawSql": "select SUM(octetDeltaCount) as bytes, sourcePodName as source, destinationIP as destination\nFrom flows_pod_view\nWHERE flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination\nHAVING bytes != 0",
+ "rawSql": "select SUM(octetDeltaCount) as bytes, sourcePodName as source, destinationIP as destination\nFrom flows_pod_view\nWHERE flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination\nHAVING bytes != 0\nORDER BY bytes DESC\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -112,7 +112,7 @@
"query": "SELECT SUM(reverseOctetDeltaCount), (sourcePodName, destinationIP) AS pair\nFROM $table\nWHERE $timeFilter\nAND flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-aggregator', 'flow-visibility')\nGROUP BY pair\n",
"queryType": "randomWalk",
"rawQuery": "SELECT SUM(reverseOctetDeltaCount), (sourcePodName, destinationIP) AS pair\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642534382) AND flowEndSeconds <= toDateTime(1642536182)\nAND flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-aggregator', 'flow-visibility')\nGROUP BY pair",
- "rawSql": "select SUM(reverseOctetDeltaCount) as bytes, sourcePodName as source, destinationIP as destination\nFrom flows_pod_view\nWHERE flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination\nHAVING bytes != 0",
+ "rawSql": "select SUM(reverseOctetDeltaCount) as bytes, sourcePodName as source, destinationIP as destination\nFrom flows_pod_view\nWHERE flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination\nHAVING bytes != 0\nORDER BY bytes DESC\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -186,7 +186,7 @@
"y": 18
},
"id": 2,
- "interval": "60s",
+ "interval": "1s",
"options": {
"legend": {
"calcs": [
@@ -220,7 +220,7 @@
"query": "SELECT $timeSeries as t, SUM(octetDeltaCount), (sourcePodName, destinationIP) as pair\nFROM $table\nWHERE $timeFilter\nAND flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair,t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSeconds), 60) * 60) * 1000 as t, SUM(octetDeltaCount), (sourcePodName, destinationIP) as pair\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642534150) AND flowEndSeconds <= toDateTime(1642535950)\nAND flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair,t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourcePodName, '->', destinationIP) as pair, SUM(throughput)\nFROM flows_pod_view\nWHERE flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, pair\nHAVING SUM(throughput) != 0\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourcePodName, '->', destinationIP) as pair, AVG(throughput)\nFROM flows_pod_view\nWHERE flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, pair\nHAVING SUM(throughput) != 0\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -310,7 +310,7 @@
"y": 18
},
"id": 7,
- "interval": "60s",
+ "interval": "1s",
"options": {
"legend": {
"calcs": [
@@ -344,7 +344,7 @@
"query": "SELECT $timeSeries as t, SUM(reverseOctetDeltaCount), (sourcePodName, destinationIP) as pair\nFROM $table\nWHERE $timeFilter\nAND flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair, t\nORDER BY t",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSeconds), 60) * 60) * 1000 as t, SUM(reverseOctetDeltaCount), (sourcePodName, destinationIP) as pair\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642534246) AND flowEndSeconds <= toDateTime(1642536046)\nAND flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourcePodName, '->', destinationIP) as pair, SUM(reverseThroughput)\nFROM flows_pod_view\nWHERE flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, pair\nHAVING SUM(reverseThroughput) != 0\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourcePodName, '->', destinationIP) as pair, AVG(reverseThroughput)\nFROM flows_pod_view\nWHERE flowType == 3\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, pair\nHAVING SUM(reverseThroughput) != 0\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -410,6 +410,6 @@
"timezone": "",
"title": "pod_to_external_dashboard",
"uid": "K9SPrnJ7k",
- "version": 3,
+ "version": 5,
"weekStart": ""
}
\ No newline at end of file
diff --git a/build/yamls/flow-visibility/base/provisioning/dashboards/pod_to_pod_dashboard.json b/build/yamls/flow-visibility/base/provisioning/dashboards/pod_to_pod_dashboard.json
index fb72c30f08b..cc1ac1074a1 100644
--- a/build/yamls/flow-visibility/base/provisioning/dashboards/pod_to_pod_dashboard.json
+++ b/build/yamls/flow-visibility/base/provisioning/dashboards/pod_to_pod_dashboard.json
@@ -21,8 +21,8 @@
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
- "id": 1,
- "iteration": 1644971511247,
+ "id": 5,
+ "iteration": 1653419724493,
"links": [],
"liveNow": false,
"panels": [
@@ -63,7 +63,7 @@
"query": "SELECT SUM(octetDeltaCount), (sourcePodName, destinationPodName, destinationIP) AS pair\nFROM $table\nWHERE $timeFilter\nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair\n",
"queryType": "sql",
"rawQuery": "SELECT SUM(octetDeltaCount), (sourcePodName, destinationPodName, destinationIP) AS pair\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642531723) AND flowEndSeconds <= toDateTime(1642533523)\nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair",
- "rawSql": "select SUM(octetDeltaCount) as bytes, sourcePodName as source, destinationPodName as destination, destinationIP\nFrom flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination, destinationIP",
+ "rawSql": "select SUM(octetDeltaCount) as bytes, sourcePodName as source, destinationPodName as destination, destinationIP\nFrom flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination, destinationIP\nORDER BY bytes DESC\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -112,7 +112,7 @@
"query": "SELECT SUM(reverseOctetDeltaCount), (sourcePodName, destinationPodName, destinationIP) AS pair\nFROM $table\nWHERE $timeFilter\nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair\n",
"queryType": "randomWalk",
"rawQuery": "SELECT SUM(reverseOctetDeltaCount), (sourcePodName, destinationPodName, destinationIP) AS pair\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642531743) AND flowEndSeconds <= toDateTime(1642533543)\nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair",
- "rawSql": "select SUM(reverseOctetDeltaCount) as bytes, sourcePodName as source, destinationPodName as destination, destinationIP\nFrom flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination, destinationIP",
+ "rawSql": "select SUM(reverseOctetDeltaCount) as bytes, sourcePodName as source, destinationPodName as destination, destinationIP\nFrom flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination, destinationIP\nORDER BY bytes DESC\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -169,10 +169,6 @@
{
"color": "green",
"value": null
- },
- {
- "color": "red",
- "value": 80
}
]
},
@@ -187,7 +183,7 @@
"y": 18
},
"id": 21,
- "interval": "60s",
+ "interval": "1s",
"options": {
"legend": {
"calcs": [
@@ -221,7 +217,7 @@
"query": "SELECT $timeSeries as t, SUM(throughputFromSourceNode), sourcePodName\nFROM $table\nWHERE $timeFilter \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSeconds), 60) * 60) * 1000 as t, SUM(throughputFromSourceNode), sourcePodName\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642532448) AND flowEndSeconds <= toDateTime(1642534248) \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourcePodName, '->', destinationPodName) as pair, SUM(throughput)\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, pair\nHAVING SUM(throughput) > 0\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourcePodName, '->', destinationPodName) as pair, AVG(throughput)\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, pair\nHAVING SUM(throughput) > 0\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -315,7 +311,7 @@
"y": 18
},
"id": 22,
- "interval": "60s",
+ "interval": "1s",
"options": {
"legend": {
"calcs": [
@@ -349,7 +345,7 @@
"query": "SELECT $timeSeries as t, SUM(throughputFromSourceNode), sourcePodName\nFROM $table\nWHERE $timeFilter \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSeconds), 60) * 60) * 1000 as t, SUM(throughputFromSourceNode), sourcePodName\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642532448) AND flowEndSeconds <= toDateTime(1642534248) \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourcePodName, '->', destinationPodName) as pair, SUM(reverseThroughput)\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, pair\nHAVING SUM(reverseThroughput) > 0\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourcePodName, '->', destinationPodName) as pair, AVG(reverseThroughput)\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, pair\nHAVING SUM(reverseThroughput) > 0\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -425,10 +421,6 @@
{
"color": "green",
"value": null
- },
- {
- "color": "red",
- "value": 80
}
]
},
@@ -477,7 +469,7 @@
"query": "SELECT $timeSeries as t, SUM(throughputFromSourceNode), sourcePodName\nFROM $table\nWHERE $timeFilter \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSeconds), 60) * 60) * 1000 as t, SUM(throughputFromSourceNode), sourcePodName\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642532448) AND flowEndSeconds <= toDateTime(1642534248) \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSecondsFromSourceNode) as time, sourcePodName, SUM(throughputFromSourceNode)\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, sourcePodName\nHAVING SUM(throughputFromSourceNode) > 0\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSecondsFromSourceNode) as time, sourcePodName, SUM(throughputFromSourceNode)\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, sourcePodName\nHAVING SUM(throughputFromSourceNode) > 0\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -552,6 +544,7 @@
"lastNotNull"
],
"fields": "",
+ "limit": 25,
"values": true
},
"tooltip": {
@@ -566,7 +559,7 @@
},
"format": 1,
"queryType": "sql",
- "rawSql": "select SUM(octetDeltaCount) as bytes, sourcePodNamespace\nFrom flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY sourcePodNamespace\nHAVING bytes > 0",
+ "rawSql": "select SUM(octetDeltaCount) as bytes, sourcePodNamespace\nFrom flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY sourcePodNamespace\nHAVING bytes > 0\nORDER BY bytes DESC",
"refId": "A"
}
],
@@ -671,7 +664,7 @@
"query": "SELECT $timeSeries as t, SUM(throughputFromDestinationNode), destinationPodName\nFROM $table\nWHERE $timeFilter \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY destinationPodName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSecondsFromDestinationNode), 60) * 60) * 1000 as t, SUM(throughputFromDestinationNode), destinationPodName\nFROM default.flows_pod_view\nWHERE flowEndSecondsFromDestinationNode >= toDateTime(1642532702) AND flowEndSecondsFromDestinationNode <= toDateTime(1642534502) \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY destinationPodName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSecondsFromDestinationNode) as time, destinationPodName, SUM(throughputFromDestinationNode)\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, destinationPodName\nHAVING SUM(throughputFromDestinationNode) > 0\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSecondsFromDestinationNode) as time, destinationPodName, SUM(throughputFromDestinationNode)\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(time)\nGROUP BY time, destinationPodName\nHAVING SUM(throughputFromDestinationNode) > 0\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -759,6 +752,7 @@
"lastNotNull"
],
"fields": "",
+ "limit": 25,
"values": true
},
"tooltip": {
@@ -772,7 +766,7 @@
"uid": "PDEE91DDB90597936"
},
"format": 1,
- "rawSql": "select SUM(octetDeltaCount) as bytes, destinationPodNamespace\nFrom flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY destinationPodNamespace",
+ "rawSql": "select SUM(octetDeltaCount) as bytes, destinationPodNamespace\nFrom flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND $__timeFilter(flowEndSeconds)\nGROUP BY destinationPodNamespace\nORDER BY bytes DESC",
"refId": "A"
}
],
@@ -815,6 +809,6 @@
"timezone": "",
"title": "pod_to_pod_dashboard",
"uid": "Yxn0Ghh7k",
- "version": 9,
+ "version": 5,
"weekStart": ""
}
\ No newline at end of file
diff --git a/build/yamls/flow-visibility/base/provisioning/dashboards/pod_to_service_dashboard.json b/build/yamls/flow-visibility/base/provisioning/dashboards/pod_to_service_dashboard.json
index 6489542c76f..69e8bbd9e38 100644
--- a/build/yamls/flow-visibility/base/provisioning/dashboards/pod_to_service_dashboard.json
+++ b/build/yamls/flow-visibility/base/provisioning/dashboards/pod_to_service_dashboard.json
@@ -21,8 +21,8 @@
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
- "id": 1,
- "iteration": 1644612951629,
+ "id": 6,
+ "iteration": 1653420001321,
"links": [],
"liveNow": false,
"panels": [
@@ -63,7 +63,7 @@
"query": "SELECT SUM(octetDeltaCount), (sourcePodName, destinationServicePortName) AS pair\nFROM $table\nWHERE $timeFilter\nAND destinationServicePortName != ''\nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair\n",
"queryType": "randomWalk",
"rawQuery": "SELECT SUM(octetDeltaCount), (sourcePodName, destinationServicePortName) AS pair\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642193285) AND flowEndSeconds <= toDateTime(1642195085)\nAND destinationServicePortName != ''\nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair",
- "rawSql": "select SUM(octetDeltaCount) as bytes, sourcePodName as source, destinationServicePortName as destination\nFrom flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationServicePortName != ''\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination",
+ "rawSql": "select SUM(octetDeltaCount) as bytes, sourcePodName as source, destinationServicePortName as destination\nFrom flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationServicePortName != ''\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination\nORDER BY bytes DESC\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -112,7 +112,7 @@
"query": "SELECT SUM(reverseOctetDeltaCount), (sourcePodName, destinationServicePortName) AS pair\nFROM $table\nWHERE $timeFilter\nAND destinationServicePortName != ''\nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair\n",
"queryType": "randomWalk",
"rawQuery": "SELECT SUM(reverseOctetDeltaCount), (sourcePodName, destinationServicePortName) AS pair\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642193431) AND flowEndSeconds <= toDateTime(1642195231)\nAND destinationServicePortName != ''\nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY pair",
- "rawSql": "select SUM(reverseOctetDeltaCount) as bytes, sourcePodName as source, destinationServicePortName as destination\nFrom flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationServicePortName != ''\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination",
+ "rawSql": "select SUM(reverseOctetDeltaCount) as bytes, sourcePodName as source, destinationServicePortName as destination\nFrom flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationServicePortName != ''\nAND $__timeFilter(flowEndSeconds)\nGROUP BY source, destination\nORDER BY bytes DESC\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -187,7 +187,7 @@
"y": 18
},
"id": 18,
- "interval": "60s",
+ "interval": "1s",
"options": {
"legend": {
"calcs": [
@@ -221,7 +221,7 @@
"query": "SELECT $timeSeries as t, SUM(throughputFromSourceNode), sourcePodName\nFROM $table\nWHERE $timeFilter \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSeconds), 60) * 60) * 1000 as t, SUM(throughputFromSourceNode), sourcePodName\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642532448) AND flowEndSeconds <= toDateTime(1642534248) \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourcePodName, '->', destinationServicePortName) as pair, SUM(throughput) as Pod\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationServicePortName != ''\nAND $__timeFilter(flowEndSeconds)\nGROUP BY time, pair\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourcePodName, '->', destinationServicePortName) as pair, AVG(throughput)\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationServicePortName != ''\nAND $__timeFilter(flowEndSeconds)\nGROUP BY time, pair\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -315,7 +315,7 @@
"y": 18
},
"id": 19,
- "interval": "60s",
+ "interval": "1s",
"options": {
"legend": {
"calcs": [
@@ -349,7 +349,7 @@
"query": "SELECT $timeSeries as t, SUM(throughputFromSourceNode), sourcePodName\nFROM $table\nWHERE $timeFilter \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSeconds), 60) * 60) * 1000 as t, SUM(throughputFromSourceNode), sourcePodName\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642532448) AND flowEndSeconds <= toDateTime(1642534248) \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourcePodName, '->', destinationServicePortName) as pair, SUM(reverseThroughput) as Pod\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationServicePortName != ''\nAND $__timeFilter(time)\nGROUP BY time, pair\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSeconds) as time, CONCAT(sourcePodName, '->', destinationServicePortName) as pair, AVG(reverseThroughput)\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationServicePortName != ''\nAND $__timeFilter(time)\nGROUP BY time, pair\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -477,7 +477,7 @@
"query": "SELECT $timeSeries as t, SUM(throughputFromSourceNode), sourcePodName\nFROM $table\nWHERE $timeFilter \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSeconds), 60) * 60) * 1000 as t, SUM(throughputFromSourceNode), sourcePodName\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642532448) AND flowEndSeconds <= toDateTime(1642534248) \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSecondsFromSourceNode) as time, sourcePodName, SUM(throughputFromSourceNode) as Pod\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationServicePortName != ''\nAND $__timeFilter(time)\nGROUP BY time, sourcePodName\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSecondsFromSourceNode) as time, sourcePodName, SUM(throughputFromSourceNode) as Pod\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationServicePortName != ''\nAND $__timeFilter(time)\nGROUP BY time, sourcePodName\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -605,7 +605,7 @@
"query": "SELECT $timeSeries as t, SUM(throughputFromSourceNode), sourcePodName\nFROM $table\nWHERE $timeFilter \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t\n",
"queryType": "sql",
"rawQuery": "SELECT (intDiv(toUInt32(flowEndSeconds), 60) * 60) * 1000 as t, SUM(throughputFromSourceNode), sourcePodName\nFROM default.flows_pod_view\nWHERE flowEndSeconds >= toDateTime(1642532448) AND flowEndSeconds <= toDateTime(1642534248) \nAND flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nGROUP BY sourcePodName, t\nORDER BY t",
- "rawSql": "SELECT $__timeInterval(flowEndSecondsFromDestinationNode) as time, destinationServicePortName, SUM(throughputFromDestinationNode) as Service\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationServicePortName != ''\nAND $__timeFilter(time)\nGROUP BY time, destinationServicePortName\nORDER BY time",
+ "rawSql": "SELECT $__timeInterval(flowEndSecondsFromDestinationNode) as time, destinationServicePortName, SUM(throughputFromDestinationNode) as Service\nFROM flows_pod_view\nWHERE flowType IN (1, 2)\nAND sourcePodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationPodNamespace NOT IN ('kube-system', 'flow-visibility', 'flow-aggregator')\nAND destinationServicePortName != ''\nAND $__timeFilter(time)\nGROUP BY time, destinationServicePortName\nORDER BY time\nLIMIT 50",
"refId": "A",
"round": "0s",
"skip_comments": true,
@@ -671,6 +671,6 @@
"timezone": "",
"title": "pod_to_service_dashboard",
"uid": "LGdxbW17z",
- "version": 8,
+ "version": 5,
"weekStart": ""
}
\ No newline at end of file
diff --git a/build/yamls/flow-visibility/base/provisioning/datasources/create_table.sh b/build/yamls/flow-visibility/base/provisioning/datasources/create_table.sh
index 9f135579460..423fa45d00d 100644
--- a/build/yamls/flow-visibility/base/provisioning/datasources/create_table.sh
+++ b/build/yamls/flow-visibility/base/provisioning/datasources/create_table.sh
@@ -72,7 +72,7 @@ clickhouse client -n -h 127.0.0.1 <<-EOSQL
TTL timeInserted + INTERVAL 1 HOUR
SETTINGS merge_with_ttl_timeout = 3600;
- CREATE MATERIALIZED VIEW flows_pod_view
+ CREATE MATERIALIZED VIEW IF NOT EXISTS flows_pod_view
ENGINE = SummingMergeTree
ORDER BY (
timeInserted,
@@ -121,7 +121,7 @@ clickhouse client -n -h 127.0.0.1 <<-EOSQL
sourcePodNamespace,
destinationPodNamespace;
- CREATE MATERIALIZED VIEW flows_node_view
+ CREATE MATERIALIZED VIEW IF NOT EXISTS flows_node_view
ENGINE = SummingMergeTree
ORDER BY (
timeInserted,
@@ -163,7 +163,7 @@ clickhouse client -n -h 127.0.0.1 <<-EOSQL
sourcePodNamespace,
destinationPodNamespace;
- CREATE MATERIALIZED VIEW flows_policy_view
+ CREATE MATERIALIZED VIEW IF NOT EXISTS flows_policy_view
ENGINE = SummingMergeTree
ORDER BY (
timeInserted,
diff --git a/build/yamls/flow-visibility/patches/chmonitor/chMonitor.yml b/build/yamls/flow-visibility/patches/chmonitor/chMonitor.yml
new file mode 100644
index 00000000000..68abcc0bb8a
--- /dev/null
+++ b/build/yamls/flow-visibility/patches/chmonitor/chMonitor.yml
@@ -0,0 +1,24 @@
+- op: add
+ path: /spec/templates/podTemplates/0/spec/containers/-
+ value:
+ name: clickhouse-monitor
+ image: flow-visibility-clickhouse-monitor
+ env:
+ - name: CLICKHOUSE_USERNAME
+ valueFrom:
+ secretKeyRef:
+ name: clickhouse-secret
+ key: username
+ - name: CLICKHOUSE_PASSWORD
+ valueFrom:
+ secretKeyRef:
+ name: clickhouse-secret
+ key: password
+ - name: DB_URL
+ value: "tcp://localhost:9000"
+ - name: TABLE_NAME
+ value: "default.flows"
+ - name: MV_NAMES
+ value: "default.flows_pod_view default.flows_node_view default.flows_policy_view"
+ - name: STORAGE_SIZE
+ value: STORAGE_SIZE_VALUE
diff --git a/build/yamls/flow-visibility/patches/e2e/imagePullPolicyClickhouse.yml b/build/yamls/flow-visibility/patches/e2e/imagePullPolicyClickhouse.yml
new file mode 100644
index 00000000000..b49e451783f
--- /dev/null
+++ b/build/yamls/flow-visibility/patches/e2e/imagePullPolicyClickhouse.yml
@@ -0,0 +1,3 @@
+- op: add
+ path: /spec/templates/podTemplates/0/spec/containers/0/imagePullPolicy
+ value: IfNotPresent
diff --git a/build/yamls/flow-visibility/patches/pv/createLocalPv.yml b/build/yamls/flow-visibility/patches/pv/createLocalPv.yml
new file mode 100644
index 00000000000..bda1ac4e3e2
--- /dev/null
+++ b/build/yamls/flow-visibility/patches/pv/createLocalPv.yml
@@ -0,0 +1,28 @@
+apiVersion: storage.k8s.io/v1
+kind: StorageClass
+metadata:
+ name: clickhouse-storage
+provisioner: kubernetes.io/no-provisioner
+volumeBindingMode: WaitForFirstConsumer
+reclaimPolicy: Retain
+allowVolumeExpansion: True
+---
+apiVersion: v1
+kind: PersistentVolume
+metadata:
+ name: clickhouse-pv
+spec:
+ storageClassName: clickhouse-storage
+ capacity:
+ storage: STORAGE_SIZE
+ accessModes:
+ - ReadWriteOnce
+ volumeMode: Filesystem
+ local:
+ path: LOCAL_PATH
+ nodeAffinity:
+ required:
+ nodeSelectorTerms:
+ - matchExpressions:
+ - key: antrea.io/clickhouse-data-node
+ operator: Exists
diff --git a/build/yamls/flow-visibility/patches/pv/createNfsPv.yml b/build/yamls/flow-visibility/patches/pv/createNfsPv.yml
new file mode 100644
index 00000000000..2cef3949aae
--- /dev/null
+++ b/build/yamls/flow-visibility/patches/pv/createNfsPv.yml
@@ -0,0 +1,23 @@
+apiVersion: storage.k8s.io/v1
+kind: StorageClass
+metadata:
+ name: clickhouse-storage
+provisioner: kubernetes.io/no-provisioner
+volumeBindingMode: WaitForFirstConsumer
+reclaimPolicy: Retain
+allowVolumeExpansion: True
+---
+apiVersion: v1
+kind: PersistentVolume
+metadata:
+ name: clickhouse-pv
+spec:
+ storageClassName: clickhouse-storage
+ capacity:
+ storage: STORAGE_SIZE
+ accessModes:
+ - ReadWriteOnce
+ volumeMode: Filesystem
+ nfs:
+ path: NFS_SERVER_PATH
+ server: NFS_SERVER_ADDRESS
diff --git a/build/yamls/flow-visibility/patches/pv/mountPv.yml b/build/yamls/flow-visibility/patches/pv/mountPv.yml
new file mode 100644
index 00000000000..c3d4d898bb4
--- /dev/null
+++ b/build/yamls/flow-visibility/patches/pv/mountPv.yml
@@ -0,0 +1,14 @@
+- op: add
+ path: /spec/defaults/templates/dataVolumeClaimTemplate
+ value: clickhouse-storage-template
+- op: add
+ path: /spec/templates/volumeClaimTemplates
+ value:
+ - name: clickhouse-storage-template
+ spec:
+ storageClassName: STORAGECLASS_NAME
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: STORAGE_SIZE
diff --git a/build/yamls/flow-visibility/patches/ram/mountRam.yml b/build/yamls/flow-visibility/patches/ram/mountRam.yml
new file mode 100644
index 00000000000..541136de993
--- /dev/null
+++ b/build/yamls/flow-visibility/patches/ram/mountRam.yml
@@ -0,0 +1,12 @@
+- op: add
+ path: /spec/templates/podTemplates/0/spec/volumes/-
+ value:
+ name: clickhouse-storage-volume
+ emptyDir:
+ medium: Memory
+ sizeLimit: STORAGE_SIZE
+- op: add
+ path: /spec/templates/podTemplates/0/spec/containers/0/volumeMounts/-
+ value:
+ name: clickhouse-storage-volume
+ mountPath: /var/lib/clickhouse
diff --git a/build/yamls/patches/chaining/installCni.yml b/build/yamls/patches/chaining/installCni.yml
deleted file mode 100644
index 5e353352a19..00000000000
--- a/build/yamls/patches/chaining/installCni.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-apiVersion: apps/v1
-kind: DaemonSet
-metadata:
- name: antrea-agent
-spec:
- template:
- spec:
- initContainers:
- - name: install-cni
- command: ["install_cni_chaining"]
- securityContext:
- capabilities:
- add:
- # SYS_MODULE is required to load the OVS kernel module.
- - SYS_MODULE
diff --git a/build/yamls/patches/coverage/startAgentCov.yml b/build/yamls/patches/coverage/startAgentCov.yml
deleted file mode 100644
index 39812362b57..00000000000
--- a/build/yamls/patches/coverage/startAgentCov.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-apiVersion: apps/v1
-kind: DaemonSet
-metadata:
- name: antrea-agent
-spec:
- template:
- spec:
- initContainers:
- - name: install-cni
- image: antrea/antrea-ubuntu-coverage:latest
- containers:
- - name: antrea-agent
- command: ["/bin/sh"]
- args: ["-c", "sleep 2; antrea-agent-coverage -test.run=TestBincoverRunMain -test.coverprofile=antrea-agent.cov.out -args-file=/agent-arg-file; while true; do sleep 5 & wait $!; done"]
diff --git a/build/yamls/patches/coverage/startControllerCov.yml b/build/yamls/patches/coverage/startControllerCov.yml
deleted file mode 100644
index 8e1f187d60e..00000000000
--- a/build/yamls/patches/coverage/startControllerCov.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: antrea-controller
-spec:
- template:
- spec:
- containers:
- - command: ["/bin/sh"]
- args: ["-c", "antrea-controller-coverage -test.run=TestBincoverRunMain -test.coverprofile=antrea-controller.cov.out -args-file=/controller-arg-file; while true; do sleep 5 & wait $!; done"]
- name: antrea-controller
diff --git a/build/yamls/patches/dev/agentImagePullPolicy.yml b/build/yamls/patches/dev/agentImagePullPolicy.yml
deleted file mode 100644
index 51bf1ea8d98..00000000000
--- a/build/yamls/patches/dev/agentImagePullPolicy.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-apiVersion: apps/v1
-kind: DaemonSet
-metadata:
- name: antrea-agent
-spec:
- template:
- spec:
- containers:
- - name: antrea-agent
- imagePullPolicy: IfNotPresent
- - name: antrea-ovs
- imagePullPolicy: IfNotPresent
- initContainers:
- - name: install-cni
- imagePullPolicy: IfNotPresent
diff --git a/build/yamls/patches/dev/agentIpsecImagePullPolicy.yml b/build/yamls/patches/dev/agentIpsecImagePullPolicy.yml
deleted file mode 100644
index 50aabfcf2c3..00000000000
--- a/build/yamls/patches/dev/agentIpsecImagePullPolicy.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-apiVersion: apps/v1
-kind: DaemonSet
-metadata:
- name: antrea-agent
-spec:
- template:
- spec:
- containers:
- - name: antrea-ipsec
- imagePullPolicy: IfNotPresent
diff --git a/build/yamls/patches/dev/agentVerboseLog.yml b/build/yamls/patches/dev/agentVerboseLog.yml
deleted file mode 100644
index 4bfaaaeeea7..00000000000
--- a/build/yamls/patches/dev/agentVerboseLog.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-apiVersion: apps/v1
-kind: DaemonSet
-metadata:
- name: antrea-agent
-spec:
- template:
- spec:
- containers:
- - name: antrea-agent
- args: ["--config", "/etc/antrea/antrea-agent.conf", "--logtostderr=false", "--log_dir=/var/log/antrea", "--alsologtostderr", "--log_file_max_size=100", "--log_file_max_num=4", "--v=4"]
-
diff --git a/build/yamls/patches/dev/controllerImagePullPolicy.yml b/build/yamls/patches/dev/controllerImagePullPolicy.yml
deleted file mode 100644
index ce6bda61abb..00000000000
--- a/build/yamls/patches/dev/controllerImagePullPolicy.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: antrea-controller
-spec:
- template:
- spec:
- containers:
- - name: antrea-controller
- imagePullPolicy: IfNotPresent
diff --git a/build/yamls/patches/dev/controllerVerboseLog.yml b/build/yamls/patches/dev/controllerVerboseLog.yml
deleted file mode 100644
index 35f79946478..00000000000
--- a/build/yamls/patches/dev/controllerVerboseLog.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: antrea-controller
-spec:
- template:
- spec:
- containers:
- - name: antrea-controller
- args: ["--config", "/etc/antrea/antrea-controller.conf", "--logtostderr=false", "--log_dir=/var/log/antrea", "--alsologtostderr", "--log_file_max_size=100", "--log_file_max_num=4", "--v=4"]
-
diff --git a/build/yamls/patches/dev/onDeleteUpdateStrategy.yml b/build/yamls/patches/dev/onDeleteUpdateStrategy.yml
deleted file mode 100644
index 4e5d30be341..00000000000
--- a/build/yamls/patches/dev/onDeleteUpdateStrategy.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-apiVersion: apps/v1
-kind: DaemonSet
-metadata:
- name: antrea-agent
-spec:
- updateStrategy:
- type: OnDelete
diff --git a/build/yamls/patches/eks/eksEnv.yml b/build/yamls/patches/eks/eksEnv.yml
deleted file mode 100644
index 5ebae561433..00000000000
--- a/build/yamls/patches/eks/eksEnv.yml
+++ /dev/null
@@ -1,14 +0,0 @@
-apiVersion: apps/v1
-kind: DaemonSet
-metadata:
- name: antrea-agent
-spec:
- template:
- spec:
- containers:
- - name: antrea-agent
- env:
- # Antrea Agent needs to be aware that it is being used in EKS, as
- # additional iptables rules may have to be installed.
- - name: ANTREA_CLOUD_EKS
- value: "true"
diff --git a/build/yamls/patches/gke/cniPath.yml b/build/yamls/patches/gke/cniPath.yml
deleted file mode 100644
index 671dbb31087..00000000000
--- a/build/yamls/patches/gke/cniPath.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-apiVersion: apps/v1
-kind: DaemonSet
-metadata:
- name: antrea-agent
-spec:
- template:
- spec:
- volumes:
- - hostPath:
- path: /home/kubernetes/bin
- name: host-cni-bin
diff --git a/build/yamls/patches/hwoffload/hwOffload.yml b/build/yamls/patches/hwoffload/hwOffload.yml
deleted file mode 100644
index bed398e1984..00000000000
--- a/build/yamls/patches/hwoffload/hwOffload.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-apiVersion: apps/v1
-kind: DaemonSet
-metadata:
- name: antrea-agent
-spec:
- template:
- spec:
- containers:
- - name: antrea-ovs
- command: ["start_ovs", "--hw-offload"]
-
diff --git a/build/yamls/patches/ipsec/ipsecContainer.yml b/build/yamls/patches/ipsec/ipsecContainer.yml
deleted file mode 100644
index a1225abdb54..00000000000
--- a/build/yamls/patches/ipsec/ipsecContainer.yml
+++ /dev/null
@@ -1,36 +0,0 @@
-apiVersion: apps/v1
-kind: DaemonSet
-metadata:
- name: antrea-agent
-spec:
- template:
- spec:
- containers:
- - name: antrea-ipsec
- image: antrea
- resources:
- requests:
- cpu: "50m"
- command: ["start_ovs_ipsec"]
- livenessProbe:
- exec:
- command:
- - /bin/sh
- - -c
- - timeout 5 container_liveness_probe ovs-ipsec
- initialDelaySeconds: 5
- periodSeconds: 5
- securityContext:
- capabilities:
- add:
- - NET_ADMIN
- volumeMounts:
- - name: host-var-run-antrea
- mountPath: /var/run/openvswitch
- subPath: openvswitch
- - name: host-var-log-antrea
- mountPath: /var/log/openvswitch
- subPath: openvswitch
- - name: host-var-log-antrea
- mountPath: /var/log/strongswan
- subPath: strongswan
diff --git a/build/yamls/patches/ipsec/ipsecSecret.yml b/build/yamls/patches/ipsec/ipsecSecret.yml
deleted file mode 100644
index b0bb36a572a..00000000000
--- a/build/yamls/patches/ipsec/ipsecSecret.yml
+++ /dev/null
@@ -1,10 +0,0 @@
----
-apiVersion: v1
-kind: Secret
-metadata:
- name: antrea-ipsec
- namespace: kube-system
-type: Opaque
-stringData:
- # Preshared Key used by IKE for authentication with peers.
- psk: changeme
diff --git a/build/yamls/patches/ipsec/pskEnv.yml b/build/yamls/patches/ipsec/pskEnv.yml
deleted file mode 100644
index 48d5fbaa7bb..00000000000
--- a/build/yamls/patches/ipsec/pskEnv.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-apiVersion: apps/v1
-kind: DaemonSet
-metadata:
- name: antrea-agent
-spec:
- template:
- spec:
- containers:
- - name: antrea-agent
- env:
- # Pre-shared key for IPsec IKE.
- - name: ANTREA_IPSEC_PSK
- valueFrom:
- secretKeyRef:
- name: antrea-ipsec
- key: psk
diff --git a/build/yamls/patches/kustomization.configMap.tpl.yml b/build/yamls/patches/kustomization.configMap.tpl.yml
deleted file mode 100644
index 08c34218f0a..00000000000
--- a/build/yamls/patches/kustomization.configMap.tpl.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-configMapGenerator:
-- name: antrea-config
- behavior: merge
- files:
- -
- -
diff --git a/build/yamls/patches/release/.gitignore b/build/yamls/patches/release/.gitignore
deleted file mode 100644
index fdffa2a0fd7..00000000000
--- a/build/yamls/patches/release/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-# placeholder
diff --git a/build/yamls/patches/simulator/agentNodeAffinity.yml b/build/yamls/patches/simulator/agentNodeAffinity.yml
deleted file mode 100644
index 1a922cecd3f..00000000000
--- a/build/yamls/patches/simulator/agentNodeAffinity.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-apiVersion: apps/v1
-kind: DaemonSet
-metadata:
- name: antrea-agent
-spec:
- template:
- spec:
- affinity:
- nodeAffinity:
- requiredDuringSchedulingIgnoredDuringExecution:
- nodeSelectorTerms:
- - matchExpressions:
- - key: antrea/instance
- operator: NotIn
- values:
- - simulator
diff --git a/build/yamls/patches/simulator/controllerNodeAffinity.yml b/build/yamls/patches/simulator/controllerNodeAffinity.yml
deleted file mode 100644
index e88e7e23d7d..00000000000
--- a/build/yamls/patches/simulator/controllerNodeAffinity.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-apiVersion: apps/v1
-kind: Deployment
-metadata:
- name: antrea-controller
-spec:
- template:
- spec:
- affinity:
- nodeAffinity:
- requiredDuringSchedulingIgnoredDuringExecution:
- nodeSelectorTerms:
- - matchExpressions:
- - key: antrea/instance
- operator: NotIn
- values:
- - simulator
diff --git a/build/yamls/patches/sriov/sriov.yml b/build/yamls/patches/sriov/sriov.yml
deleted file mode 100644
index f56c5466e02..00000000000
--- a/build/yamls/patches/sriov/sriov.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-apiVersion: apps/v1
-kind: DaemonSet
-metadata:
- name: antrea-agent
-spec:
- template:
- spec:
- containers:
- - name: antrea-agent
- volumeMounts:
- - mountPath: /var/lib/kubelet
- name: host-kubelet
- readOnly: true
- volumes:
- - hostPath:
- path: /var/lib/kubelet
- name: host-kubelet
diff --git a/build/yamls/patches/whereabouts/whereabouts-rbac.yml b/build/yamls/patches/whereabouts/whereabouts-rbac.yml
deleted file mode 100644
index 6492ac97a96..00000000000
--- a/build/yamls/patches/whereabouts/whereabouts-rbac.yml
+++ /dev/null
@@ -1,46 +0,0 @@
----
-apiVersion: v1
-kind: Secret
-metadata:
- name: whereabouts-cni-secret
- annotations:
- kubernetes.io/service-account.name: antrea-agent-whereabouts
-type: kubernetes.io/service-account-token
----
-apiVersion: v1
-kind: ServiceAccount
-metadata:
- name: antrea-agent-whereabouts
- namespace: kube-system
----
-kind: ClusterRole
-apiVersion: rbac.authorization.k8s.io/v1
-metadata:
- name: antrea-agent-whereabouts
-rules:
- - apiGroups:
- - whereabouts.cni.cncf.io
- resources:
- - ippools
- verbs:
- - get
- - put
- - watch
- - list
- - update
- - patch
- - create
- - delete
----
-kind: ClusterRoleBinding
-apiVersion: rbac.authorization.k8s.io/v1
-metadata:
- name: antrea-agent-whereabouts
-roleRef:
- apiGroup: rbac.authorization.k8s.io
- kind: ClusterRole
- name: antrea-agent-whereabouts
-subjects:
- - kind: ServiceAccount
- name: antrea-agent-whereabouts
- namespace: kube-system
diff --git a/build/yamls/patches/whereabouts/whereabouts.yml b/build/yamls/patches/whereabouts/whereabouts.yml
deleted file mode 100644
index 3ada5ac9bae..00000000000
--- a/build/yamls/patches/whereabouts/whereabouts.yml
+++ /dev/null
@@ -1,33 +0,0 @@
-apiVersion: apps/v1
-kind: DaemonSet
-metadata:
- name: antrea-agent
-spec:
- template:
- spec:
- initContainers:
- - name: install-whereabouts-config
- image: antrea
- resources:
- requests:
- cpu: "100m"
- command: ["install_whereabouts_config"]
- volumeMounts:
- - name: whereabouts-cni-conf
- mountPath: /host/etc/cni/net.d/whereabouts.d
- - name: whereabouts-secret
- mountPath: /var/run/secrets/whereabouts
- containers:
- - name: antrea-agent
- volumeMounts:
- - name: whereabouts-cni-conf
- mountPath: /host/etc/cni/net.d/whereabouts.d
- - name: whereabouts-secret
- mountPath: /var/run/secrets/whereabouts
- volumes:
- - hostPath:
- path: /host/etc/cni/net.d/whereabouts.d
- name: whereabouts-cni-conf
- - name: whereabouts-secret
- secret:
- secretName: whereabouts-cni-secret
diff --git a/build/yamls/windows/base/agent.yml b/build/yamls/windows/base/agent.yml
index dba7d90a85f..b5d9d141295 100644
--- a/build/yamls/windows/base/agent.yml
+++ b/build/yamls/windows/base/agent.yml
@@ -35,8 +35,6 @@ spec:
image: antrea-windows
name: antrea-agent
volumeMounts:
- - mountPath: /host
- name: host
- mountPath: \\.\pipe\rancher_wins
name: wins
- mountPath: /etc/antrea
@@ -45,6 +43,8 @@ spec:
name: antrea-agent-windows
- mountPath: /host/k/antrea/
name: host-antrea-home
+ - mountPath: /var/log/antrea/
+ name: var-log-antrea
hostNetwork: true
initContainers:
- command:
@@ -64,8 +64,8 @@ spec:
name: host-cni-bin
- mountPath: /host/k/antrea/
name: host-antrea-home
- - mountPath: /host
- name: host
+ - mountPath: /host/var/run/secrets/
+ name: host-secrets-path
nodeSelector:
kubernetes.io/os: windows
priorityClassName: system-node-critical
@@ -95,12 +95,17 @@ spec:
path: /k/antrea
type: DirectoryOrCreate
name: host-antrea-home
- - hostPath:
- path: /
- name: host
- name: wins
hostPath:
path: \\.\pipe\rancher_wins
type: null
+ - name: var-log-antrea
+ hostPath:
+ path: /var/log/antrea/
+ type: DirectoryOrCreate
+ - name: host-secrets-path
+ hostPath:
+ path: /var/run/secrets/
+ type: DirectoryOrCreate
updateStrategy:
type: RollingUpdate
diff --git a/build/yamls/windows/base/conf/Run-AntreaAgent.ps1 b/build/yamls/windows/base/conf/Run-AntreaAgent.ps1
index 34ca44d9737..948645e2e1b 100644
--- a/build/yamls/windows/base/conf/Run-AntreaAgent.ps1
+++ b/build/yamls/windows/base/conf/Run-AntreaAgent.ps1
@@ -2,4 +2,4 @@ $ErrorActionPreference = "Stop"
# wins will rename the binary when executing it. So we need to copy the binary everytime before running it.
mkdir -force /host/k/antrea/bin
cp /k/antrea/bin/* /host/k/antrea/bin/
-C:/k/antrea/utils/wins.exe cli process run --path /k/antrea/bin/antrea-agent.exe --args "--config=/k/antrea/etc/antrea-agent.conf --logtostderr=false --log_dir=/k/antrea/logs/ --alsologtostderr --log_file_max_size=100 --log_file_max_num=4 --v=0" --envs "KUBERNETES_SERVICE_HOST=$env:KUBERNETES_SERVICE_HOST KUBERNETES_SERVICE_PORT=$env:KUBERNETES_SERVICE_PORT ANTREA_SERVICE_HOST=$env:ANTREA_SERVICE_HOST ANTREA_SERVICE_PORT=$env:ANTREA_SERVICE_PORT NODE_NAME=$env:NODE_NAME KUBE_DNS_SERVICE_HOST=$env:KUBE_DNS_SERVICE_HOST KUBE_DNS_SERVICE_PORT=$env:KUBE_DNS_SERVICE_PORT"
+C:/k/antrea/utils/wins.exe cli process run --path /k/antrea/bin/antrea-agent.exe --args "--config=/k/antrea/etc/antrea-agent.conf --logtostderr=false --log_dir=/var/log/antrea/ --alsologtostderr --log_file_max_size=100 --log_file_max_num=4 --v=0" --envs "KUBERNETES_SERVICE_HOST=$env:KUBERNETES_SERVICE_HOST KUBERNETES_SERVICE_PORT=$env:KUBERNETES_SERVICE_PORT ANTREA_SERVICE_HOST=$env:ANTREA_SERVICE_HOST ANTREA_SERVICE_PORT=$env:ANTREA_SERVICE_PORT NODE_NAME=$env:NODE_NAME KUBE_DNS_SERVICE_HOST=$env:KUBE_DNS_SERVICE_HOST KUBE_DNS_SERVICE_PORT=$env:KUBE_DNS_SERVICE_PORT"
diff --git a/build/yamls/windows/base/conf/antrea-agent.conf b/build/yamls/windows/base/conf/antrea-agent.conf
index 7fbb6952468..ab72ae1e4b6 100644
--- a/build/yamls/windows/base/conf/antrea-agent.conf
+++ b/build/yamls/windows/base/conf/antrea-agent.conf
@@ -10,6 +10,9 @@ featureGates:
# this flag will not take effect.
# EndpointSlice: false
+# Enable NodePortLocal feature to make the Pods reachable externally through NodePort
+# NodePortLocal: true
+
# Enable flowexporter which exports polled conntrack connections as IPFIX flow records from each agent to a configured collector.
# FlowExporter: false
@@ -113,3 +116,14 @@ antreaProxy:
# Note that this option is experimental. If kube-proxy is removed, option kubeAPIServerOverride must be used to access
# apiserver directly.
#proxyAll: false
+
+nodePortLocal:
+# Enable NodePortLocal, a feature used to make Pods reachable using port forwarding on the host. To
+# enable this feature, you need to set "enable" to true, and ensure that the NodePortLocal feature
+# gate is also enabled (which is the default).
+# enable: false
+# Provide the port range used by NodePortLocal. When the NodePortLocal feature is enabled, a port
+# from that range will be assigned whenever a Pod's container defines a specific port to be exposed
+# (each container can define a list of ports as pod.spec.containers[].ports), and all Node traffic
+# directed to that port will be forwarded to the Pod.
+# portRange: 61000-62000
diff --git a/ci/README.md b/ci/README.md
index 49092fe283f..fbdcad8f22e 100644
--- a/ci/README.md
+++ b/ci/README.md
@@ -5,9 +5,8 @@ This directory includes all the scripts required to run CI on Antrea.
For information about our Jenkins CI jobs and how to run the same tests locally,
see [here](jenkins/README.md).
-File [k8s-conformance-image-version](k8s-conformance-image-version) stores the
-version number of the K8s conformance container image we currently use to run
-tests.
+For K8s conformance upstream tests, the version of the K8s conformance container
+image will be determined at runtime according to the Kubernetes server's version.
## Antrea test suite
@@ -36,8 +35,8 @@ We run 4 different categories of tests as part of CI:
components can be deployed successfully, check end-to-end connectivity for
different types of traffic (e.g. Pod-to-Pod, Pod-to-Service), validate the
implementation of Antrea-speicifc APIs
- (e.g. [ClusterNetworkPolicy](/docs/network-policy.md),
- [Traceflow](/docs/traceflow-guide.md), ...).
+ (e.g. [ClusterNetworkPolicy](../docs/antrea-network-policy.md),
+ [Traceflow](../docs/traceflow-guide.md), ...).
* **Kubernetes upstream tests**: our CI relies on Kubernetes community tests to
ensure conformance and validate the implementation of the NetworkPolicy API.
@@ -78,7 +77,7 @@ You can run the linters locally with `make golangci` from the root of the
repository. Some issues can be fixed automatically for you if you run `make
golangci-fix`.
-See our [golangci-lint configuration file](/.golangci.yml) for more details.
+See our [golangci-lint configuration file](../.golangci.yml) for more details.
You can also run the `golint` linter with `make lint` to see suggestions about
how to improve your code, and we encourage you to do so when submitting a
diff --git a/ci/golicense/README.md b/ci/golicense/README.md
index 1230a67666f..d34dfb2f147 100644
--- a/ci/golicense/README.md
+++ b/ci/golicense/README.md
@@ -19,7 +19,7 @@ locally:
## Supported OSS Licenses
For a list of the OSS licenses accepted or rejected for Antrea dependencies,
-please see [conf.json](conf.json). These lists are not comprehensive and do not
+please see [conf.yml](conf.yml). These lists are not comprehensive and do not
include all possible OSS licenses - however, they do include the most popular
ones. If a patch introduces a new dependency, and the license for that
dependency is listed in "deny", the patch will not be merged. If the license is
diff --git a/ci/jenkins/README.md b/ci/jenkins/README.md
index 6f7a6fcb689..95f96b2db24 100644
--- a/ci/jenkins/README.md
+++ b/ci/jenkins/README.md
@@ -145,8 +145,9 @@ DOCKER_REGISTRY="$(head -n1 ci/docker-registry)"
[ci/jenkins/jobs](/ci/jenkins/jobs). It validates the syntax of the jenkins jobs'
configuration.
-* Jenkins Windows OVS validator: this job only executes for PRs that include changes to [hack/windows/Install-OVS.ps1](hack/windows/Install-OVS.ps1). It validates
- if Windows OVS can be installed correctly.
+* Jenkins Windows OVS validator: this job only executes for PRs that include
+ changes to [hack/windows/Install-OVS.ps1](/hack/windows/Install-OVS.ps1).
+ It validates if Windows OVS can be installed correctly.
```shell
#!/bin/bash
@@ -177,11 +178,6 @@ DOCKER_REGISTRY="$(head -n1 ci/docker-registry)"
| :------------: | :-----------------: | :-------------: | :------: |
| 1.21.7 | Standard_DS2_v2 | Ubuntu 18.04 |[](http://jenkins.antrea-ci.rocks/view/cloud/job/cloud-antrea-aks-conformance-net-policy/)|
-* [daily-elk-flow-collector-validate](https://jenkins.antrea-ci.rocks/job/antrea-daily-elk-flow-collector-validate-for-period/):
- [](http://jenkins.antrea-ci.rocks/view/cloud/job/antrea-daily-elk-flow-collector-validate-for-period/)
- daily validation of elk flow collector manifest. If build fails, Jenkins will send an email to
- projectantrea-dev@googlegroups.com for notification.
-
* [daily-flow-visibility-validate](https://jenkins.antrea-ci.rocks/job/antrea-daily-flow-visibility-validate-for-period/):
[](http://jenkins.antrea-ci.rocks/view/cloud/job/antrea-daily-flow-visibility-validate-for-period/)
daily validation of Flow Visibility manifest. If build fails, Jenkins will send an email to
diff --git a/ci/jenkins/jobs/macros.yaml b/ci/jenkins/jobs/macros.yaml
index 7492aa3184b..bb09de4ffef 100644
--- a/ci/jenkins/jobs/macros.yaml
+++ b/ci/jenkins/jobs/macros.yaml
@@ -124,23 +124,6 @@
DOCKER_REGISTRY="$(head -n1 ci/docker-registry)"
./ci/jenkins/test-vmc.sh --cluster-name "$BUILD_TAG" --testcase '{conformance_type}' --coverage --codecov-token "${{CODECOV_TOKEN}}" --registry ${{DOCKER_REGISTRY}} --username "${{CAPVC_USERNAME}}" --password "${{CAPVC_PASSWORD}}"
-- builder:
- name: builder-elk-flow-collector
- builders:
- - shell: |-
- #!/bin/bash
- set -ex
- ./ci/jenkins/test-vmc.sh --cluster-name "${JOB_NAME}-${BUILD_NUMBER}" --setup-only
- ./ci/test-elk-flow-collector.sh --kubeconfig jenkins/out/kubeconfig
- ./ci/jenkins/test-vmc.sh --cluster-name "${JOB_NAME}-${BUILD_NUMBER}" --cleanup-only
-
- if !(test -f TEST_FAILURE); then
- echo "=== SUCCESS !!! ==="
- exit 0
- fi
- echo "=== FAILURE !!! ==="
- exit 1
-
- builder:
name: builder-flow-visibility
builders:
diff --git a/ci/jenkins/jobs/projects.yaml b/ci/jenkins/jobs/projects.yaml
index 32baeb08480..a4c1593d677 100644
--- a/ci/jenkins/jobs/projects.yaml
+++ b/ci/jenkins/jobs/projects.yaml
@@ -58,21 +58,6 @@
- text:
credential-id: RESOURCEPOOLPATH
variable: RESOURCEPOOLPATH
- - '{name}-{test_name}-for-period':
- test_name: daily-elk-flow-collector-validate
- node: 'antrea-test-node'
- description: 'This is for validating the elk flow collector manifest daily.'
- builders:
- - builder-elk-flow-collector
- branches:
- - '*/main'
- included_regions: []
- cron: 'H H * * *'
- ignore_post_commit_hooks: false
- publishers:
- - email:
- recipients: projectantrea-dev@googlegroups.com
- wrappers: []
- '{name}-{test_name}-for-period':
test_name: daily-flow-visibility-validate
node: 'antrea-test-node'
diff --git a/ci/jenkins/test-mc.sh b/ci/jenkins/test-mc.sh
index af4cf031042..470c26fd97f 100755
--- a/ci/jenkins/test-mc.sh
+++ b/ci/jenkins/test-mc.sh
@@ -38,7 +38,7 @@ NGINX_IMAGE=projects.registry.vmware.com/antrea/nginx:1.21.6-alpine
CONTROL_PLANE_NODE_ROLE="control-plane,master"
multicluster_kubeconfigs=($EAST_CLUSTER_CONFIG $LEADER_CLUSTER_CONFIG $WEST_CLUSTER_CONFIG)
-membercluter_kubeconfigs=($EAST_CLUSTER_CONFIG $WEST_CLUSTER_CONFIG)
+membercluster_kubeconfigs=($EAST_CLUSTER_CONFIG $WEST_CLUSTER_CONFIG)
CLEAN_STALE_IMAGES="docker system prune --force --all --filter until=48h"
@@ -104,6 +104,11 @@ function clean_tmp() {
find ${WORKDIR} -name "support-bundles*" -mtime +7 -exec rm -rf {} \; 2>&1 | grep -v "Permission denied" || true
}
+function clean_images() {
+ docker images | grep -E 'mc-controller|antrea-ubuntu' | awk '{print $3}' | xargs -r docker rmi -f || true
+ # Clean up dangling images generated in previous builds.
+ docker image prune -f --filter "until=24h" || true > /dev/null
+}
function cleanup_multicluster_ns {
ns=$1
@@ -127,13 +132,7 @@ function cleanup_multicluster_controller {
function cleanup_multicluster_antrea {
echo "====== Cleanup Antrea controller and agent ======"
kubeconfig=$1
- kubectl get pod -n kube-system -l component=antrea-agent --no-headers=true $kubeconfig | awk '{print $1}' | while read AGENTNAME; do
- kubectl exec $AGENTNAME -c antrea-agent -n kube-system ${kubeconfig} -- ovs-vsctl del-port br-int gw0 || true
- done
-
- for antrea_yml in ${WORKDIR}/*.yml; do
- kubectl delete -f $antrea_yml --ignore-not-found=true ${kubeconfig} --timeout=30s || true
- done
+ kubectl delete -f build/yamls/antrea.yml --ignore-not-found=true ${kubeconfig} --timeout=30s || true
}
function clean_multicluster {
@@ -174,7 +173,7 @@ function wait_for_multicluster_controller_ready {
sed -i 's/antrea-mcs-ns/kube-system/g' ./multicluster/test/yamls/leader-access-token.yml
echo "type: Opaque" >>./multicluster/test/yamls/leader-access-token.yml
- for config in "${membercluter_kubeconfigs[@]}";
+ for config in "${membercluster_kubeconfigs[@]}";
do
kubectl apply -f ./multicluster/build/yamls/antrea-multicluster-member.yml ${config}
kubectl rollout status deployment/antrea-mc-controller -n kube-system ${config}
@@ -195,9 +194,12 @@ function deliver_antrea_multicluster {
git show --numstat
make clean
- ${CLEAN_STALE_IMAGES}
- cp -f build/yamls/*.yml $WORKDIR
+ # Ensure that files in the Docker context have the correct permissions, or Docker caching cannot
+ # be leveraged successfully
+ chmod -R g-w build/images/ovs
+ chmod -R g-w build/images/base
+
DOCKER_REGISTRY="${DOCKER_REGISTRY}" ./hack/build-antrea-linux-all.sh --pull
echo "====== Delivering Antrea to all the Nodes ======"
docker save -o ${WORKDIR}/antrea-ubuntu.tar $DOCKER_REGISTRY/antrea/antrea-ubuntu:latest
@@ -219,11 +221,10 @@ function deliver_multicluster_controller {
export GOROOT=/usr/local/go
export PATH=${GOROOT}/bin:$PATH
- docker images | grep 'mc-controller' | awk '{print $3}' | xargs -r docker rmi || true
export NO_PULL=1;make antrea-mc-controller
docker save projects.registry.vmware.com/antrea/antrea-mc-controller:latest -o "${WORKDIR}"/antrea-mcs.tar
- ./multicluster/hack/generate-manifest.sh -l antrea-mcs-ns >./multicluster/test/yamls/manifest.yml
+ ./multicluster/hack/generate-manifest.sh -l antrea-mcs-ns > ./multicluster/test/yamls/manifest.yml
for kubeconfig in "${multicluster_kubeconfigs[@]}"
do
@@ -238,10 +239,13 @@ function deliver_multicluster_controller {
sed -i "s||${leader_ip}|" ./multicluster/test/yamls/west-member-cluster.yml
rsync -avr --progress --inplace -e "ssh -o StrictHostKeyChecking=no" ./multicluster/test/yamls/test-acnp-copy-span-ns-isolation.yml jenkins@["${leader_ip}"]:"${WORKDIR}"/test-acnp-copy-span-ns-isolation.yml
- for kubeconfig in "${membercluter_kubeconfigs[@]}"
+ for kubeconfig in "${membercluster_kubeconfigs[@]}"
do
- ip=$(kubectl get nodes -o wide --no-headers=true ${EAST_CLUSTER_CONFIG} | awk -v role="$CONTROL_PLANE_NODE_ROLE" '$3 == role {print $6}')
- rsync -avr --progress --inplace -e "ssh -o StrictHostKeyChecking=no" ./multicluster/test/yamls/test-east-serviceexport.yml jenkins@["${ip}"]:"${WORKDIR}"/serviceexport.yml
+ # Remove the longest matched substring '*/' from a string like '--kubeconfig=/var/lib/jenkins/.kube/east'
+ # to get the last element which is the cluster name.
+ cluster=${kubeconfig##*/}
+ ip=$(kubectl get nodes -o wide --no-headers=true ${kubeconfig} | awk -v role="$CONTROL_PLANE_NODE_ROLE" '$3 == role {print $6}')
+ rsync -avr --progress --inplace -e "ssh -o StrictHostKeyChecking=no" ./multicluster/test/yamls/test-${cluster}-serviceexport.yml jenkins@["${ip}"]:"${WORKDIR}"/serviceexport.yml
done
}
@@ -266,7 +270,7 @@ function run_multicluster_e2e {
docker tag "${DOCKER_REGISTRY}/antrea/agnhost:2.26" "agnhost:2.26"
docker save agnhost:2.26 -o "${WORKDIR}"/agnhost.tar
- for kubeconfig in "${membercluter_kubeconfigs[@]}"
+ for kubeconfig in "${membercluster_kubeconfigs[@]}"
do
kubectl get nodes -o wide --no-headers=true "${kubeconfig}"| awk '{print $6}' | while read IP; do
rsync -avr --progress --inplace -e "ssh -o StrictHostKeyChecking=no" "${WORKDIR}"/nginx.tar jenkins@["${IP}"]:"${WORKDIR}"/nginx.tar
@@ -289,6 +293,7 @@ function run_multicluster_e2e {
trap clean_multicluster EXIT
clean_tmp
+clean_images
if [[ ${TESTCASE} =~ "e2e" ]]; then
deliver_antrea_multicluster
diff --git a/ci/jenkins/test.sh b/ci/jenkins/test.sh
index 02f02def582..02cea304214 100755
--- a/ci/jenkins/test.sh
+++ b/ci/jenkins/test.sh
@@ -135,9 +135,8 @@ function clean_antrea {
clean_up_one_ns "antrea-ipam-test-12"
clean_up_one_ns "antrea-ipam-test"
clean_up_one_ns "antrea-test"
- kubectl get pod -n kube-system -l component=antrea-agent --no-headers=true | awk '{print $1}' | while read AGENTNAME; do
- kubectl exec $AGENTNAME -c antrea-agent -n kube-system -- ovs-vsctl del-port br-int gw0 || true
- done
+ # Delete antrea-prometheus first for k8s>=1.22 to avoid Pod stuck in Terminating state.
+ kubectl delete -f ${WORKDIR}/antrea-prometheus.yml --ignore-not-found=true || true
for antrea_yml in ${WORKDIR}/*.yml; do
kubectl delete -f $antrea_yml --ignore-not-found=true || true
done
@@ -145,7 +144,7 @@ function clean_antrea {
function clean_for_windows_install_cni {
# https://github.com/antrea-io/antrea/issues/1577
- kubectl get nodes -o wide --no-headers=true | awk -v role="$CONTROL_PLANE_NODE_ROLE" '$3 != role && $1 ~ /win/ {print $6}' | while read IP; do
+ kubectl get nodes -o wide --no-headers=true | awk -v role="$CONTROL_PLANE_NODE_ROLE" '$3 !~ role && $1 ~ /win/ {print $6}' | while read IP; do
CLEAN_LIST=("/cygdrive/c/opt/cni/bin/antrea.exe" "/cygdrive/c/opt/cni/bin/host-local.exe" "/cygdrive/c/k/antrea/etc/antrea-agent.conf" "/cygdrive/c/etc/cni/net.d/10-antrea.conflist" "/cygdrive/c/k/antrea/bin/antrea-agent.exe")
for file in "${CLEAN_LIST[@]}"; do
ssh -o StrictHostKeyChecking=no -n Administrator@${IP} "rm -f ${file}"
@@ -185,7 +184,7 @@ function collect_windows_network_info_and_logs {
fi
done
- kubectl get nodes -o wide --no-headers=true | awk -v role="$CONTROL_PLANE_NODE_ROLE" '$3 != role && $1 ~ /win/ {print $1}' | while read NODENAME; do
+ kubectl get nodes -o wide --no-headers=true | awk -v role="$CONTROL_PLANE_NODE_ROLE" '$3 !~ role && $1 ~ /win/ {print $1}' | while read NODENAME; do
IP=$(kubectl get node ${NODENAME} -o json | jq -r '.status.addresses[] | select(.type | test("InternalIP")).address')
mkdir "${DEBUG_LOG_PATH}/${NODENAME}"
@@ -223,7 +222,7 @@ function wait_for_antrea_windows_pods_ready {
if [[ "${PROXY_ALL}" == false ]]; then
kubectl rollout status daemonset/kube-proxy-windows -n kube-system
fi
- kubectl get nodes -o wide --no-headers=true | awk -v role="$CONTROL_PLANE_NODE_ROLE" '$3 != role && $1 ~ /win/ {print $6}' | while read IP; do
+ kubectl get nodes -o wide --no-headers=true | awk -v role="$CONTROL_PLANE_NODE_ROLE" '$3 !~ role && $1 ~ /win/ {print $6}' | while read IP; do
for i in `seq 5`; do
sleep 5
timeout 5s ssh -o StrictHostKeyChecking=no -n Administrator@${IP} "powershell Get-NetAdapter -Name br-int -ErrorAction SilentlyContinue" && break
@@ -238,7 +237,7 @@ function wait_for_antrea_windows_processes_ready {
kubectl rollout status deployment/coredns -n kube-system
kubectl rollout status deployment.apps/antrea-controller -n kube-system
kubectl rollout status daemonset/antrea-agent -n kube-system
- kubectl get nodes -o wide --no-headers=true | awk -v role="$CONTROL_PLANE_NODE_ROLE" '$3 != role && $1 ~ /win/ {print $6}' | while read IP; do
+ kubectl get nodes -o wide --no-headers=true | awk -v role="$CONTROL_PLANE_NODE_ROLE" '$3 !~ role && $1 ~ /win/ {print $6}' | while read IP; do
echo "===== Run script to startup Antrea agent ====="
ANTREA_VERSION=$(ssh -o StrictHostKeyChecking=no -n Administrator@${IP} "/cygdrive/c/k/antrea/bin/antrea-agent.exe --version" | awk '{print $3}')
ssh -o StrictHostKeyChecking=no -n Administrator@${IP} "chmod +x /cygdrive/c/k/antrea/Start.ps1 && powershell 'c:\k\antrea\Start.ps1 -AntreaVersion ${ANTREA_VERSION}'"
@@ -295,8 +294,8 @@ function deliver_antrea_windows {
KUBERNETES_SVC_EP_IP=$(kubectl get endpoints kubernetes -o jsonpath='{.subsets[0].addresses[0].ip}')
KUBERNETES_SVC_EP_PORT=$(kubectl get endpoints kubernetes -o jsonpath='{.subsets[0].ports[0].port}')
KUBERNETES_SVC_EP_ADDR="${KUBERNETES_SVC_EP_IP}:${KUBERNETES_SVC_EP_PORT}"
- sed -i "s|#kubeAPIServerOverride: \"\"|kubeAPIServerOverride: \"${KUBERNETES_SVC_EP_ADDR}\"|g" build/yamls/antrea.yml build/yamls/antrea-windows.yml
- sed -i "s|#proxyAll: false|proxyAll: true|g" build/yamls/antrea.yml build/yamls/antrea-windows.yml
+ sed -i "s|.*kubeAPIServerOverride: \"\"| kubeAPIServerOverride: \"${KUBERNETES_SVC_EP_ADDR}\"|g" build/yamls/antrea.yml build/yamls/antrea-windows.yml
+ sed -i "s|.*proxyAll: false| proxyAll: true|g" build/yamls/antrea.yml build/yamls/antrea-windows.yml
fi
cp -f build/yamls/*.yml $WORKDIR
@@ -311,7 +310,7 @@ function deliver_antrea_windows {
docker tag "${DOCKER_REGISTRY}/antrea/${harbor_images[i]}" "${antrea_images[i]}"
done
echo "===== Deliver Antrea to Linux worker nodes and pull necessary images on worker nodes ====="
- kubectl get nodes -o wide --no-headers=true | awk -v role="$CONTROL_PLANE_NODE_ROLE" '$3 != role && $1 !~ /win/ {print $6}' | while read IP; do
+ kubectl get nodes -o wide --no-headers=true | awk -v role="$CONTROL_PLANE_NODE_ROLE" '$3 !~ role && $1 !~ /win/ {print $6}' | while read IP; do
rsync -avr --progress --inplace -e "ssh -o StrictHostKeyChecking=no" antrea-ubuntu.tar jenkins@${IP}:${WORKDIR}/antrea-ubuntu.tar
ssh -o StrictHostKeyChecking=no -n jenkins@${IP} "${CLEAN_STALE_IMAGES}; docker load -i ${WORKDIR}/antrea-ubuntu.tar" || true
@@ -329,13 +328,13 @@ function deliver_antrea_windows {
echo "===== Deliver Antrea Windows to Windows worker nodes and pull necessary images on Windows worker nodes ====="
rm -f antrea-windows.tar.gz
sed -i 's/if (!(Test-Path $AntreaAgentConfigPath))/if ($true)/' hack/windows/Helper.psm1
- kubectl get nodes -o wide --no-headers=true | awk -v role="$CONTROL_PLANE_NODE_ROLE" '$3 != role && $1 ~ /win/ {print $1}' | while read WORKER_NAME; do
+ kubectl get nodes -o wide --no-headers=true | awk -v role="$CONTROL_PLANE_NODE_ROLE" '$3 !~ role && $1 ~ /win/ {print $1}' | while read WORKER_NAME; do
echo "==== Reverting Windows VM ${WORKER_NAME} ====="
govc snapshot.revert -vm ${WORKER_NAME} win-initial
# If Windows VM fails to power on correctly in time, retry several times.
winVMIPs=""
- for i in `seq 3`; do
- winVMIPs=$(govc vm.ip -wait=1m -a ${WORKER_NAME})
+ for i in `seq 10`; do
+ winVMIPs=$(govc vm.ip -wait=2m -a ${WORKER_NAME})
if [[ $winVMIPs != "" ]]; then
echo "Windows VM ${WORKER_NAME} powered on"
break
@@ -353,17 +352,16 @@ function deliver_antrea_windows {
sleep 5
ssh -o StrictHostKeyChecking=no -n Administrator@${IP} "W32tm /resync /force" | grep successfully && break
done
+ # Avoid potential resync delay error
+ sleep 5
# Some tests need us.gcr.io/k8s-artifacts-prod/e2e-test-images/agnhost:2.13 image but it is not for windows/amd64 10.0.17763
# Use e2eteam/agnhost:2.13 instead
- harbor_images=("sigwindowstools-kube-proxy:v1.18.0" "agnhost:2.13" "agnhost:2.13" "e2eteam-jessie-dnsutils:1.0" "e2eteam-pause:3.2")
- antrea_images=("sigwindowstools/kube-proxy:v1.18.0" "e2eteam/agnhost:2.13" "us.gcr.io/k8s-artifacts-prod/e2e-test-images/agnhost:2.13" "e2eteam/jessie-dnsutils:1.0" "e2eteam/pause:3.2")
+ harbor_images=("sigwindowstools-kube-proxy:v1.18.0" "agnhost:2.13" "agnhost:2.13" "agnhost:2.29" "e2eteam-jessie-dnsutils:1.0" "e2eteam-pause:3.2")
+ antrea_images=("sigwindowstools/kube-proxy:v1.18.0" "e2eteam/agnhost:2.13" "us.gcr.io/k8s-artifacts-prod/e2e-test-images/agnhost:2.13" "k8s.gcr.io/e2e-test-images/agnhost:2.29" "e2eteam/jessie-dnsutils:1.0" "e2eteam/pause:3.2")
+ # Pull necessary images in advance to avoid transient error
for i in "${!harbor_images[@]}"; do
ssh -o StrictHostKeyChecking=no -n Administrator@${IP} "docker pull -q ${DOCKER_REGISTRY}/antrea/${harbor_images[i]} && docker tag ${DOCKER_REGISTRY}/antrea/${harbor_images[i]} ${antrea_images[i]}" || true
done
- # Pull necessary images in advance to avoid transient error
- for image in "${common_images[@]}"; do
- ssh -o StrictHostKeyChecking=no -n Administrator@${IP} "docker pull -q ${image}" || true
- done
# Use a script to run antrea agent in windows Network Policy cases
if [ "$TESTCASE" == "windows-networkpolicy-process" ]; then
@@ -416,6 +414,7 @@ function deliver_antrea {
clean_up_one_ns "antrea-ipam-test-12"
clean_up_one_ns "antrea-ipam-test"
clean_up_one_ns "antrea-test"
+ kubectl delete -f ${WORKDIR}/antrea-prometheus.yml || true
kubectl delete daemonset antrea-agent -n kube-system || true
kubectl delete -f ${WORKDIR}/antrea.yml || true
@@ -460,7 +459,7 @@ function deliver_antrea {
cat build/yamls/antrea-prometheus.yml >> build/yamls/antrea.yml
if [[ $FLEXIBLE_IPAM == true ]]; then
- control_plane_ip="$(kubectl get nodes -o wide --no-headers=true | awk -v role="$CONTROL_PLANE_NODE_ROLE" '$3 == role {print $6}')"
+ control_plane_ip="$(kubectl get nodes -o wide --no-headers=true | awk -v role="$CONTROL_PLANE_NODE_ROLE" '$3 ~ role {print $6}')"
scp -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i "${WORKDIR}/jenkins_id_rsa" build/yamls/*.yml jenkins@${control_plane_ip}:~
else
cp -f build/yamls/*.yml $WORKDIR
@@ -477,7 +476,7 @@ function deliver_antrea {
ssh -o StrictHostKeyChecking=no -i "${WORKDIR}/jenkins_id_rsa" -n jenkins@${IP} "${CLEAN_STALE_IMAGES}; docker load -i ${DEFAULT_WORKDIR}/antrea-ubuntu.tar; docker load -i ${DEFAULT_WORKDIR}/flow-aggregator.tar" || true
done
else
- kubectl get nodes -o wide --no-headers=true | awk -v role="$CONTROL_PLANE_NODE_ROLE" '$3 != role {print $6}' | while read IP; do
+ kubectl get nodes -o wide --no-headers=true | awk -v role="$CONTROL_PLANE_NODE_ROLE" '$3 !~ role {print $6}' | while read IP; do
rsync -avr --progress --inplace -e "ssh -o StrictHostKeyChecking=no" antrea-ubuntu.tar jenkins@[${IP}]:${WORKDIR}/antrea-ubuntu.tar
rsync -avr --progress --inplace -e "ssh -o StrictHostKeyChecking=no" flow-aggregator.tar jenkins@[${IP}]:${WORKDIR}/flow-aggregator.tar
ssh -o StrictHostKeyChecking=no -n jenkins@${IP} "${CLEAN_STALE_IMAGES}; docker load -i ${WORKDIR}/antrea-ubuntu.tar; docker load -i ${WORKDIR}/flow-aggregator.tar" || true
diff --git a/ci/k8s-conformance-image-version b/ci/k8s-conformance-image-version
deleted file mode 100644
index 9b43a2ccda9..00000000000
--- a/ci/k8s-conformance-image-version
+++ /dev/null
@@ -1 +0,0 @@
-v1.19.4
diff --git a/ci/kind/kind-setup.sh b/ci/kind/kind-setup.sh
index d24ff229811..1bd32e08113 100755
--- a/ci/kind/kind-setup.sh
+++ b/ci/kind/kind-setup.sh
@@ -41,12 +41,10 @@ function echoerr {
_usage="
Usage: $0 create CLUSTER_NAME [--pod-cidr POD_CIDR] [--antrea-cni] [--num-workers NUM_WORKERS] [--images IMAGES] [--subnets SUBNETS] [--ip-family ipv4|ipv6]
destroy CLUSTER_NAME
- modify-node NODE_NAME
help
where:
create: create a kind cluster with name CLUSTER_NAME
destroy: delete a kind cluster with name CLUSTER_NAME
- modify-node: modify kind node with name NODE_NAME
--pod-cidr: specifies pod cidr used in kind cluster, default is $POD_CIDR
--encap-mode: inter-node pod traffic encap mode, default is encap
--no-proxy: disable Antrea proxy
@@ -76,17 +74,6 @@ function get_encap_mode {
echo "--encap-mode $ENCAP_MODE"
}
-function modify {
- node="$1"
- # In Kind cluster, DNAT operation is configured by Docker as all DNS requests from Pod CoreDNS are NAT'd to the Docker
- # DNS embedded resolver, which is running on localhost. When kube-proxy is enabled, parameter net.ipv4.conf.all.route_localnet
- # is set to 1 by kube-proxy. This setting ensures that the DNS response can be forwarded back to Pod CoreDNS, otherwise
- # DNS response from Docker DNS embedded resolver will be discarded. When kube-proxy is disabled, to ensure that DNS
- # response can be forwarded back to Pod CoreDNS, we also set parameter net.ipv4.conf.all.route_localnet to 1 through
- # the following command:
- docker exec "$node" sysctl -w net.ipv4.conf.all.route_localnet=1
-}
-
function configure_networks {
echo "Configuring networks"
networks=$(docker network ls -f name=antrea --format '{{.Name}}')
@@ -165,7 +152,8 @@ function configure_networks {
# this is needed to ensure that the worker node can still connect to the apiserver
docker exec -t $node bash -c "echo '$control_plane_ip $CLUSTER_NAME-control-plane' >> /etc/hosts"
docker exec -t $node pkill kubelet
- docker exec -t $node pkill kube-proxy
+ # it's possible that kube-proxy is not running yet on some Nodes
+ docker exec -t $node pkill kube-proxy || true
i=$((i+1))
if [[ $i -ge $num_networks ]]; then
i=0
@@ -191,7 +179,6 @@ function configure_networks {
# otherwise we observe that inter-Node tunnelled traffic crossing Docker networks is dropped
# because of an invalid outer checksum.
docker exec "$node" ethtool -K eth0 tx off
- modify $node
done
}
@@ -295,12 +282,6 @@ EOF
configure_networks
load_images
- nodes="$(kind get nodes --name $CLUSTER_NAME)"
- nodes="$(echo $nodes)"
- for node in $nodes; do
- modify $node
- done
-
if [[ $ANTREA_CNI == true ]]; then
cmd=$(dirname $0)
cmd+="/../../hack/generate-manifest.sh"
@@ -331,6 +312,12 @@ function destroy {
delete_networks
}
+if ! command -v kind &> /dev/null
+then
+ echoerr "kind could not be found"
+ exit 1
+fi
+
while [[ $# -gt 0 ]]
do
key="$1"
@@ -345,10 +332,6 @@ while [[ $# -gt 0 ]]
destroy
exit 0
;;
- modify-node)
- modify "$2"
- exit 0
- ;;
--pod-cidr)
POD_CIDR="$2"
shift 2
@@ -400,4 +383,15 @@ while [[ $# -gt 0 ]]
esac
done
+kind_version=$(kind version | awk '{print $2}')
+kind_version=${kind_version:1} # strip leading 'v'
+function version_lt() { test "$(printf '%s\n' "$@" | sort -rV | head -n 1)" != "$1"; }
+if version_lt "$kind_version" "0.12.0" && [[ "$KUBE_PROXY_MODE" == "none" ]]; then
+ # This patch is required when using Antrea without kube-proxy:
+ # https://github.com/kubernetes-sigs/kind/pull/2375
+ echoerr "You have kind version v$kind_version installed"
+ echoerr "You need to upgrade to kind >= v0.12.0 when disabling kube-proxy"
+ exit 1
+fi
+
create
diff --git a/ci/kind/test-e2e-kind.sh b/ci/kind/test-e2e-kind.sh
index edd52f7c516..f4ad6e2178a 100755
--- a/ci/kind/test-e2e-kind.sh
+++ b/ci/kind/test-e2e-kind.sh
@@ -29,27 +29,35 @@ _usage="Usage: $0 [--encap-mode ] [--ip-family ] [--no-proxy] [--np
--proxy-all Enables Antrea proxy with all Service support.
--endpointslice Enables Antrea proxy and EndpointSlice support.
--no-np Disables Antrea-native policies.
+ --flow-visibility Only run flow visibility related e2e tests.
--skip A comma-separated list of keywords, with which tests should be skipped.
--coverage Enables measure Antrea code coverage when run e2e tests on kind.
+ --setup-only Only perform setting up the cluster and run test.
+ --cleanup-only Only perform cleaning up the cluster.
+ --test-only Only run test on current cluster. Not set up/clean up the cluster.
--help, -h Print this message and exit.
"
function print_usage {
- echoerr "$_usage"
+ echoerr -n "$_usage"
}
TESTBED_CMD=$(dirname $0)"/kind-setup.sh"
YML_CMD=$(dirname $0)"/../../hack/generate-manifest.sh"
FLOWAGGREGATOR_YML_CMD=$(dirname $0)"/../../hack/generate-manifest-flow-aggregator.sh"
+FLOW_VISIBILITY_CMD=$(dirname $0)"/../../hack/generate-manifest-flow-visibility.sh --mode e2e"
+FLOW_VISIBILITY_HELM_VALUES=$(dirname $0)"/values-flow-exporter.yml"
+CH_OPERATOR_YML=$(dirname $0)"/../../build/yamls/clickhouse-operator-install-bundle.yml"
function quit {
- if [[ $? != 0 ]]; then
- echoerr " Test failed cleaning testbed"
- $TESTBED_CMD destroy kind
+ result=$?
+ if [[ $setup_only || $test_only ]]; then
+ exit $result
fi
+ echoerr "Cleaning testbed"
+ $TESTBED_CMD destroy kind
}
-trap "quit" INT EXIT
mode=""
ipfamily="v4"
@@ -57,8 +65,12 @@ proxy=true
proxy_all=false
endpointslice=false
np=true
+flow_visibility=false
coverage=false
skiplist=""
+setup_only=false
+cleanup_only=false
+test_only=false
while [[ $# -gt 0 ]]
do
key="$1"
@@ -84,6 +96,10 @@ case $key in
np=false
shift
;;
+ --flow-visibility)
+ flow_visibility=true
+ shift
+ ;;
--skip)
skiplist="$2"
shift 2
@@ -96,6 +112,18 @@ case $key in
coverage=true
shift
;;
+ --setup-only)
+ setup_only=true
+ shift
+ ;;
+ --cleanup-only)
+ cleanup_only=true
+ shift
+ ;;
+ --test-only)
+ test_only=true
+ shift
+ ;;
-h|--help)
print_usage
exit 0
@@ -107,6 +135,13 @@ case $key in
esac
done
+if [[ $cleanup_only == "true" ]];then
+ $TESTBED_CMD destroy kind
+ exit 0
+fi
+
+trap "quit" INT EXIT
+
manifest_args=""
if ! $proxy; then
manifest_args="$manifest_args --no-proxy"
@@ -124,35 +159,48 @@ fi
if ! $np; then
manifest_args="$manifest_args --no-np"
fi
+if $flow_visibility; then
+ manifest_args="$manifest_args --flow-exporter --extra-helm-values-file $FLOW_VISIBILITY_HELM_VALUES"
+fi
COMMON_IMAGES_LIST=("k8s.gcr.io/e2e-test-images/agnhost:2.29" \
- "projects.registry.vmware.com/library/busybox" \
+ "projects.registry.vmware.com/antrea/busybox" \
"projects.registry.vmware.com/antrea/nginx:1.21.6-alpine" \
- "projects.registry.vmware.com/antrea/perftool" \
- "projects.registry.vmware.com/antrea/ipfix-collector:v0.5.12")
-for image in "${COMMON_IMAGES_LIST[@]}"; do
- for i in `seq 3`; do
- docker pull $image && break
- sleep 1
- done
-done
+ "projects.registry.vmware.com/antrea/perftool")
+
+FLOW_VISIBILITY_IMAGE_LIST=("projects.registry.vmware.com/antrea/ipfix-collector:v0.5.12" \
+ "projects.registry.vmware.com/antrea/flow-visibility-clickhouse-operator:0.18.2" \
+ "projects.registry.vmware.com/antrea/flow-visibility-metrics-exporter:0.18.2" \
+ "projects.registry.vmware.com/antrea/flow-visibility-clickhouse-server:21.11" \
+ "projects.registry.vmware.com/antrea/flow-visibility-clickhouse-monitor:latest")
if $coverage; then
manifest_args="$manifest_args --coverage"
COMMON_IMAGES_LIST+=("antrea/antrea-ubuntu-coverage:latest")
- COMMON_IMAGES_LIST+=("antrea/flow-aggregator-coverage:latest")
else
COMMON_IMAGES_LIST+=("projects.registry.vmware.com/antrea/antrea-ubuntu:latest")
- COMMON_IMAGES_LIST+=("projects.registry.vmware.com/antrea/flow-aggregator:latest")
fi
if $proxy_all; then
COMMON_IMAGES_LIST+=("k8s.gcr.io/echoserver:1.10")
fi
+if $flow_visibility; then
+ COMMON_IMAGES_LIST+=("${FLOW_VISIBILITY_IMAGE_LIST[@]}")
+ if $coverage; then
+ COMMON_IMAGES_LIST+=("antrea/flow-aggregator-coverage:latest")
+ else
+ COMMON_IMAGES_LIST+=("projects.registry.vmware.com/antrea/flow-aggregator:latest")
+ fi
+fi
+for image in "${COMMON_IMAGES_LIST[@]}"; do
+ for i in `seq 3`; do
+ docker pull $image && break
+ sleep 1
+ done
+done
printf -v COMMON_IMAGES "%s " "${COMMON_IMAGES_LIST[@]}"
-function run_test {
- current_mode=$1
- args=$2
+function setup_cluster {
+ args=$1
if [[ "$ipfamily" == "v6" ]]; then
args="$args --ip-family ipv6 --pod-cidr fd00:10:244::/56"
@@ -166,45 +214,69 @@ function run_test {
echo "creating test bed with args $args"
eval "timeout 600 $TESTBED_CMD create kind $args"
+}
+
+function run_test {
+ current_mode=$1
+ coverage_args=""
+ flow_visibility_args=""
if $coverage; then
$YML_CMD --encap-mode $current_mode $manifest_args | docker exec -i kind-control-plane dd of=/root/antrea-coverage.yml
$YML_CMD --ipsec $manifest_args | docker exec -i kind-control-plane dd of=/root/antrea-ipsec-coverage.yml
- $FLOWAGGREGATOR_YML_CMD --coverage | docker exec -i kind-control-plane dd of=/root/flow-aggregator-coverage.yml
+ timeout="80m"
+ coverage_args="--coverage --coverage-dir $ANTREA_COV_DIR"
else
$YML_CMD --encap-mode $current_mode $manifest_args | docker exec -i kind-control-plane dd of=/root/antrea.yml
$YML_CMD --ipsec $manifest_args | docker exec -i kind-control-plane dd of=/root/antrea-ipsec.yml
- $FLOWAGGREGATOR_YML_CMD | docker exec -i kind-control-plane dd of=/root/flow-aggregator.yml
+ timeout="75m"
fi
+
+ if $flow_visibility; then
+ timeout="10m"
+ flow_visibility_args="-run=TestFlowAggregator --flow-visibility"
+ if $coverage; then
+ $FLOWAGGREGATOR_YML_CMD --coverage | docker exec -i kind-control-plane dd of=/root/flow-aggregator-coverage.yml
+ else
+ $FLOWAGGREGATOR_YML_CMD | docker exec -i kind-control-plane dd of=/root/flow-aggregator.yml
+ fi
+ $FLOW_VISIBILITY_CMD | docker exec -i kind-control-plane dd of=/root/flow-visibility.yml
+ cat $CH_OPERATOR_YML | docker exec -i kind-control-plane dd of=/root/clickhouse-operator-install-bundle.yml
+ fi
+
if $proxy_all; then
apiserver=$(docker exec -i kind-control-plane kubectl get endpoints kubernetes --no-headers | awk '{print $2}')
if $coverage; then
- docker exec -i kind-control-plane sed -i.bak -E "s/^[[:space:]]*#kubeAPIServerOverride[[:space:]]*:[[:space:]]*[a-z\"]+[[:space:]]*$/ kubeAPIServerOverride: \"$apiserver\"/" /root/antrea-coverage.yml /root/antrea-ipsec-coverage.yml
+ docker exec -i kind-control-plane sed -i.bak -E "s/^[[:space:]]*[#]?kubeAPIServerOverride[[:space:]]*:[[:space:]]*[a-z\"]+[[:space:]]*$/ kubeAPIServerOverride: \"$apiserver\"/" /root/antrea-coverage.yml /root/antrea-ipsec-coverage.yml
else
- docker exec -i kind-control-plane sed -i.bak -E "s/^[[:space:]]*#kubeAPIServerOverride[[:space:]]*:[[:space:]]*[a-z\"]+[[:space:]]*$/ kubeAPIServerOverride: \"$apiserver\"/" /root/antrea.yml /root/antrea-ipsec.yml
+ docker exec -i kind-control-plane sed -i.bak -E "s/^[[:space:]]*[#]?kubeAPIServerOverride[[:space:]]*:[[:space:]]*[a-z\"]+[[:space:]]*$/ kubeAPIServerOverride: \"$apiserver\"/" /root/antrea.yml /root/antrea-ipsec.yml
fi
fi
sleep 1
- if $coverage; then
- go test -v -timeout=80m antrea.io/antrea/test/e2e -provider=kind --logs-export-dir=$ANTREA_LOG_DIR --coverage --coverage-dir $ANTREA_COV_DIR --skip=$skiplist
- else
- go test -v -timeout=75m antrea.io/antrea/test/e2e -provider=kind --logs-export-dir=$ANTREA_LOG_DIR --skip=$skiplist
- fi
- $TESTBED_CMD destroy kind
+ go test -v -timeout=$timeout antrea.io/antrea/test/e2e $flow_visibility_args -provider=kind --logs-export-dir=$ANTREA_LOG_DIR --skip=$skiplist $coverage_args
}
if [[ "$mode" == "" ]] || [[ "$mode" == "encap" ]]; then
echo "======== Test encap mode =========="
- run_test encap "--images \"$COMMON_IMAGES\""
+ if [[ $test_only == "false" ]];then
+ setup_cluster "--images \"$COMMON_IMAGES\""
+ fi
+ run_test encap
fi
if [[ "$mode" == "" ]] || [[ "$mode" == "noEncap" ]]; then
echo "======== Test noencap mode =========="
- run_test noEncap "--images \"$COMMON_IMAGES\""
+ if [[ $test_only == "false" ]];then
+ setup_cluster "--images \"$COMMON_IMAGES\""
+ fi
+ run_test noEncap
fi
if [[ "$mode" == "" ]] || [[ "$mode" == "hybrid" ]]; then
echo "======== Test hybrid mode =========="
- run_test hybrid "--subnets \"20.20.20.0/24\" --images \"$COMMON_IMAGES\""
+ if [[ $test_only == "false" ]];then
+ setup_cluster "--subnets \"20.20.20.0/24\" --images \"$COMMON_IMAGES\""
+ fi
+ run_test hybrid
fi
exit 0
diff --git a/ci/kind/validate-metrics-doc.sh b/ci/kind/validate-metrics-doc.sh
index 907f008836b..e64f09b143b 100755
--- a/ci/kind/validate-metrics-doc.sh
+++ b/ci/kind/validate-metrics-doc.sh
@@ -35,11 +35,11 @@ METRICS_DOC="$THIS_DIR/../../docs/prometheus-integration.md"
cp -v $METRICS_DOC $METRICS_TMP_DOC
$MAKE_CMD $METRICS_TMP_DOC
-cmp -s $METRICS_DOC $METRICS_TMP_DOC
-result=$?
+result=0
+cmp -s $METRICS_DOC $METRICS_TMP_DOC || result=$?
if [ $result -ne 0 ]; then
echo "Error: Prometheus metrics document should be updated"
- echo "You can update it by building the Antrea Docker image locally (with `make`), running ./hack/make-metrics-doc.sh and committing the changes"
+ echo "You can update it by building the Antrea Docker image locally (with 'make'), running ./hack/make-metrics-doc.sh and committing the changes"
exit 1
fi
diff --git a/ci/kind/values-flow-exporter.yml b/ci/kind/values-flow-exporter.yml
new file mode 100644
index 00000000000..ff606cd67c3
--- /dev/null
+++ b/ci/kind/values-flow-exporter.yml
@@ -0,0 +1,4 @@
+flowCollector:
+ flowPollInterval: "1s"
+ activeFlowExportTimeout: "2s"
+ idleFlowExportTimeout: "1s"
diff --git a/ci/run-k8s-e2e-tests.sh b/ci/run-k8s-e2e-tests.sh
index 1d6bb743ee0..fe692537d8a 100755
--- a/ci/run-k8s-e2e-tests.sh
+++ b/ci/run-k8s-e2e-tests.sh
@@ -37,12 +37,12 @@ DEFAULT_E2E_NETWORKPOLICY_FOCUS="\[Feature:NetworkPolicy\]"
DEFAULT_E2E_NETWORKPOLICY_SKIP=""
MODE="report"
THIS_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
-KUBE_CONFORMANCE_IMAGE=""
-KUBE_CONFORMANCE_IMAGE_VERSION="$(head -n1 $THIS_DIR/k8s-conformance-image-version)"
+KUBE_CONFORMANCE_IMAGE_OPTION=""
+KUBE_CONFORMANCE_IMAGE_VERSION_OPTION=""
IMAGE_PULL_POLICY="Always"
CONFORMANCE_IMAGE_CONFIG_PATH="${THIS_DIR}/conformance-image-config.yaml"
-SONOBUOY_IMAGE="projects.registry.vmware.com/sonobuoy/sonobuoy:v0.19.0"
-SYSTEMD_LOGS_IMAGE="projects.registry.vmware.com/sonobuoy/systemd-logs:v0.3"
+SONOBUOY_IMAGE="projects.registry.vmware.com/sonobuoy/sonobuoy:v0.56.4"
+SYSTEMD_LOGS_IMAGE="projects.registry.vmware.com/sonobuoy/systemd-logs:v0.4"
_usage="Usage: $0 [--e2e-conformance] [--e2e-network-policy] [--e2e-focus ] [--e2e-skip ]
[--kubeconfig ] [--kube-conformance-image-version ]
@@ -91,7 +91,7 @@ case $key in
shift 2
;;
--kube-conformance-image-version)
- KUBE_CONFORMANCE_IMAGE_VERSION="$2"
+ KUBE_CONFORMANCE_IMAGE_VERSION_OPTION="--kube-conformance-image-version $2"
shift 2
;;
--e2e-conformance)
@@ -172,14 +172,14 @@ function run_sonobuoy() {
$SONOBUOY run --wait \
$KUBECONFIG_OPTION \
$KUBE_CONFORMANCE_IMAGE_OPTION \
- --kube-conformance-image-version $KUBE_CONFORMANCE_IMAGE_VERSION \
+ $KUBE_CONFORMANCE_IMAGE_VERSION_OPTION \
--mode "certified-conformance" --image-pull-policy ${IMAGE_PULL_POLICY} \
--sonobuoy-image ${SONOBUOY_IMAGE} --systemd-logs-image ${SYSTEMD_LOGS_IMAGE} --e2e-repo-config ${CONFORMANCE_IMAGE_CONFIG_PATH}
else
$SONOBUOY run --wait \
$KUBECONFIG_OPTION \
$KUBE_CONFORMANCE_IMAGE_OPTION \
- --kube-conformance-image-version $KUBE_CONFORMANCE_IMAGE_VERSION \
+ $KUBE_CONFORMANCE_IMAGE_VERSION_OPTION \
--e2e-focus "$focus_regex" --e2e-skip "$skip_regex" --image-pull-policy ${IMAGE_PULL_POLICY} \
--sonobuoy-image ${SONOBUOY_IMAGE} --systemd-logs-image ${SYSTEMD_LOGS_IMAGE} --e2e-repo-config ${CONFORMANCE_IMAGE_CONFIG_PATH}
fi
diff --git a/ci/test-conformance-aks.sh b/ci/test-conformance-aks.sh
index 2657c18525b..8312334ab37 100755
--- a/ci/test-conformance-aks.sh
+++ b/ci/test-conformance-aks.sh
@@ -30,7 +30,7 @@ RUN_CLEANUP_ONLY=false
KUBECONFIG_PATH="$HOME/jenkins/out/aks"
TEST_SCRIPT_RC=0
MODE="report"
-KUBE_CONFORMANCE_IMAGE_VERSION=v1.19.4
+KUBE_CONFORMANCE_IMAGE_VERSION=auto
_usage="Usage: $0 [--cluster-name ] [--kubeconfig ] [--k8s-version ]\
[--azure-app-id ] [--azure-tenant-id ] [--azure-password ] \
diff --git a/ci/test-conformance-eks.sh b/ci/test-conformance-eks.sh
index 72c88277718..ebe179b150d 100755
--- a/ci/test-conformance-eks.sh
+++ b/ci/test-conformance-eks.sh
@@ -31,7 +31,7 @@ RUN_CLEANUP_ONLY=false
KUBECONFIG_PATH="$HOME/jenkins/out/eks"
MODE="report"
TEST_SCRIPT_RC=0
-KUBE_CONFORMANCE_IMAGE_VERSION=v1.18.5
+KUBE_CONFORMANCE_IMAGE_VERSION=auto
_usage="Usage: $0 [--cluster-name ] [--kubeconfig ] [--k8s-version ]\
[--aws-access-key ] [--aws-secret-key ] [--aws-region ] [--ssh-key /dev/null 2>&1 && pwd )"
-GIT_CHECKOUT_DIR=${THIS_DIR}/..
-
-_usage="Usage: $0 [--kubeconfig ]
-
-Setup Elastic stack (elk) flow collector and Antrea Agent flow exporter to validate elk-flow-collector.yml.
-
- --kubeconfig Path to kubeconfig.
-
-"
-
-echoerr() {
- >&2 echo "$@"
-}
-
-print_usage() {
- echoerr "$_usage"
-}
-
-
-while [[ $# -gt 0 ]]
-do
-key="$1"
-case $key in
- --kubeconfig)
- export KUBECONFIG="$2"
- echo "kube"
- shift 2
- ;;
- -h|--help)
- print_usage
- exit 0
- ;;
- *)
- echoerr "Unknown option $1"
- exit 1
- ;;
-esac
-done
-
-start_antrea() {
- echo "=== Starting Antrea ==="
- kubectl apply -f ${GIT_CHECKOUT_DIR}/build/yamls/antrea.yml
- kubectl rollout status --timeout=5m deployment/coredns -n kube-system
- kubectl rollout status --timeout=5m deployment.apps/antrea-controller -n kube-system
- kubectl rollout status --timeout=5m daemonset/antrea-agent -n kube-system
-}
-
-setup_flow_collector() {
- echo "=== Starting Flow Collector ==="
- kubectl create namespace elk-flow-collector
- kubectl create configmap logstash-configmap -n elk-flow-collector --from-file=${GIT_CHECKOUT_DIR}/build/yamls/elk-flow-collector/logstash/
- kubectl apply -f ${GIT_CHECKOUT_DIR}/build/yamls/elk-flow-collector/elk-flow-collector.yml -n elk-flow-collector
- echo "=== Waiting for Elastic Stack to be ready ==="
- kubectl wait --for=condition=ready pod -l app=kibana -n elk-flow-collector --timeout=600s
- kubectl wait --for=condition=ready pod -l app=logstash -n elk-flow-collector --timeout=600s
- kubectl wait --for=condition=ready pod -l app=elasticsearch -n elk-flow-collector --timeout=600s
- # wait some time for logstash to connect to elasticsearch
- sleep 30s
- # get cluster-ip of logstash
- LOGSTASH_IP=$(kubectl get svc logstash -n elk-flow-collector -o jsonpath='{.spec.clusterIP}')
- if [ ${LOGSTASH_PROTOCOL} = "udp" ]; then
- nc -zvu ${LOGSTASH_IP} ${LOGSTASH_PORT}
- fi
- echo "=== Flow Collector is listening on ${LOGSTASH_IP}:${LOGSTASH_PORT} ==="
-}
-
-config_antrea() {
- echo "=== Stopping Antrea === "
- kubectl delete -f ${GIT_CHECKOUT_DIR}/build/yamls/antrea.yml
- echo "=== Configuring Antrea Flow Exporter Address ==="
- sed -i -e "s/#flowCollectorAddr.*/flowCollectorAddr: \"${LOGSTASH_IP}:${LOGSTASH_PORT}:${LOGSTASH_PROTOCOL}\"/g" ${GIT_CHECKOUT_DIR}/build/yamls/antrea.yml
- sed -i -e "s/# FlowExporter: false/ FlowExporter: true/g" ${GIT_CHECKOUT_DIR}/build/yamls/antrea.yml
-}
-
-# Antrea agent flow exporter starts to send CoreDNS flow records.
-# It will check if flow records with one of desired fields (soursePodName) are received correctly.
-check_record() {
- echo "=== Wait for up to 5 minutes to receive data ==="
- for i in `seq 5`
- do
- sleep 1m
- echo "=== Get flow record (try for 1m) ==="
- # if the records are received in logstash and processed correctly, the logstash logs should show the formatted data, which have 'sourcePodName' field
- LOGSTASH_LOGS=$(kubectl logs -n elk-flow-collector $(kubectl -n elk-flow-collector get pod -l app=logstash -o jsonpath="{.items[0].metadata.name}"))
- if ( echo ${LOGSTASH_LOGS} | grep -q 'sourcePodName' ); then
- echo "=== Record is received correctly ==="
- break
- elif [ $i == 5 ]; then
- echo "=== Record is NOT received correctly ==="
- FAILURE=true
- fi
- done
-}
-
-start_antrea
-setup_flow_collector
-config_antrea
-start_antrea
-check_record
-
-if ( ${FAILURE} == true ); then
- echo "=== TEST FAILURE !! ==="
- touch TEST_FAILURE
-fi
diff --git a/ci/verify-sonobuoy.sh b/ci/verify-sonobuoy.sh
index 7a8b19d8c7a..513ddf5e8f4 100755
--- a/ci/verify-sonobuoy.sh
+++ b/ci/verify-sonobuoy.sh
@@ -16,7 +16,7 @@
_SONOBUOY_BINDIR="/tmp/antrea"
_SONOBUOY_TARBALL="/tmp/sonobuoy.tar.gz"
-_MIN_SONOBUOY_VERSION="v0.19.0"
+_MIN_SONOBUOY_VERSION="v0.56.4"
install_sonobuoy() {
local ostype=""
diff --git a/cmd/antctl/main.go b/cmd/antctl/main.go
index 6628b920386..128fe96f413 100644
--- a/cmd/antctl/main.go
+++ b/cmd/antctl/main.go
@@ -15,17 +15,15 @@
package main
import (
- "flag"
"math/rand"
"os"
"path"
"time"
"github.com/spf13/cobra"
- "github.com/spf13/pflag"
- "k8s.io/component-base/logs"
"antrea.io/antrea/pkg/antctl"
+ "antrea.io/antrea/pkg/log"
)
var commandName = path.Base(os.Args[0])
@@ -36,22 +34,14 @@ var rootCmd = &cobra.Command{
Long: commandName + " is the command line tool for Antrea that supports showing status of ${component}",
}
-func init() {
- // prevent any unexpected output at beginning
- flag.Set("logtostderr", "false")
- flag.Set("v", "0")
- pflag.CommandLine.MarkHidden("log-flush-frequency")
-}
-
func main() {
- logs.InitLogs()
- defer logs.FlushLogs()
+ defer log.FlushLogs()
rand.Seed(time.Now().UTC().UnixNano())
antctl.CommandList.ApplyToRootCommand(rootCmd)
err := rootCmd.Execute()
if err != nil {
- logs.FlushLogs()
+ log.FlushLogs()
os.Exit(1)
}
}
diff --git a/cmd/antrea-agent-simulator/main.go b/cmd/antrea-agent-simulator/main.go
index 611b1905e2c..c63321bac85 100644
--- a/cmd/antrea-agent-simulator/main.go
+++ b/cmd/antrea-agent-simulator/main.go
@@ -18,11 +18,9 @@
package main
import (
- "flag"
"os"
"github.com/spf13/cobra"
- "k8s.io/component-base/logs"
"k8s.io/klog/v2"
"antrea.io/antrea/pkg/log"
@@ -30,12 +28,8 @@ import (
)
func main() {
- logs.InitLogs()
- defer logs.FlushLogs()
-
command := newSimulatorCommand()
if err := command.Execute(); err != nil {
- logs.FlushLogs()
os.Exit(1)
}
}
@@ -45,7 +39,8 @@ func newSimulatorCommand() *cobra.Command {
Use: "antrea-agent-simulator",
Long: "The Antrea agent simulator.",
Run: func(cmd *cobra.Command, args []string) {
- log.InitLogFileLimits(cmd.Flags())
+ log.InitLogs(cmd.Flags())
+ defer log.FlushLogs()
if err := run(); err != nil {
klog.Fatalf("Error running agent: %v", err)
@@ -57,7 +52,5 @@ func newSimulatorCommand() *cobra.Command {
flags := cmd.Flags()
log.AddFlags(flags)
- // Install log flags
- flags.AddGoFlagSet(flag.CommandLine)
return cmd
}
diff --git a/cmd/antrea-agent-simulator/simulator.go b/cmd/antrea-agent-simulator/simulator.go
index 06241127bbe..bcc4835078d 100644
--- a/cmd/antrea-agent-simulator/simulator.go
+++ b/cmd/antrea-agent-simulator/simulator.go
@@ -57,8 +57,13 @@ func run() error {
// Create the stop chan with signals
stopCh := signals.RegisterSignalHandlers()
+ // Generate a context for functions which require one (instead of stopCh).
+ // We cancel the context when the function returns, which in the normal case will be when
+ // stopCh is closed.
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
- go antreaClientProvider.Run(stopCh)
+ go antreaClientProvider.Run(ctx)
// Add loop to check whether client is ready
attempts := 0
diff --git a/cmd/antrea-agent/agent.go b/cmd/antrea-agent/agent.go
index 0f3bd816c05..362e3788996 100644
--- a/cmd/antrea-agent/agent.go
+++ b/cmd/antrea-agent/agent.go
@@ -15,6 +15,7 @@
package main
import (
+ "context"
"fmt"
"net"
"time"
@@ -64,7 +65,6 @@ import (
"antrea.io/antrea/pkg/util/channel"
"antrea.io/antrea/pkg/util/cipher"
"antrea.io/antrea/pkg/util/k8s"
- "antrea.io/antrea/pkg/util/runtime"
"antrea.io/antrea/pkg/version"
)
@@ -84,9 +84,6 @@ var excludeNodePortDevices = []string{"antrea-egress0", "antrea-ingress0", "kube
func run(o *Options) error {
klog.Infof("Starting Antrea agent (version %s)", version.GetFullVersion())
- // Windows platform doesn't support Egress feature yet.
- egressEnabled := features.DefaultFeatureGate.Enabled(features.Egress) && !runtime.IsWindowsPlatform()
-
// Create K8s Clientset, CRD Clientset and SharedInformerFactory for the given config.
k8sClient, _, crdClient, _, err := k8s.CreateClients(o.config.ClientConnection, o.config.KubeAPIServerOverride)
if err != nil {
@@ -119,25 +116,28 @@ func run(o *Options) error {
}
defer ovsdbConnection.Close()
- enableBridgingMode := features.DefaultFeatureGate.Enabled(features.AntreaIPAM) && o.config.EnableBridgingMode
+ egressEnabled := features.DefaultFeatureGate.Enabled(features.Egress)
+ enableAntreaIPAM := features.DefaultFeatureGate.Enabled(features.AntreaIPAM)
+ enableBridgingMode := enableAntreaIPAM && o.config.EnableBridgingMode
// Bridging mode will connect the uplink interface to the OVS bridge.
connectUplinkToBridge := enableBridgingMode
ovsDatapathType := ovsconfig.OVSDatapathType(o.config.OVSDatapathType)
ovsBridgeClient := ovsconfig.NewOVSBridge(o.config.OVSBridge, ovsDatapathType, ovsdbConnection)
ovsBridgeMgmtAddr := ofconfig.GetMgmtAddress(o.config.OVSRunDir, o.config.OVSBridge)
- ofClient := openflow.NewClient(o.config.OVSBridge, ovsBridgeMgmtAddr, ovsDatapathType,
+ ofClient := openflow.NewClient(o.config.OVSBridge, ovsBridgeMgmtAddr,
features.DefaultFeatureGate.Enabled(features.AntreaProxy),
features.DefaultFeatureGate.Enabled(features.AntreaPolicy),
egressEnabled,
features.DefaultFeatureGate.Enabled(features.FlowExporter),
o.config.AntreaProxy.ProxyAll,
connectUplinkToBridge,
- features.DefaultFeatureGate.Enabled(features.Multicast))
+ features.DefaultFeatureGate.Enabled(features.Multicast),
+ features.DefaultFeatureGate.Enabled(features.TrafficControl),
+ )
_, serviceCIDRNet, _ := net.ParseCIDR(o.config.ServiceCIDR)
var serviceCIDRNetv6 *net.IPNet
- // Todo: use FeatureGate to check if IPv6 is enabled and then read configuration item "ServiceCIDRv6".
if o.config.ServiceCIDRv6 != "" {
_, serviceCIDRNetv6, _ = net.ParseCIDR(o.config.ServiceCIDRv6)
}
@@ -182,6 +182,11 @@ func run(o *Options) error {
// cause the stopCh channel to be closed; if another signal is received before the program
// exits, we will force exit.
stopCh := signals.RegisterSignalHandlers()
+ // Generate a context for functions which require one (instead of stopCh).
+ // We cancel the context when the function returns, which in the normal case will be when
+ // stopCh is closed.
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
// Get all available NodePort addresses.
var nodePortAddressesIPv4, nodePortAddressesIPv6 []net.IP
@@ -191,6 +196,12 @@ func run(o *Options) error {
return fmt.Errorf("getting available NodePort IP addresses failed: %v", err)
}
}
+ serviceConfig := &config.ServiceConfig{
+ ServiceCIDR: serviceCIDRNet,
+ ServiceCIDRv6: serviceCIDRNetv6,
+ NodePortAddressesIPv4: nodePortAddressesIPv4,
+ NodePortAddressesIPv6: nodePortAddressesIPv6,
+ }
// Initialize agent and node network.
agentInitializer := agent.NewInitializer(
@@ -202,17 +213,14 @@ func run(o *Options) error {
o.config.OVSBridge,
o.config.HostGateway,
o.config.DefaultMTU,
- serviceCIDRNet,
- serviceCIDRNetv6,
networkConfig,
wireguardConfig,
egressConfig,
+ serviceConfig,
networkReadyCh,
stopCh,
features.DefaultFeatureGate.Enabled(features.AntreaProxy),
o.config.AntreaProxy.ProxyAll,
- nodePortAddressesIPv4,
- nodePortAddressesIPv6,
connectUplinkToBridge)
err = agentInitializer.Initialize()
if err != nil {
@@ -362,9 +370,11 @@ func run(o *Options) error {
o.config.HostProcPathPrefix,
nodeConfig,
k8sClient,
- isChaining,
- enableBridgingMode, // activate AntreaIPAM in CNIServer when bridging mode is enabled
routeClient,
+ isChaining,
+ enableBridgingMode,
+ enableAntreaIPAM,
+ o.config.DisableTXChecksumOffload,
networkReadyCh)
var cniPodInfoStore cnipodcache.CNIPodInfoStore
@@ -472,7 +482,7 @@ func run(o *Options) error {
go cniServer.Run(stopCh)
- go antreaClientProvider.Run(stopCh)
+ go antreaClientProvider.Run(ctx)
go nodeRouteController.Run(stopCh)
@@ -493,15 +503,11 @@ func run(o *Options) error {
go nplController.Run(stopCh)
}
- // Now Antrea IPAM is used only by bridging mode, so we initialize AntreaIPAMController only
- // when the bridging mode is enabled.
- if enableBridgingMode {
+ // Antrea IPAM is needed by bridging mode and secondary network IPAM.
+ if enableAntreaIPAM {
ipamController, err := ipam.InitializeAntreaIPAMController(
- k8sClient,
- crdClient,
- informerFactory,
- localPodInformer,
- crdInformerFactory)
+ crdClient, informerFactory, crdInformerFactory,
+ localPodInformer, enableBridgingMode)
if err != nil {
return fmt.Errorf("failed to start Antrea IPAM agent: %v", err)
}
@@ -579,11 +585,14 @@ func run(o *Options) error {
}
mcastController := multicast.NewMulticastController(
ofClient,
+ v4GroupIDAllocator,
nodeConfig,
ifaceStore,
multicastSocket,
- sets.NewString(append(o.config.MulticastInterfaces, nodeConfig.NodeTransportInterfaceName)...),
- ovsBridgeClient)
+ sets.NewString(append(o.config.Multicast.MulticastInterfaces, nodeConfig.NodeTransportInterfaceName)...),
+ ovsBridgeClient,
+ podUpdateChannel,
+ o.igmpQueryInterval)
if err := mcastController.Initialize(); err != nil {
return err
}
@@ -612,6 +621,7 @@ func run(o *Options) error {
apiServer, err := apiserver.New(
agentQuerier,
networkPolicyController,
+ externalIPController,
o.config.APIPort,
*o.config.EnablePrometheusMetrics,
o.config.ClientConnection.Kubeconfig,
@@ -624,17 +634,8 @@ func run(o *Options) error {
}
go apiServer.Run(stopCh)
- // Start PacketIn for features and specify their own reason.
- var packetInReasons []uint8
- if features.DefaultFeatureGate.Enabled(features.Traceflow) {
- packetInReasons = append(packetInReasons, uint8(openflow.PacketInReasonTF))
- }
- if features.DefaultFeatureGate.Enabled(features.AntreaPolicy) {
- packetInReasons = append(packetInReasons, uint8(openflow.PacketInReasonNP))
- }
- if len(packetInReasons) > 0 {
- go ofClient.StartPacketInHandler(packetInReasons, stopCh)
- }
+ // Start PacketIn
+ go ofClient.StartPacketInHandler(stopCh)
// Start the goroutine to periodically export IPFIX flow records.
if features.DefaultFeatureGate.Enabled(features.FlowExporter) {
diff --git a/cmd/antrea-agent/main.go b/cmd/antrea-agent/main.go
index 5387996e1eb..7035eb40dc2 100644
--- a/cmd/antrea-agent/main.go
+++ b/cmd/antrea-agent/main.go
@@ -18,11 +18,9 @@
package main
import (
- "flag"
"os"
"github.com/spf13/cobra"
- "k8s.io/component-base/logs"
"k8s.io/klog/v2"
"antrea.io/antrea/pkg/log"
@@ -30,12 +28,8 @@ import (
)
func main() {
- logs.InitLogs()
- defer logs.FlushLogs()
-
command := newAgentCommand()
if err := command.Execute(); err != nil {
- logs.FlushLogs()
os.Exit(1)
}
}
@@ -47,7 +41,8 @@ func newAgentCommand() *cobra.Command {
Use: "antrea-agent",
Long: "The Antrea agent runs on each node.",
Run: func(cmd *cobra.Command, args []string) {
- log.InitLogFileLimits(cmd.Flags())
+ log.InitLogs(cmd.Flags())
+ defer log.FlushLogs()
if err := opts.complete(args); err != nil {
klog.Fatalf("Failed to complete: %v", err)
}
@@ -64,7 +59,5 @@ func newAgentCommand() *cobra.Command {
flags := cmd.Flags()
opts.addFlags(flags)
log.AddFlags(flags)
- // Install log flags
- flags.AddGoFlagSet(flag.CommandLine)
return cmd
}
diff --git a/cmd/antrea-agent/options.go b/cmd/antrea-agent/options.go
index 988b8a3b832..fbc7c7784d0 100644
--- a/cmd/antrea-agent/options.go
+++ b/cmd/antrea-agent/options.go
@@ -47,6 +47,7 @@ const (
defaultFlowPollInterval = 5 * time.Second
defaultActiveFlowExportTimeout = 30 * time.Second
defaultIdleFlowExportTimeout = 15 * time.Second
+ defaultIGMPQueryInterval = 125 * time.Second
defaultStaleConnectionTimeout = 5 * time.Minute
defaultNPLPortRange = "61000-62000"
)
@@ -68,6 +69,7 @@ type Options struct {
idleFlowTimeout time.Duration
// Stale connection timeout to delete connections if they are not exported.
staleConnectionTimeout time.Duration
+ igmpQueryInterval time.Duration
nplStartPort int
nplEndPort int
}
@@ -161,6 +163,9 @@ func (o *Options) validate(args []string) error {
if err := o.validateFlowExporterConfig(); err != nil {
return fmt.Errorf("failed to validate flow exporter config: %v", err)
}
+ if err := o.validateMulticastConfig(); err != nil {
+ return fmt.Errorf("failed to validate multicast config: %v", err)
+ }
if features.DefaultFeatureGate.Enabled(features.Egress) {
for _, cidr := range o.config.Egress.ExceptCIDRs {
_, _, err := net.ParseCIDR(cidr)
@@ -271,6 +276,12 @@ func (o *Options) setDefaults() {
o.config.NodePortLocal.PortRange = defaultNPLPortRange
}
}
+
+ if features.DefaultFeatureGate.Enabled(features.Multicast) {
+ if o.config.Multicast.IGMPQueryInterval == "" {
+ o.igmpQueryInterval = defaultIGMPQueryInterval
+ }
+ }
}
func (o *Options) validateAntreaProxyConfig() error {
@@ -351,13 +362,25 @@ func (o *Options) validateFlowExporterConfig() error {
return nil
}
+func (o *Options) validateMulticastConfig() error {
+ if features.DefaultFeatureGate.Enabled(features.Multicast) {
+ var err error
+ if o.config.Multicast.IGMPQueryInterval != "" {
+ o.igmpQueryInterval, err = time.ParseDuration(o.config.Multicast.IGMPQueryInterval)
+ if err != nil {
+ return err
+ }
+ }
+ }
+ return nil
+}
+
func (o *Options) validateAntreaIPAMConfig() error {
if !o.config.EnableBridgingMode {
return nil
}
if !features.DefaultFeatureGate.Enabled(features.AntreaIPAM) {
- klog.InfoS("The enableBridgingMode option is set to true, but it will be ignored because the AntreaIPAM feature gate is disabled")
- return nil
+ return fmt.Errorf("AntreaIPAM feature gate must be enabled to configure bridging mode")
}
// Bridging mode will connect uplink to OVS bridge, which is not compatible with OVSDatapathSystem 'netdev'.
if o.config.OVSDatapathType != string(ovsconfig.OVSDatapathSystem) {
diff --git a/cmd/antrea-controller/controller.go b/cmd/antrea-controller/controller.go
index 121c44b8e01..25b75bca3bb 100644
--- a/cmd/antrea-controller/controller.go
+++ b/cmd/antrea-controller/controller.go
@@ -15,6 +15,7 @@
package main
import (
+ "context"
"fmt"
"io/ioutil"
"net"
@@ -244,6 +245,11 @@ func run(o *Options) error {
// cause the stopCh channel to be closed; if another signal is received before the program
// exits, we will force exit.
stopCh := signals.RegisterSignalHandlers()
+ // Generate a context for functions which require one (instead of stopCh).
+ // We cancel the context when the function returns, which in the normal case will be when
+ // stopCh is closed.
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
log.StartLogFileNumberMonitor(stopCh)
@@ -262,7 +268,7 @@ func run(o *Options) error {
go networkPolicyController.Run(stopCh)
- go apiServer.Run(stopCh)
+ go apiServer.Run(ctx)
if features.DefaultFeatureGate.Enabled(features.NetworkPolicyStats) {
go statsAggregator.Run(stopCh)
diff --git a/cmd/antrea-controller/main.go b/cmd/antrea-controller/main.go
index 2b350c41108..8ac508bbe9d 100644
--- a/cmd/antrea-controller/main.go
+++ b/cmd/antrea-controller/main.go
@@ -18,11 +18,9 @@
package main
import (
- "flag"
"os"
"github.com/spf13/cobra"
- "k8s.io/component-base/logs"
"k8s.io/klog/v2"
"antrea.io/antrea/pkg/log"
@@ -30,13 +28,8 @@ import (
)
func main() {
- logs.InitLogs()
- defer logs.FlushLogs()
-
command := newControllerCommand()
-
if err := command.Execute(); err != nil {
- logs.FlushLogs()
os.Exit(1)
}
}
@@ -48,7 +41,8 @@ func newControllerCommand() *cobra.Command {
Use: "antrea-controller",
Long: "The Antrea Controller.",
Run: func(cmd *cobra.Command, args []string) {
- log.InitLogFileLimits(cmd.Flags())
+ log.InitLogs(cmd.Flags())
+ defer log.FlushLogs()
if err := opts.complete(args); err != nil {
klog.Fatalf("Failed to complete: %v", err)
}
@@ -65,7 +59,5 @@ func newControllerCommand() *cobra.Command {
flags := cmd.Flags()
opts.addFlags(flags)
log.AddFlags(flags)
- // Install log flags
- flags.AddGoFlagSet(flag.CommandLine)
return cmd
}
diff --git a/cmd/flow-aggregator/main.go b/cmd/flow-aggregator/main.go
index 24c6439e113..4868c0820fc 100644
--- a/cmd/flow-aggregator/main.go
+++ b/cmd/flow-aggregator/main.go
@@ -18,11 +18,9 @@
package main
import (
- "flag"
"os"
"github.com/spf13/cobra"
- "k8s.io/component-base/logs"
"k8s.io/klog/v2"
"antrea.io/antrea/pkg/log"
@@ -30,13 +28,8 @@ import (
)
func main() {
- logs.InitLogs()
- defer logs.FlushLogs()
-
command := newFlowAggregatorCommand()
-
if err := command.Execute(); err != nil {
- logs.FlushLogs()
os.Exit(1)
}
}
@@ -48,7 +41,8 @@ func newFlowAggregatorCommand() *cobra.Command {
Use: "flow-aggregator",
Long: "The Flow Aggregator.",
Run: func(cmd *cobra.Command, args []string) {
- log.InitLogFileLimits(cmd.Flags())
+ log.InitLogs(cmd.Flags())
+ defer log.FlushLogs()
if err := opts.complete(args); err != nil {
klog.Fatalf("Failed to complete args: %v", err)
}
@@ -65,7 +59,5 @@ func newFlowAggregatorCommand() *cobra.Command {
flags := cmd.Flags()
opts.addFlags(flags)
log.AddFlags(flags)
- // Install log flags
- flags.AddGoFlagSet(flag.CommandLine)
return cmd
}
diff --git a/docs/antrea-ipam.md b/docs/antrea-ipam.md
index 6cf76d8b6cc..a63a1110d1d 100644
--- a/docs/antrea-ipam.md
+++ b/docs/antrea-ipam.md
@@ -93,7 +93,7 @@ Antrea deployment YAML are:
#### Create IPPool CR
-The following example YAML manifests create an IPPool CR.
+The following example YAML manifest creates an IPPool CR.
```yaml
apiVersion: "crd.antrea.io/v1alpha2"
@@ -112,7 +112,7 @@ spec:
#### IPPool Annotations on Namespace
-The following example YAML manifests create a Namespace to allocate Pod IPs from the IP pool.
+The following example YAML manifest creates a Namespace to allocate Pod IPs from the IP pool.
```yaml
kind: Namespace
@@ -214,3 +214,165 @@ IP, because inter-Node traffic of AntreaIPAM Pods is forwarded by the Node netwo
router should provide the network connectivity for these VLANs. Only a single IP pool can
be included in the Namespace annotation. In the future, annotation of up to two pools for
IPv4 and IPv6 respectively will be supported.
+
+## IPAM for Secondary Network
+
+With the AntreaIPAM feature, Antrea can allocate IPs for Pod secondary networks. At the
+moment, AntreaIPAM supports secondary networks managed by [Multus](https://github.com/k8snetworkplumbingwg/multus-cni),
+we will add support for [secondary networks managed by Antrea](feature-gates.md#secondarynetwork)
+in the future.
+
+### Prerequisites
+
+The IPAM capability for secondary network was added in Antrea version 1.7. It
+requires the `AntreaIPAM` feature gate to be enabled on both `antrea-controller`
+and `antrea-agent`, as `AntreaIPAM` is still an alpha feature at this moment and
+is not enabled by default.
+
+### CNI IPAM configuration
+
+To configure Antrea IPAM, `antrea` should be specified as the IPAM plugin in the
+the CNI IPAM configuration, and at least one Antrea IPPool should be specified
+in the `ippools` field. IPs will be allocated from the specified IPPool(s) for
+the secondary network.
+
+```json
+{
+ "cniVersion": "0.3.0",
+ "name": "ipv4-net-1",
+ "type": "macvlan",
+ "master": "eth0",
+ "mode": "bridge",
+ "ipam": {
+ "type": "antrea",
+ "ippools": [ "ipv4-pool-1" ]
+ }
+}
+```
+
+Multiple IPPools can be specified to allocate multiple IPs from each IPPool for
+the secondary network. For example, you can specify one IPPool to allocate an
+IPv4 address and another IPPool to allocate an IPv6 address in the dual-stack
+case.
+
+```json
+{
+ "cniVersion": "0.3.0",
+ "name": "dual-stack-net-1",
+ "type": "macvlan",
+ "master": "eth0",
+ "mode": "bridge",
+ "ipam": {
+ "type": "antrea",
+ "ippools": [ "ipv4-pool-1", "ipv6-pool-1" ]
+ }
+}
+```
+
+Additionally, Antrea IPAM also supports the same configuration of static IP
+addresses, static routes, and DNS settings, as what is supported by the
+[static IPAM plugin](https://www.cni.dev/plugins/current/ipam/static). The
+following example requests an IP from an IPPool and also specifies two
+additional static IP addresses. It also includes static routes and DNS settings.
+
+```json
+{
+ "cniVersion": "0.3.0",
+ "name": "pool-and-static-net-1",
+ "type": "bridge",
+ "bridge": "br0"
+ "ipam": {
+ "type": "antrea",
+ "ippools": [ "ipv4-pool-1" ],
+ "addresses": [
+ {
+ "address": "10.10.0.1/24",
+ "gateway": "10.10.0.254"
+ },
+ {
+ "address": "3ffe:ffff:0:01ff::1/64",
+ "gateway": "3ffe:ffff:0::1"
+ }
+ ],
+ "routes": [
+ { "dst": "0.0.0.0/0" },
+ { "dst": "192.168.0.0/16", "gw": "10.10.5.1" },
+ { "dst": "3ffe:ffff:0:01ff::1/64" }
+ ],
+ "dns": {
+ "nameservers" : ["8.8.8.8"],
+ "domain": "example.com",
+ "search": [ "example.com" ]
+ }
+ }
+}
+```
+
+The CNI IPAM configuration can include only static addresses without IPPools, if
+only static IP addresses are needed.
+
+### Configuration with `NetworkAttachmentDefinition` CRD
+
+CNI and IPAM configuration of a secondary network is typically defined with the
+`NetworkAttachmentDefinition` CRD. For example:
+
+```yaml
+apiVersion: "k8s.cni.cncf.io/v1"
+kind: NetworkAttachmentDefinition
+metadata:
+ name: ipv4-net-1
+spec:
+ {
+ "cniVersion": "0.3.0",
+ "type": "macvlan",
+ "master": "eth0",
+ "mode": "bridge",
+ "ipam": {
+ "type": "antrea",
+ "ippools": [ "ipv4-pool-1" ]
+ }
+ }
+```
+
+## `IPPool` CRD
+
+Antrea IP pools are defined with the `IPPool` CRD. The following two examples
+define an IPv4 and an IPv6 IP pool respectively.
+
+```yaml
+apiVersion: "crd.antrea.io/v1alpha2"
+kind: IPPool
+metadata:
+ name: ipv4-pool-1
+spec:
+ ipVersion: 4
+ ipRanges:
+ - cidr: "10.10.1.0/26"
+ gateway: "10.10.1.1"
+ prefixLength: 24
+```
+
+```yaml
+apiVersion: "crd.antrea.io/v1alpha2"
+kind: IPPool
+metadata:
+ name: ipv6-pool-1
+spec:
+ ipVersion: 6
+ ipRanges:
+ - start: "3ffe:ffff:1:01ff::0100"
+ end: "3ffe:ffff:1:01ff::0200"
+ gateway: "3ffe:ffff:1:01ff::1"
+ prefixLength: 64
+```
+
+VLAN ID in the IP range subnet definition of `IPPool` CRD is not supported for
+secondary network IPAM.
+
+### Secondary Network creation with Multus
+
+To leverage Antrea for secondary network IPAM, Antrea must be used as the CNI
+for the Pods' primary network, while the secondary networks are implemented by
+other CNIs which are managed by Multus. The [Antrea + Multus guide](cookbooks/multus)
+talks about how to use Antrea with Multus, including the option of using Antrea
+IPAM for secondary networks.
diff --git a/docs/antrea-network-policy.md b/docs/antrea-network-policy.md
index 1e3304d7950..f2ff83ceb86 100644
--- a/docs/antrea-network-policy.md
+++ b/docs/antrea-network-policy.md
@@ -16,6 +16,7 @@
- [ACNP for strict Namespace isolation](#acnp-for-strict-namespace-isolation)
- [ACNP for default zero-trust cluster security posture](#acnp-for-default-zero-trust-cluster-security-posture)
- [ACNP for toServices rule](#acnp-for-toservices-rule)
+ - [ACNP for ICMP traffic](#acnp-for-icmp-traffic)
- [Behavior of to and from selectors](#behavior-of-to-and-from-selectors)
- [Key differences from K8s NetworkPolicy](#key-differences-from-k8s-networkpolicy)
- [kubectl commands for Antrea ClusterNetworkPolicy](#kubectl-commands-for-antrea-clusternetworkpolicy)
@@ -381,6 +382,33 @@ spec:
enableLogging: true
```
+#### ACNP for ICMP traffic
+
+```yaml
+apiVersion: crd.antrea.io/v1alpha1
+kind: ClusterNetworkPolicy
+metadata:
+ name: acnp-reject-ping-request
+spec:
+ priority: 5
+ tier: securityops
+ appliedTo:
+ - podSelector:
+ matchLabels:
+ role: server
+ namespaceSelector:
+ matchLabels:
+ env: prod
+ egress:
+ - action: Reject
+ protocols:
+ - icmp:
+ icmpType: 8
+ icmpCode: 0
+ name: DropPingRequest
+ enableLogging: true
+```
+
**spec**: The ClusterNetworkPolicy `spec` has all the information needed to
define a cluster-wide security policy.
@@ -423,7 +451,7 @@ default tier i.e. the "application" Tier.
**action**: Each ingress or egress rule of a ClusterNetworkPolicy must have the
`action` field set. As of now, the available actions are ["Allow", "Drop", "Reject", "Pass"].
When the rule action is "Allow" or "Drop", Antrea will allow or drop traffic which
-matches both `from/to` and `ports` sections of that rule, given that traffic does not
+matches both `from/to`, `ports` and `protocols` sections of that rule, given that traffic does not
match a higher precedence rule in the cluster (ACNP rules created in higher order
Tiers or policy instances in the same Tier with lower priority number). If a "Reject"
rule is matched, the client initiating the traffic will receive `ICMP host administratively
@@ -439,6 +467,9 @@ configurations will be rejected by the admission controller.
**ingress**: Each ClusterNetworkPolicy may consist of zero or more ordered set of
ingress rules. Under `ports`, the optional field `endPort` can only be set when a
numerical `port` is set to represent a range of ports from `port` to `endPort` inclusive.
+`protocols` defines additional protocols that are not supported by `ports`. Currently, only
+ICMP protocol is under `protocols`. `icmpType` and `icmpCode` could be used to specify the ICMP
+traffic that this rule matches.
Also, each rule has an optional `name` field, which should be unique within
the policy describing the intention of this rule. If `name` is not provided for
a rule, it will be auto-generated by Antrea. The auto-generated name will be
@@ -470,6 +501,9 @@ of egress rules. Each rule, depending on the `action` field of the rule, allows
or drops traffic which matches all `from`, `ports` sections.
Under `ports`, the optional field `endPort` can only be set when a numerical `port`
is set to represent a range of ports from `port` to `endPort` inclusive.
+`protocols` defines additional protocols that are not supported by `ports`. Currently, only
+ICMP protocol is under `protocols`. `icmpType` and `icmpCode` could be used to specify the ICMP
+traffic that this rule matches.
Also, each rule has an optional `name` field, which should be unique within
the policy describing the intention of this rule. If `name` is not provided for
a rule, it will be auto-generated by Antrea. The rule name auto-generation process
diff --git a/docs/antrea-proxy.md b/docs/antrea-proxy.md
new file mode 100644
index 00000000000..c504d7ec84b
--- /dev/null
+++ b/docs/antrea-proxy.md
@@ -0,0 +1,219 @@
+# AntreaProxy
+
+## Table of Contents
+
+
+- [Introduction](#introduction)
+- [AntreaProxy with proxyAll](#antreaproxy-with-proxyall)
+ - [Removing kube-proxy](#removing-kube-proxy)
+ - [Windows Nodes](#windows-nodes)
+- [Special use cases](#special-use-cases)
+ - [When you are using NodeLocal DNSCache](#when-you-are-using-nodelocal-dnscache)
+ - [When you want your external LoadBalancer to handle Pod traffic](#when-you-want-your-external-loadbalancer-to-handle-pod-traffic)
+- [Known issues or limitations](#known-issues-or-limitations)
+
+
+## Introduction
+
+AntreaProxy was first introduced in Antrea v0.8 and has been enabled by default
+on all platforms since v0.11. AntreaProxy enables some or all of the cluster's
+Service traffic to be load-balanced as part of the OVS pipeline, instead of
+depending on kube-proxy. We typically observe latency improvements for Service
+traffic when AntreaProxy is used.
+
+While AntreaProxy can be disabled on Linux Nodes by setting the `AntreaProxy`
+Feature Gate to `false`, it should remain enabled on all Windows Nodes, as it is
+needed for correct NetworkPolicy implementation for Pod-to-Service traffic.
+
+By default, AntreaProxy will only handle Service traffic originating from Pods
+in the cluster, with no support for NodePort. However, starting with Antrea
+v1.4, a new operating mode was introduced in which AntreaProxy can handle all
+Service traffic, including NodePort. See the following
+[section](#antreaproxy-with-proxyall) for more information.
+
+## AntreaProxy with proxyAll
+
+The `proxyAll` configuration parameter can be enabled in the Antrea
+configuration if you want AntreaProxy to handle all Service traffic, with the
+possibility to remove kube-proxy altogether and have one less DaemonSet running
+in the cluster. This is particularly interesting on Windows Nodes, since until
+the introduction of `proxyAll`, Antrea relied on userspace kube-proxy, which is
+no longer actively maintained by the K8s community and is slower than other
+kube-proxy backends.
+
+Note that on Linux, even when `proxyAll` is enabled, kube-proxy will usually
+take priority and will keep handling NodePort Service traffic (unless the source
+is a Pod, which is pretty unusual as Pods typically access Services by
+ClusterIP). This is because kube-proxy rules typically come before the rules
+installed by AntreaProxy to redirect traffic to OVS. When kube-proxy is not
+deployed or is removed from the cluster, AntreaProxy will then handle all
+Service traffic.
+
+### Removing kube-proxy
+
+In this section, we will provide steps to run a K8s cluster without kube-proxy,
+with Antrea being responsible for all Service traffic.
+
+You can create a K8s cluster without kube-proxy with kubeadm as follows:
+
+```bash
+kubeadm init --skip-phases=addon/kube-proxy
+```
+
+To remove kube-proxy from an existing cluster, you can use the following steps:
+
+```bash
+# Delete the kube-proxy DaemonSet
+kubectl -n kube-system delete ds/kube-proxy
+# Delete the kube-proxy ConfigMap to prevent kube-proxy from being re-deployed
+# by kubeadm during "upgrade apply". This workaround will not take effect for
+# kubeadm versions older than v1.19 as the following patch is required:
+# https://github.com/kubernetes/kubernetes/pull/89593
+kubectl -n kube-system delete cm/kube-proxy
+# Delete existing kube-proxy rules; there are several options for doing that
+# Option 1 (if using kube-proxy in iptables mode), run the following on each Node:
+iptables-save | grep -v KUBE | iptables-restore
+# Option 2 (any mode), restart all Nodes
+# Option 3 (any mode), run the following on each Node:
+kube-proxy --cleanup
+# You can create a DeamonSet to easily run the above command on all Nodes, using
+# the kube-proxy container image
+```
+
+You will then need to deploy [Antrea](getting-started.md), after making the
+necessary changes to the `antrea-config` ConfigMap:
+
+```yaml
+kind: ConfigMap
+apiVersion: v1
+metadata:
+ name: antrea-config
+ namespace: kube-system
+data:
+ antrea-agent.conf: |
+ kubeAPIServerOverride: ""
+ antreaProxy:
+ proxyAll: true
+```
+
+The `kubeAPIServerOverride` option will enable the Antrea Agent to connect to
+the K8s apiserver. This is required now that kube-proxy is no longer running and
+that the Antrea Agent can no longer use the ClusterIP for the `kubernetes`
+Service during initialization. If you are unsure about which values to use, take
+a look at your Kubeconfig file, and look for a line like this one:
+
+```yaml
+...
+ server: https://192.168.77.100:6443
+...
+```
+
+Then use this value as is (e.g., `"https://192.168.77.100:6443"`) for
+`kubeAPIServerOverride`.
+
+And that's it! All you have to do now is make sure that the `antrea-agent` Pods
+came up correctly and perhaps validate that NodePort Services can be accessed
+correctly.
+
+#### Windows Nodes
+
+Assuming you are following the steps we [documented](windows.md) to add Windows
+Nodes to your K8s cluster with Antrea, you will simply need to skip running
+kube-proxy:
+
+* Do not install or start the `kube-proxy` service [when using containderd as
+ the container runtime](windows.md#installation-as-a-service-containerd-based-runtimes)
+* Do not create the `kube-proxy-windows` DaemonSet [when using Docker as the
+ container runtime](windows.md#installation-via-wins-docker-based-runtimes)
+
+## Special use cases
+
+### When you are using NodeLocal DNSCache
+
+[NodeLocal DNSCache](https://kubernetes.io/docs/tasks/administer-cluster/nodelocaldns/)
+improves performance of DNS queries in a K8s cluster by running a DNS cache on
+each Node. DNS queries are intercepted by a local instance of CoreDNS, which
+forwards the requests to CoreDNS (cluster local queries) or the upstream DNS
+server in case of a cache miss.
+
+The way it works (normally) is by assigning the the kube-dns ClusterIP to a
+local "dummy" interface, and installing iptables rules to disable connection
+tracking for the queries and bypass kube-proxy. The local CoreDNS instance is
+configured to bind to that address and can therefore intercept queries. In case
+of a cache miss, queries can be sent to the cluster CoreDNS Pods thanks to a
+"shadow" Service which will expose CoreDNS Pods via a new ClusterIP.
+
+When AntreaProxy is enabled (default), Pod DNS queries to the kube-dns ClusterIP
+will be load-balanced directly by AntreaProxy to a CoreDNS Pod endpoint. This
+means that NodeLocal DNSCache is completely bypassed, which is probably not
+acceptable for users who want to leverage this feature to improve DNS
+performance in their clusters. While these users can update the Pod
+configuration to use the local IP assigned by NodeLocal DNSCache to the "dummy"
+interface, this is not always ideal in the context of CaaS, as it can require
+everyone running Pods in the cluster to be aware of the situation.
+
+This is the reason why we initially introduced the `skipServices` configuration
+option for AntreaProxy in Antrea v1.4. By adding the kube-dns Service (which
+exposes CoreDNS) to the list, you can ensure that AntreaProxy will "ignore" Pod
+DNS queries, and that they will be forwarded to NodeLocal DNSCache. You can edit
+the `antrea-config` ConfigMap as follows:
+
+```yaml
+kind: ConfigMap
+apiVersion: v1
+metadata:
+ name: antrea-config
+ namespace: kube-system
+data:
+ antrea-agent.conf: |
+ antreaProxy:
+ skipServices: ["kube-system/kube-dns"]
+```
+
+### When you want your external LoadBalancer to handle Pod traffic
+
+In some cases, the external LoadBalancer for a cluster provides additional
+capabilities (e.g., TLS termination) and it is desirable for Pods to access
+in-cluster Services through the external LoadBalancer. By default, this is not
+the case as both kube-proxy and AntreaProxy will install rules to load-balance
+this traffic directly at the source Node (even when the destination IP is set to
+the external `loadBalancerIP`). To circumvent this behavior, we introduced the
+`proxyLoadBalancerIPs` configuration option for AntreaProxy in Antrea v1.5. This
+option defaults to `true`, but when setting it to `false`, AntreaProxy will no
+longer load-balance traffic destined to external `loadBalancerIP`s, hence
+ensuring that this traffic can go to the external LoadBalancer. You can set it
+to `false` by editing the `antrea-config` ConfigMap as follows:
+
+```yaml
+kind: ConfigMap
+apiVersion: v1
+metadata:
+ name: antrea-config
+ namespace: kube-system
+data:
+ antrea-agent.conf: |
+ antreaProxy:
+ proxyLoadBalancerIPs: false
+```
+
+There are two important prerequisites for this feature:
+
+* You must enable `proxyAll` and [remove kube-proxy](#removing-kube-proxy) from
+ the cluster, otherwise kube-proxy will still load-balance the traffic and you
+ will not achieve the desired behavior.
+* Your external LoadBalancer must SNAT the traffic, in order for the reply
+ traffic to go back through the external LoadBalancer.
+
+## Known issues or limitations
+
+* Due to some restrictions on the implementation of Services in Antrea, the
+ maximum number of Endpoints that Antrea can support at the moment is 800. If
+ the number of Endpoints for a given Service exceeds 800, extra Endpoints will
+ be dropped (with non-local Endpoints being dropped in priority by each Antrea
+ Agent). This will be fixed eventually.
+* Due to some restrictions on the implementation of Services in Antrea, the
+ maximum timeout value supported for ClientIP-based Service SessionAffinity is
+ 65535 seconds (the K8s Service specs allow values up to 86400 seconds). Values
+ greater than 65535 seconds will be truncated and the Antrea Agent will log a
+ warning. [We do not intend to address this
+ limitation](https://github.com/antrea-io/antrea/issues/1578).
diff --git a/docs/assets/README.md b/docs/assets/README.md
index 1fde9d1a36a..61dc9ea7d40 100644
--- a/docs/assets/README.md
+++ b/docs/assets/README.md
@@ -3,7 +3,7 @@
## SVG images
The SVG images / diagrams in this directory have been created using
-[Inkscape](https://inkscape.org/) and exported as PNG files - which can be embedded in Makrdown
+[Inkscape](https://inkscape.org/) and exported as PNG files - which can be embedded in Markdown
files. If you edit these images, please re-export them as PNG with a 300 dpi resolution. If you
create new SVG images / diagrams for documentation, please check-in both the SVG source and the
exported PNG file.
diff --git a/docs/assets/adopters/infrabuilder-logo.png b/docs/assets/adopters/infrabuilder-logo.png
deleted file mode 100644
index 2e81c08eaf2..00000000000
Binary files a/docs/assets/adopters/infrabuilder-logo.png and /dev/null differ
diff --git a/docs/assets/adopters/terasky-logo.png b/docs/assets/adopters/terasky-logo.png
new file mode 100644
index 00000000000..d26875f4d23
Binary files /dev/null and b/docs/assets/adopters/terasky-logo.png differ
diff --git a/docs/assets/adopters/transwarp-logo.png b/docs/assets/adopters/transwarp-logo.png
new file mode 100644
index 00000000000..072541113c0
Binary files /dev/null and b/docs/assets/adopters/transwarp-logo.png differ
diff --git a/docs/assets/flow_visibility.svg b/docs/assets/flow_visibility.svg
index 25e094b13fa..fdbb990a46f 100644
--- a/docs/assets/flow_visibility.svg
+++ b/docs/assets/flow_visibility.svg
@@ -5,8 +5,8 @@
viewBox="0 0 672.09662 383.12097"
version="1.1"
id="svg8"
- inkscape:version="1.1-dev (b39e6d56, 2020-09-19)"
- sodipodi:docname="flow_exporter.svg"
+ inkscape:version="1.1.2 (b8e25be8, 2022-02-05)"
+ sodipodi:docname="flow_visibility.svg"
inkscape:export-filename="/Users/stati/work/antrea_all/flow_exporter.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
@@ -17,6 +17,7 @@
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
+
+ lock-margins="false"
+ inkscape:lockguides="false">
+ style="display:inline">
+ style="display:none">
K8s Cluster
+ y="-59.720242"
+ id="tspan137496">K8s Cluster
Kubelet
+ y="115.46043"
+ id="tspan137498">Kubelet
(ELK Flow Collector)
+ id="tspan6290">(Flow Collector)
+ inkscape:label="TextAsPath">
@@ -1541,8 +1541,7 @@ Daemon Set"
id="path3687" />
@@ -1584,8 +1583,7 @@ CNI"
id="path3672" />
@@ -1803,242 +1801,261 @@ Exporter"
id="path3575" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -2148,8 +2165,7 @@ Records"
id="path3441" />
@@ -2203,8 +2219,7 @@ Pods"
id="path3388" />
@@ -2274,8 +2289,7 @@ Server"
id="path3363" />
@@ -2353,10 +2367,7 @@ Metrics"
id="path3330" />
@@ -2478,8 +2489,7 @@ Aggregator
id="path3293" />
diff --git a/docs/assets/hns_integration.svg b/docs/assets/hns_integration.svg
index 42272c33289..172b49e2c42 100644
--- a/docs/assets/hns_integration.svg
+++ b/docs/assets/hns_integration.svg
@@ -15,6 +15,7 @@
viewBox="0 0 160.96114 113.4893"
version="1.1"
id="svg8">
+
+
+