openshift container netzwerk aus sicht der workloadpeople.redhat.com/~llange/ocp_netzwerk.pdf ·...

68
Wolfram Richter | Red Hat OpenShift Container Netzwerk aus Sicht der Workload

Upload: dokien

Post on 06-Feb-2018

223 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

Wolfram Richter | Red Hat

OpenShift Container Netzwerkaus Sicht der Workload

Page 2: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

Why this session?

“OpenShift is great for web applications,

but we want to do X… will this work?“

X ∈ {“Analytics”, “Non-HTTP”, “High-

Performance Computing”, “Big Data”,

“Object storage”, “NAS”, “Replicated

Databases”, …}

Let’s take a look from a networking PoV!

Page 3: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

Agenda

• What is OpenShift?

• How plain Docker Networking works

and what OpenShift does differently

• Container Networking across nodes

• Kubernetes Services

• Ingress: OpenShift Router

• Egress Pods and Network Policy

Page 4: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

OpenShift

● Platform & Container as a Service

● Built for both traditional and cloud-native applications

● An integrated hybrid cloud application platform for application development and deployment

● Develop, build, and manage container based applications

● Easily turn source code into running applications with source-to-image capabilities

Page 5: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

OpenShift High-Level Architecture

Page 6: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

Container Networking

Problem Statements

• As an X,

I want my

containerized

applications

to be able to

connect to other

services, so that

they can perform

meaningful work.

• As an X,

I want my

containerized

applications

to be accessible

externally,

so that a

wide range of users

can use them.

Page 7: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

RFC1918 IP

assigned by

docker daemon

Page 8: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

Docker host

Docker bridge

Host NIC

Page 9: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

Container

So we can use the

“ip” command

Page 10: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

Container

Indicates which IF

the veth device is

connected to

Page 11: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

Docker host

Endpoint of the

container’s veth

device

Page 12: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application
Page 13: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

Source IP

appears to be

Node IP

Page 14: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

Docker host

Inbound traffic is

forwarded to

container

Outbound traffic is

masqueraded

Page 15: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

Container Networking

Problem Statement

• As an X, I want to use network attached

storage from within my container, so I

can provide stateful services (*).

• (*) and storage traffic shouldn’t share application network bandwith

Page 16: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application
Page 17: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application
Page 18: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

Container Networking

Problem Statement

• As a X, I want name resolution to work

inside the container like they would on a

dedicated machine, so that I don’t have

to care about them.

Page 19: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

/etc/hosts

/etc/hostname

/etc/resolv.conf

Page 20: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

Container

Files in the

container fs are

overwritten

Page 21: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

OpenShift Networking

Problem Statement

• As a X, I want container networking to

work seamlessly across multiple nodes,

so that I don’t have to worry where

which containers run (*).

• (*) while still maintaining compatibility with plain docker containers

Page 22: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application
Page 23: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

OpenShift node

Host NICs

Docker bridge

docker bridge <-> ovs bridge

ovs bridge

ovs bridge <-> host NICs

Page 24: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

OpenShift node

Look, there’s no

container

connected

Page 25: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

OpenShift node

Container veth

endpoints on ovs

bridge

Page 26: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application
Page 27: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application
Page 28: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application
Page 29: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

OpenShift node

Pod IP address

Page 30: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

Container

Ping works from

container on same

host

Page 31: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

Container

Ping fails from

container on

different host

Page 32: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

Each node has

specific IP

range

Page 33: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

OpenShift node

IP Range node 1

IP Range node 2

Page 34: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

IP packets

destined for pod

on other node is

encapsulated via

VXLAN…

Page 35: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

... and sent out

via the node‘s IP

stack

(MTU impact!)

Page 36: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

OpenShift node

Port 1 is VXLAN

Page 37: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

OpenShift node

Flow rules that

trigger VXLAN

encapsulation

Destination node

IP address

Page 38: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

OpenShift node

Two pods in the

same namespace

on different

nodes…

Page 39: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

OpenShift pod

