Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .ci/buildspec.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ phases:
build:
commands:
- make go-check
- make mdlint

- make -C vpp-manager clean-vpp
- make images
Expand Down
25 changes: 15 additions & 10 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,22 +7,27 @@ assignees: ''

---

**Environment**
- Calico/VPP version:
- Kubernetes version:
## Environment

- Calico version:
- Calico/VPP version:
- Kubernetes version:
- Deployment type: cloud, hosted, VM, bare-metal...
- Network configuration: Calico / host-local IPAM? IPIP / VXLAN enabled? Specific BGP settings?
- Network configuration (flat,IPIP,VXLAN,Wireguard,Ipsec):
- Custom options (IPAM, BGP ?):

## Issue description

**Issue description**
A clear and concise description of what the problem is.

**To Reproduce**
## To Reproduce

Steps to reproduce the behavior:
- ...
- ...

**Expected behavior**
## Expected behavior

A clear and concise description of what you expected to happen.

**Additional context**
## Additional context

Add any other useful information about the problem or your deployment here.
18 changes: 12 additions & 6 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,20 @@ assignees: ''

---

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
## Is your feature request related to a problem? Please describe

A clear and concise description of what the problem is
e.g. I'm always frustrated when [...]

## Describe the solution you'd like

**Describe the solution you'd like**
A clear and concise description of what you want to happen.

**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
## Describe alternatives you've considered

A clear and concise description of any alternative
solutions or features you've considered.

## Additional context

**Additional context**
Add any other context about the feature request here.
17 changes: 12 additions & 5 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
Thank you for considering contributing to Calico/VPP! Please follow these steps for an efficient contribution:
# Contributing

1) Open an issue describing the fix or improvement you would like to make, that describes your proposed approach
as well as any other approaches you have considered. A maintainer will reply to discuss the contribution.
2) Once the maintainer agrees on the approach, please submit a pull request and notify the maintainer. We will
then review your pull request, potentially make some comments, and merge it once you address all comments.
Thank you for considering contributing to Calico/VPP! Please follow these
steps for an efficient contribution:

1) Open an issue describing the fix or improvement you would like to make,
that describes your proposed approach
as well as any other approaches you have considered. A maintainer will reply
to discuss the contribution.
2) Once the maintainer agrees on the approach, please submit a pull request
and notify the maintainer. We will
then review your pull request, potentially make some comments, and merge it
once you address all comments.
7 changes: 7 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -338,3 +338,10 @@ go-lint: lint
.PHONY: depend-image-hash
depend-image-hash:
@echo $(DEPEND_IMAGE)

.PHONY: mdlint
mdlint:
ifdef CI_BUILD
npm install -g markdownlint-cli
endif
markdownlint --dot --ignore vpp-manager/vpp_build .
73 changes: 51 additions & 22 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,43 +1,68 @@
# Calico VPP dataplane

<!-- markdownlint-disable -->
<p float="left">
<img src="https://docs.tigera.io/img/favicon.png" width="100" height="100">
<img src="https://fd.io/img/fdio-color.svg" width="100" height="100">
</p>
<!-- markdownlint-restore -->

This repository contains the source for Calico's VPP dataplane integration. The integration is in incubation status, with significant development in progress.
This repository contains the source for Calico's VPP dataplane integration. The
integration is in incubation status, with significant development in progress.

### Integration goals
## Integration goals

