Skip to content

Commit

Permalink
Version bump and readme update for v2.0.0 (#166)
Browse files Browse the repository at this point in the history
* Version bump and readme update for v2.0.0

* Update to README.

* Added note about OpenStack.

* Moved documentation into romana repo.

* Small change in link to doc.

* Direct link to kubernetes README.
  • Loading branch information
cgilmour authored and jbrendel committed Nov 20, 2017
1 parent 4cda6c2 commit 4b23dc6
Show file tree
Hide file tree
Showing 16 changed files with 726 additions and 59 deletions.
85 changes: 46 additions & 39 deletions README.md
@@ -1,48 +1,55 @@
# The Romana Project

***

## _Welcome to the Romana 2.0 preview release!_

_Romana provides cloud native, beautifully simple and natively routed network_
_traffic for Kubernetes clusters._

_You are viewing the source repository of the Romana 2.0 preview release,_
_which brings many improvements:_

* _Ability to create large Kubernetes clusters across multiple availability_
_zones in AWS, without the need to create overlay networks, and without any_
_limitation imposed by AWS VPC's 50 route limit._
* _Topology aware IPAM with improved, more efficient IP address and route management._
* _Improvements to Romana's internal architecture._
* _Ability to be deployed on top of kops clusters._

_If you would like to jump straight to the Romana 2.0 specific installation_
_instructions, please click [here](docs/kubernetes)._

***

Romana is a network and security automation solution for Cloud Native
applications. Romana automates the creation of isolated Cloud Native Networks
and secures applications with a distributed firewall that applies access
control policies consistently across all endpoints and services, wherever they
run.
# Romana - network and security automation solution for cloud native applications

Romana is a network and security automation solution for cloud native
applications.

* Romana automates the creation of isolated cloud native networks
and secures applications with a distributed firewall that applies access
control policies consistently across all endpoints (pods or VMs) and
services, wherever they run.
* Through Romana's topology aware IPAM, endpoints receive natively routable
addresses: No overlays or tunnels are required, increasing performance
and providing operational simplicity.
* Because IP addresses are assigned with network topology in mind, routes
within the network are highly aggregated, reducing the impact on networking
hardware, and allowing more secure configurations.
* Supports Kubernetes and OpenStack clusters, on premise or on AWS.

# Installation

To get started with Romana on Kubernetes, go [here](docs/kubernetes/README.md).

For OpenStack installations, please contact us by email or on Slack.

We are working on more detailed documentation to cover all the features and
installation methods. Reach out to the team via email, Slack or GitHub if you
need some help in the meantime.

# Additional documentation

* [Romana core concepts and terminology](docs/romana/README.md): Find out how
Romana is different and how it accomplishes simplified routing for endpoints.
* [Romana's topology configuration](docs/romana/TOPOLOGY.md): Explanation and
examples of how to configure Romana for different networking environments.
* [Romana VIPs](docs/romana/VIPS.md): External IPs for Kubernetes clusters,
managed by Romana with automatic failover.
* [Romana DNS](docs/romana/DNS.md): How to setup DNS for Romana VIPs.
* [Romana network policies](docs/romana/POLICIES.md): Introduction to Romana
network policies.
* [Romana route publisher](docs/romana/ROUTE_PUBLISHER.md): In routed L3
networks, the route publisher announces the necessary routes either via BGP
or OSPF.

# Code

This repository contains the installer and documentation. The Romana source
code, however, is contained in the [core](https://github.com/romana/core)
repository.

# Installation

We're updating all of our documentation for installing and using Romana.
To get started with Romana on Kubernetes, go [here](docs/kubernetes).
This repository contains the documentation and installation tools for the Romana project.
You can find the application code in the [core](https://github.com/romana/core) repository.

And get in touch with us via email, Slack or GitHub if you need some help in the meantime.
Latest stable release: 2.0

# Contact Us

* By email: [info@romana.io](mailto:info@romana.io)
* On the [Romana Slack](https://romana.slack.com/). You'll need to email to request an invite to this slack network
* On the [Romana Slack](https://romana.slack.com/). Please request an invite
by email.
* On GitHub, just open an [issue](https://github.com/romana/romana/issues/new)
6 changes: 3 additions & 3 deletions containerize/specs/romana-kubeadm.yml
Expand Up @@ -182,7 +182,7 @@ spec:
effect: NoSchedule
containers:
- name: romana-daemon
image: quay.io/romana/daemon:v2.0-rc.1
image: quay.io/romana/daemon:v2.0.0
imagePullPolicy: Always
---
apiVersion: extensions/v1beta1
Expand All @@ -206,7 +206,7 @@ spec:
effect: NoSchedule
containers:
- name: romana-listener
image: quay.io/romana/listener:v2.0-rc.1
image: quay.io/romana/listener:v2.0.0
imagePullPolicy: Always
---
apiVersion: extensions/v1beta1
Expand All @@ -232,7 +232,7 @@ spec:
effect: NoSchedule
containers:
- name: romana-agent
image: quay.io/romana/agent:v2.0-rc.1
image: quay.io/romana/agent:v2.0.0
imagePullPolicy: Always
env:
- name: NODENAME
Expand Down
8 changes: 4 additions & 4 deletions docs/kubernetes/romana-kops.yml
Expand Up @@ -137,7 +137,7 @@ spec:
effect: NoSchedule
containers:
- name: romana-daemon
image: quay.io/romana/daemon:v2.0-rc.1
image: quay.io/romana/daemon:v2.0.0
imagePullPolicy: Always
args:
- --cloud=aws
Expand All @@ -164,7 +164,7 @@ spec:
effect: NoSchedule
containers:
- name: romana-listener
image: quay.io/romana/listener:v2.0-rc.1
image: quay.io/romana/listener:v2.0.0
imagePullPolicy: Always
---
apiVersion: extensions/v1beta1
Expand All @@ -190,7 +190,7 @@ spec:
effect: NoSchedule
containers:
- name: romana-agent
image: quay.io/romana/agent:v2.0-rc.1
image: quay.io/romana/agent:v2.0.0
imagePullPolicy: Always
env:
- name: NODENAME
Expand Down Expand Up @@ -285,7 +285,7 @@ spec:
effect: NoSchedule
containers:
- name: romana-aws
image: quay.io/romana/aws:v2.0-rc.1
image: quay.io/romana/aws:v2.0.0
imagePullPolicy: Always
---
apiVersion: extensions/v1beta1
Expand Down
6 changes: 3 additions & 3 deletions docs/kubernetes/romana-kubeadm.yml
Expand Up @@ -182,7 +182,7 @@ spec:
effect: NoSchedule
containers:
- name: romana-daemon
image: quay.io/romana/daemon:v2.0-rc.1
image: quay.io/romana/daemon:v2.0.0
imagePullPolicy: Always
---
apiVersion: extensions/v1beta1
Expand All @@ -206,7 +206,7 @@ spec:
effect: NoSchedule
containers:
- name: romana-listener
image: quay.io/romana/listener:v2.0-rc.1
image: quay.io/romana/listener:v2.0.0
imagePullPolicy: Always
---
apiVersion: extensions/v1beta1
Expand All @@ -232,7 +232,7 @@ spec:
effect: NoSchedule
containers:
- name: romana-agent
image: quay.io/romana/agent:v2.0-rc.1
image: quay.io/romana/agent:v2.0.0
imagePullPolicy: Always
env:
- name: NODENAME
Expand Down
2 changes: 1 addition & 1 deletion docs/kubernetes/specs/romana-agent.yaml
Expand Up @@ -54,7 +54,7 @@ spec:
effect: NoSchedule
containers:
- name: romana-agent
image: quay.io/romana/agent:v2.0-rc.1
image: quay.io/romana/agent:v2.0.0
imagePullPolicy: Always
# args:
# - --service-cluster-ip-range=100.64.0.0/13
Expand Down
2 changes: 1 addition & 1 deletion docs/kubernetes/specs/romana-aws.yaml
Expand Up @@ -53,5 +53,5 @@ spec:
effect: NoSchedule
containers:
- name: romana-aws
image: quay.io/romana/aws:v2.0-rc.1
image: quay.io/romana/aws:v2.0.0
imagePullPolicy: Always
2 changes: 1 addition & 1 deletion docs/kubernetes/specs/romana-daemon-custom-network.yaml
Expand Up @@ -36,7 +36,7 @@ spec:
effect: NoSchedule
containers:
- name: romana-daemon
image: quay.io/romana/daemon:v2.0-rc.1
image: quay.io/romana/daemon:v2.0.0
imagePullPolicy: Always
args:
- --initial-network=/etc/romana/network/custom-network.json
Expand Down
2 changes: 1 addition & 1 deletion docs/kubernetes/specs/romana-daemon.yaml
Expand Up @@ -36,7 +36,7 @@ spec:
effect: NoSchedule
containers:
- name: romana-daemon
image: quay.io/romana/daemon:v2.0-rc.1
image: quay.io/romana/daemon:v2.0.0
imagePullPolicy: Always
# args:
# - --cloud=aws
Expand Down
2 changes: 1 addition & 1 deletion docs/kubernetes/specs/romana-listener.yaml
Expand Up @@ -72,5 +72,5 @@ spec:
effect: NoSchedule
containers:
- name: romana-listener
image: quay.io/romana/listener:v2.0-rc.1
image: quay.io/romana/listener:v2.0.0
imagePullPolicy: Always
4 changes: 2 additions & 2 deletions docs/kubernetes/specs/romana-route-publisher.yaml
Expand Up @@ -22,7 +22,7 @@ spec:
effect: NoSchedule
containers:
- name: publisher
image: quay.io/romana/x-route-publisher:v2.0-rc.1
image: quay.io/romana/x-route-publisher:v2.0.0
imagePullPolicy: Always
args:
- --asn=65534
Expand All @@ -37,7 +37,7 @@ spec:
- name: run-path
mountPath: /var/run/romana
- name: bird
image: quay.io/romana/x-bird:v2.0-rc.1
image: quay.io/romana/x-bird:v2.0.0
imagePullPolicy: Always
args:
- --config-dir=/var/tmp/romana/publisher-config
Expand Down
64 changes: 64 additions & 0 deletions docs/romana/DNS.md
@@ -0,0 +1,64 @@
# Romana DNS

Romana DNS adds DNS support for Romana VIPs. It is drop in replacement for
kube-dns.

## Installtion steps

### On Master node of kubernetes cluster

* Make a note on number of replicas for kube-dns using following command:
```
echo `kubectl get deploy -n kube-system kube-dns -o jsonpath="{.spec.replicas}"`
```
* Now set replicas for kube-dns to zero using following command:
```
kubectl scale deploy -n kube-system kube-dns --replicas=0
```
* Wait till kube-dns replicas are zero (around a minute or so)

### On All nodes i.e master and compute nodes of the kubernetes cluster

* Remove earlier docker images and replace it romana one using commands below:
```
docker rmi gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.5
docker pull pani/romanadns
docker tag pani/romanadns:latest gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.5
```
* Now return back to master node for further commands

### On Master node of kubernetes cluster

* Now assuming you had 2 replicas before, from first step above, we restore the replica count for kube-dns as follows:
```
kubectl scale deploy -n kube-system kube-dns --replicas=2
```
* Wait for a minute or so for the pod to come up and we have romanaDNS up and running.

## Testing

* Run dig to see if dns is working properly using command:
```
dig @10.96.0.10 +short romana.kube-system.svc.cluster.local
```
* Download this sample [nginx](files/nginx.yml) yaml file and then use following command to create an nginx service with RomanaIP in it:
```
kubectl create -f nginx.yml
```
* This should create and load nginx service with RomanaIP, which should reflect in the dig result below:
```
dig @10.96.0.10 +short nginx.default.svc.cluster.local
```

### Sample Results
```
$ dig @10.96.0.10 +short romana.kube-system.svc.cluster.local
10.96.0.99
192.168.99.10
$ dig @10.96.0.10 +short nginx.default.svc.cluster.local
10.116.0.0
10.99.181.64
192.168.99.101
```

***
72 changes: 72 additions & 0 deletions docs/romana/POLICIES.md
@@ -0,0 +1,72 @@
# Romana network policies

## Introduction

Romana allows the fine grained control and management of network traffic via network policies. The Romana network policies format was inspired by the Kubernetes network policy specification. However, Romana policies can be applied in Kubernetes as well as OpenStack environments. Furthermore, Romana extends the policies with additional features, such as the ability to control network traffic not only for containers or VMs, but also for bare metal servers.

### Overview

Network policies are defined as small JSON snippets, specifying match characteristics for network traffic. Essentially, network policies firewall rules definitions. Details and examples will be given below.

These policy definitions are sent to the Romana Policy service using this service's RESTful API. The service validates those policies and forwards them to the Romana agent on each host of the cluster. There, the policies are translated to iptables rules, which are then applied to the kernel.

### Tools and integration

After installing an OpenStack or Kubernetes cluster with Romana, the `romana` command line tool can be used to specify and list policies. However, Romana provides a specific integration for Kubernetes. This allows the operator to use standard Kubernetes policies and policy APIs, should they wish to do so. Romana picks up those Kubernetes policies, seamlessly translates them to Romana policies and then applies them as necessary.

For OpenStack, or if policies need to be applied to bare metal servers, the Romana Policy API or command line tools are used directly.


## Policy definition format

Each Romana network policy document contains a single top-level element (`securitypolicies`), which itself is a list of individual policies. A policy contains the following top-level elements:

* **name:** The name of the policy. You can refer to policies by name or an automatically generated unique ID. Oftentimes names are much easier to remember. Therefore, it is useful to make this a short, descriptive and - if possible - unique ID.
* **description:** A line of text, which can serve as human readable documentation for this policy.
* **direction:** Determines whether the policy applies packets that are incoming (ingress) to the endpoint or outgoing (egress) from the endpoint. Currently, the only permissible value for this field is `ingress`. This means that the policy rules describe traffic travelling TO the specified (see `applied_to`) target.
* **applied_to:** A list of specifiers, defining to whom the rules are applied. Typically a tenant/segment combo or a CIDR.
* **peers:** A list of specifiers, defining the 'other side' of the traffic. In case of ingress traffic, this would be the originator of the packets. The peer may be defined as "any", which serves as a wildcard.
* **rules:** A list of traffic type specifications, usually consisting of protocol and ports.


```
{
"securitypolicies": [{
"name": <policy-name>,
"description": <policy-description>,
"direction": "ingress",
"applied_to": [<applied-spec-1>, <applied-spec-2>, ...],
"peers": [<peer-spec-1>, <peer-spec-2>, ...],
"rules": [<traffic-spec-1>, <traffic-spec-2>, ...]
}]
}
```
Example:
```
{
"securitypolicies": [{
"name": "policy1",
"description": "Opening SSH, HTTP and HTTPS ports as well as ICMP",
"direction": "ingress",
"applied_to": [{
"tenant": "admin",
"segment": "default"
}],
"peers": [{
"peer": "any"
}],
"rules": [
{
"protocol": "tcp",
"ports": [22, 80, 443]
},
{
"protocol": "icmp"
}
]
}]
}
```

***

0 comments on commit 4b23dc6

Please sign in to comment.