…can

communicate with

each other

Page 40: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

OpenShift Networking

Problem Statement

• As a X, I want to ensure that a rogue

pod cannot access pods in another

project, so that I have a base level of

security.

Page 41: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

Project-specific

VXLAN ID

Page 42: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

OpenShift pod

Pod in a different

namespace…

…cannot be

reached

Page 43: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

OpenShift Networking

Problem Statement

• As a X, I want to be able to connect to

other containerized services using a

stable endpoint, so I don’t have to

reconfigure my application when other

containers come and go.

Page 44: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application
Page 45: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

OpenShift node

Service IP

Address

Page 46: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

OpenShift pod

Name resolution

via OpenShift

dnsmasq on node

Namespace in

search suffix list

Page 47: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

OpenShift pod

Service name is

resolved into IP

adress

Page 48: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

OpenShift pod

Communication

via service IP

Page 49: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application
Page 50: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

Kubernetes Service Modes

• User-space mode– IPTables rules forward packages destined to the

service IP address to the kube-proxy

– Kube-proxy will in turn initiate connections to the actual destination IP and proxy between the two endpoints

– Key advantage: can detect non-responding pods and retry connection to other pods

• IPTables mode– kube-proxy continuously updates the node’s IPTables

rules

– forward packets directly to one of the target pod’s IP

– Key advantage: increased throughput

Page 51: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

OpenShift Networking

Problem Statement

• As an X, I want my containerized

applications to be accessible externally,

so that a wide range of users can use

them (*).

• (*) without having to care on which node a container/pod runs

Page 52: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

Ingress router

pod bound to

host port

Page 53: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

Host Port = port

exposed on the

node

(containerized)

haproxy

Page 54: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application
Page 55: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

OpenShift Routing

• Layer 7 Routing: HTTP(S), TLS-SNI

• To properly route other protocols,

deploy dedicated customized routers

• Alternatively instrument external load

balancers such as F5, etc.

Page 56: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

OpenShift Networking

Problem Statement

• As an operator, I want to be able to fall

back to the known working version of a

service when deploying a new version

so I have a safety net (blue/green

deployments)

Page 57: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

Router reconfiguration allows

blue/green deployments

oc patch route/api-gateway -p '{ "spec": {

"to": { "name": "api-gateway-green" }}}’

oc patch route/api-gateway -p '{ "spec": {

"to": { "name": "api-gateway-blue" }}}'

Page 58: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

OpenShift Networking

Problem Statement

• As an operator, I want my containerized

applications to use specific source IP

addresses to access external services,

so I can restrict service access via

(external) firewall rules.

Page 59: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application
Page 60: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application
Page 61: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

Egress source IP

Egress default

GWEgress target IP

(points to external

service “IPA”)

Page 62: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

Points to egress-1

pod

Page 63: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

OpenShift pod

Retrieving from

egress-1 service

works

Page 64: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

External service

Egress

source IP

Egress

target IP

Page 65: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

if2: node’s eth0

OpenShift egress pod

Page 66: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

OpenShift Networking

Problem Statement

• As an operator, I want to control which

services my containerized applications

can access, so I can limit access via

internal means.

Page 67: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

Egress Network Policy

{"kind": "EgressNetworkPolicy",

"apiVersion": "v1",

"metadata": { "name": "default” },

"spec": {

"egress": [{ "type": "Allow", "to": { "cidrSelector": "1.2.3.0/24” }

},{ "type": "Deny", "to": { "cidrSelector": "0.0.0.0/32” } }

]}

}

Page 68: OpenShift Container Netzwerk aus Sicht der Workloadpeople.redhat.com/~llange/OCP_Netzwerk.pdf · OpenShift Container Netzwerk ... and storage traffic shouldn’t share application

Summary

If the question is “OpenShift is great for

web applications, but we want to do X…

will this work?“, the answer is most likely

yes (from a networking point of view) (*).

(*) keep in mind that there is an MTU impact, multiple processing hops

which impact latency, etc…