The main goal of this integration is to accelerate the networking of k8s clusters that use Calico thanks to [FD.io VPP](https://fd.io/docs/vpp/master/). Nodes running the VPP dataplane provide faster networking to their pods, without requiring any changes to the applications running in the pods.
The main goal of this integration is to accelerate the networking of k8s
clusters that use Calico thanks to [FD.io VPP](https://fd.io/docs/vpp/master/).
Nodes running the VPP dataplane provide faster networking to their pods,
without requiring any changes to the applications running in the pods.

This integration aims to be as transparent as possible. In particular, the VPP dataplane does not have any additional requirements compared to regular Calico. All the networking configuration, including traffic encapsulation, IP Pools, BGP Configuration, etc. is done through regular Calico means. As a result, the docs present in this repository will only describe the VPP-specific elements.
This integration aims to be as transparent as possible. In particular, the VPP
dataplane does not have any additional requirements compared to regular Calico.
All the networking configuration, including traffic encapsulation, IP Pools,
BGP Configuration, etc. is done through regular Calico means. As a result, the
docs present in this repository will only describe the VPP-specific elements.

VPP-enabled nodes are entirely compatible with regular Calico nodes - meaning that it is possible to have a cluster with some VPP-enabled nodes and some regular nodes. This makes it easy to migrate a cluster from Linux or eBPF Calico networking to VPP-accelerated networking.
VPP-enabled nodes are entirely compatible with regular Calico nodes - meaning
that it is possible to have a cluster with some VPP-enabled nodes and some
regular nodes. This makes it easy to migrate a cluster from Linux or eBPF
Calico networking to VPP-accelerated networking.

In addition to that, the VPP Dataplane provides some additional features that are not available in Calico. For instance :
- We support very fast container traffic encryption with IPsec
- SRv6 is also supported for node to node transport
- Network intensive applications can also require [memif packet interfaces](https://s3-docs.fd.io/vpp/23.02/interfacing/libmemif/index.html) for optimized user-space networking.
- Network intensive endpoint applications (using TCP, TLS, UDP, QUIC, ...) can consume the [VPP Hoststack](https://wiki.fd.io/view/VPP/HostStack) with the VPP Client Library [VCL](https://wiki.fd.io/view/VPP/HostStack/VCL)
- Containerized network functions requiring multiple high speed interfaces can leverage [multinet](docs/multinet.md)
In addition to that, the VPP Dataplane provides some additional features that
are not available in Calico. For instance :

Finally, our goal is to make the deployment of Calico-VPP as simple as applying a YAML file through kubectl.
- We support very fast container traffic encryption with IPsec
- SRv6 is also supported for node to node transport
- Network intensive applications can also require
[memif packet interfaces](https://s3-docs.fd.io/vpp/23.02/interfacing/libmemif/index.html)
for optimized user-space networking.
- Network intensive endpoint applications (using TCP, TLS, UDP, QUIC, ...)
can consume the [VPP Hoststack](https://wiki.fd.io/view/VPP/HostStack) with the
VPP Client Library [VCL](https://wiki.fd.io/view/VPP/HostStack/VCL)
- Containerized network functions requiring multiple high speed interfaces can
leverage [multinet](docs/multinet.md)

Finally, our goal is to make the deployment of Calico-VPP as simple as applying
a YAML file through kubectl.

## Get Started Using Calico/VPP

* Please see our [Getting started page](https://docs.tigera.io/calico/latest/getting-started/kubernetes/vpp/getting-started) for instructions on how to set it up on a cluster.
* If you want to learn more about Calico, see the documentation on [docs.tigera.io/calico](https://docs.tigera.io/calico).
* If you have questions, feel free to drop us a line in the [Calico Slack room #vpp](https://calicousers.slack.com/archives/C017220EXU1)
* Check out [Release notes](RELEASE_NOTES.md)
- Please see our [Getting started page](https://docs.tigera.io/calico/latest/getting-started/kubernetes/vpp/getting-started)
for instructions on how to set it up on a cluster.
- If you want to learn more about Calico, see the documentation on
[docs.tigera.io/calico](https://docs.tigera.io/calico).
- If you have questions, feel free to drop us a line in the
[Calico Slack room #vpp](https://calicousers.slack.com/archives/C017220EXU1)
- Check out [Release notes](RELEASE_NOTES.md)

### Software Architecture
## Software Architecture

For technical details about the Calico-VPP integration, see the [VPP dataplane implementation details](https://docs.tigera.io/calico/latest/reference/vpp/technical-details).
For technical details about the Calico-VPP integration, see the
[VPP dataplane implementation details](https://docs.tigera.io/calico/latest/reference/vpp/technical-details).

### Contributing
## Contributing

Contributions to this code are welcome!
Contributions to this code are welcome!

Before starting, make sure you've read [the Calico contributor guide](CONTRIBUTING.md).

Expand All @@ -47,6 +72,10 @@ Or refer to the [developer documentation in this repository](docs)

## License

Calico binaries are licensed under the [Apache v2.0 license](LICENSE), with the exception of some [GPL licensed eBPF programs](https://github.com/projectcalico/calico/tree/master/felix/bpf-gpl/README).
Calico binaries are licensed under the [Apache v2.0 license](LICENSE),
with the exception of some [GPL licensed eBPF programs](https://github.com/projectcalico/calico/tree/master/felix/bpf-gpl/README).

Calico imports packages with a number of apache-compatible licenses. For more information, see [licenses](https://github.com/projectcalico/calico/blob/master/calico/LICENSE). In addition, the base container image contains pre-packaged software with a variety of licenses.
Calico imports packages with a number of apache-compatible licenses. For more
information, see [licenses](https://github.com/projectcalico/calico/blob/master/calico/LICENSE)
In addition, the base container image contains pre-packaged software with a
variety of licenses.
1 change: 1 addition & 0 deletions calico-vpp-agent/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Calico/vpp Agent

This directory contains the agent that configures VPP for:

- CNI implementation
- Services load balancing
- Traffic encapsulation / encryption
Expand Down
17 changes: 10 additions & 7 deletions docs/Ipsec.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
This describes how to enable IPSEC on a Calico/VPP cluster
# IPSec support in CalicoVPP

## Enable ipsec on a running cluster
This describes how to enable IPSec on a Calico/VPP cluster

## Enable IPSec on a running cluster

[You can find the documentation here](https://docs.tigera.io/calico/latest/getting-started/kubernetes/vpp/ipsec)

## Using this kustomize component

You can use the following script to build the appropriate manifest for a cluster with ipsec enabled.
You can use the following script to build the appropriate manifest for a
cluster with ipsec enabled.

```bash
````bash
cd $REPOSITORY_ROOT/yaml

cat > kustomization.yaml <<EOF
Expand All @@ -19,11 +22,11 @@ components:
EOF
kubectl kustomize . > calico-vpp-ipsec.yaml
kubectl apply -f calico-vpp-ipsec.yaml
```
````

You will also need to create the secret for the PSK out of band

```bash
````bash
kubectl -n calico-vpp-dataplane create secret generic calicovpp-ipsec-secret \
--from-literal=psk="$(dd if=/dev/urandom bs=1 count=36 2>/dev/null | base64)"
```
````
22 changes: 13 additions & 9 deletions docs/L2TapInterfaces.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
## We support L2 interfaces in pods
# L2 interafce support in pods

Pods use an L3 interface per default (tun interface in VPP). However, we also support having L2 interfaces (tap), via this [annotation](config.md#L99):
Pods use an L3 interface per default (tun interface in VPP). However, we also
support having L2 interfaces (tap), via this [annotation](config.md#L99):

```yaml
````yaml
apiVersion: v1
kind: Pod
metadata:
Expand All @@ -12,22 +13,25 @@ metadata:
{
"eth0": {"isl3": false },
}
```
````

This has a known limitation : the linux routing configuration is currently incomplete. A workaround for it is to have a cap admin capability on a privileged container:
This has a known limitation : the linux routing configuration is currently
incomplete. A workaround for it is to have a cap admin capability on a
privileged container:

```yaml
````yaml
securityContext:
capabilities:
add: [ "NET_ADMIN"]
```
````

and to run these commands on the container to have connectivity:

```bash
````bash
ip link set dev eth0 down
ip link set dev eth0 address 02:00:00:00:00:01
ip link set dev eth0 up
ip neigh add 169.0.254.1 lladdr 51:53:00:17:34:09 dev eth0
ip route add 169.0.254.1 dev eth0
ip route add default via 169.0.254.1 dev eth0
```
````
6 changes: 4 additions & 2 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
# Calico/VPP technical documentation

This folder contains Calico/VPP technical documentation. This is this repository's counterpart of the documentation available at [https://docs.tigera.io](https://docs.tigera.io/calico/latest/reference/vpp/technical-details)
This folder contains Calico/VPP technical documentation.
This is this repository's counterpart of the documentation
available at [https://docs.tigera.io](https://docs.tigera.io/calico/latest/reference/vpp/technical-details)

It contains developer oriented documentation, details of VPP specific features :
It contains developer oriented documentation, details of VPP specific features:

- [Interface configuration](config.md)
- [Developer's getting started](developper_guide.md)
Expand Down
Loading
Loading