feat: support external traffic policy

Signed-off-by: AhmedGrati <ahmedgrati1999@gmail.com>
This commit is contained in:
AhmedGrati
2023-02-13 14:59:46 +01:00
parent f2aeb70e59
commit 6be6fdd165
18 changed files with 650 additions and 6 deletions
+15
View File
@@ -224,3 +224,18 @@ k8s_output="$KOMPOSE_ROOT/script/test/fixtures/host-port-protocol/output-k8s.yam
os_output="$KOMPOSE_ROOT/script/test/fixtures/host-port-protocol/output-os.yaml"
convert::expect_success_and_warning "$k8s_cmd" "$k8s_output"
convert::expect_success "$os_cmd" "$os_output"
# Test external traffic policy feature with valid configuration, warning is coming from the network policy.
k8s_cmd="kompose -f $KOMPOSE_ROOT/script/test/fixtures/external-traffic-policy/docker-compose-v1.yaml convert --stdout --with-kompose-annotation=false"
k8s_output="$KOMPOSE_ROOT/script/test/fixtures/external-traffic-policy/output-k8s-v1.yaml"
os_cmd="kompose --provider=openshift -f $KOMPOSE_ROOT/script/test/fixtures/external-traffic-policy/docker-compose-v1.yaml convert --stdout --with-kompose-annotation=false"
os_output="$KOMPOSE_ROOT/script/test/fixtures/external-traffic-policy/output-os-v1.yaml"
convert::expect_success_and_warning "$k8s_cmd" "$k8s_output"
convert::expect_success "$os_cmd" "$os_output"
# Test external traffic policy feature with warning, because we have nodeport with external traffic policy
k8s_cmd="kompose -f $KOMPOSE_ROOT/script/test/fixtures/external-traffic-policy/docker-compose-v2.yaml convert --stdout --with-kompose-annotation=false"
k8s_output="$KOMPOSE_ROOT/script/test/fixtures/external-traffic-policy/output-k8s-v2.yaml"
os_cmd="kompose --provider=openshift -f $KOMPOSE_ROOT/script/test/fixtures/external-traffic-policy/docker-compose-v2.yaml convert --stdout --with-kompose-annotation=false"
os_output="$KOMPOSE_ROOT/script/test/fixtures/external-traffic-policy/output-os-v2.yaml"
convert::expect_success_and_warning "$k8s_cmd" "$k8s_output"
convert::expect_success_and_warning "$os_cmd" "$os_output"
@@ -0,0 +1,14 @@
version: "3.3"
services:
front-end:
image: gcr.io/google-samples/gb-frontend:v4
environment:
- GET_HOSTS_FROM=dns
ports:
- 80:80
labels:
kompose.service.expose: lb
kompose.service.expose.ingress-class-name: nginx
kompose.service.external-traffic-policy: local
kompose.service.type: loadbalancer
@@ -0,0 +1,14 @@
version: "3.3"
services:
front-end:
image: gcr.io/google-samples/gb-frontend:v4
environment:
- GET_HOSTS_FROM=dns
ports:
- 80:80
labels:
kompose.service.expose: lb
kompose.service.expose.ingress-class-name: nginx
kompose.service.external-traffic-policy: local
kompose.service.type: headless
@@ -0,0 +1,85 @@
---
apiVersion: v1
kind: Service
metadata:
annotations:
kompose.service.expose: lb
kompose.service.expose.ingress-class-name: nginx
kompose.service.external-traffic-policy: local
kompose.service.type: loadbalancer
creationTimestamp: null
labels:
io.kompose.service: front-end-tcp
name: front-end-tcp
spec:
externalTrafficPolicy: Local
ports:
- name: "80"
port: 80
targetPort: 80
selector:
io.kompose.service: front-end
type: LoadBalancer
status:
loadBalancer: {}
---
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
kompose.service.expose: lb
kompose.service.expose.ingress-class-name: nginx
kompose.service.external-traffic-policy: local
kompose.service.type: loadbalancer
creationTimestamp: null
labels:
io.kompose.service: front-end
name: front-end
spec:
replicas: 1
selector:
matchLabels:
io.kompose.service: front-end
strategy: {}
template:
metadata:
annotations:
kompose.service.expose: lb
kompose.service.expose.ingress-class-name: nginx
kompose.service.external-traffic-policy: local
kompose.service.type: loadbalancer
creationTimestamp: null
labels:
io.kompose.network/external-traffic-policy-default: "true"
io.kompose.service: front-end
spec:
containers:
- env:
- name: GET_HOSTS_FROM
value: dns
image: gcr.io/google-samples/gb-frontend:v4
name: front-end
ports:
- containerPort: 80
hostPort: 80
protocol: TCP
resources: {}
restartPolicy: Always
status: {}
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
creationTimestamp: null
name: external-traffic-policy-default
spec:
ingress:
- from:
- podSelector:
matchLabels:
io.kompose.network/external-traffic-policy-default: "true"
podSelector:
matchLabels:
io.kompose.network/external-traffic-policy-default: "true"
@@ -0,0 +1,115 @@
---
apiVersion: v1
kind: Service
metadata:
annotations:
kompose.service.expose: lb
kompose.service.expose.ingress-class-name: nginx
kompose.service.external-traffic-policy: local
kompose.service.type: headless
creationTimestamp: null
labels:
io.kompose.service: front-end
name: front-end
spec:
clusterIP: None
ports:
- name: "80"
port: 80
targetPort: 80
selector:
io.kompose.service: front-end
type: ClusterIP
status:
loadBalancer: {}
---
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
kompose.service.expose: lb
kompose.service.expose.ingress-class-name: nginx
kompose.service.external-traffic-policy: local
kompose.service.type: headless
creationTimestamp: null
labels:
io.kompose.service: front-end
name: front-end
spec:
replicas: 1
selector:
matchLabels:
io.kompose.service: front-end
strategy: {}
template:
metadata:
annotations:
kompose.service.expose: lb
kompose.service.expose.ingress-class-name: nginx
kompose.service.external-traffic-policy: local
kompose.service.type: headless
creationTimestamp: null
labels:
io.kompose.network/external-traffic-policy-default: "true"
io.kompose.service: front-end
spec:
containers:
- env:
- name: GET_HOSTS_FROM
value: dns
image: gcr.io/google-samples/gb-frontend:v4
name: front-end
ports:
- containerPort: 80
hostPort: 80
protocol: TCP
resources: {}
restartPolicy: Always
status: {}
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
kompose.service.expose: lb
kompose.service.expose.ingress-class-name: nginx
kompose.service.external-traffic-policy: local
kompose.service.type: headless
creationTimestamp: null
labels:
io.kompose.service: front-end
name: front-end
spec:
ingressClassName: nginx
rules:
- host: lb
http:
paths:
- backend:
service:
name: front-end
port:
number: 80
path: /
pathType: Prefix
status:
loadBalancer: {}
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
creationTimestamp: null
name: external-traffic-policy-default
spec:
ingress:
- from:
- podSelector:
matchLabels:
io.kompose.network/external-traffic-policy-default: "true"
podSelector:
matchLabels:
io.kompose.network/external-traffic-policy-default: "true"
@@ -0,0 +1,106 @@
---
apiVersion: v1
kind: Service
metadata:
annotations:
kompose.service.expose: lb
kompose.service.expose.ingress-class-name: nginx
kompose.service.external-traffic-policy: local
kompose.service.type: loadbalancer
creationTimestamp: null
labels:
io.kompose.service: front-end-tcp
name: front-end-tcp
spec:
externalTrafficPolicy: Local
ports:
- name: "80"
port: 80
targetPort: 80
selector:
io.kompose.service: front-end
type: LoadBalancer
status:
loadBalancer: {}
---
apiVersion: v1
kind: DeploymentConfig
metadata:
annotations:
kompose.service.expose: lb
kompose.service.expose.ingress-class-name: nginx
kompose.service.external-traffic-policy: local
kompose.service.type: loadbalancer
creationTimestamp: null
labels:
io.kompose.service: front-end
name: front-end
spec:
replicas: 1
selector:
io.kompose.service: front-end
strategy:
resources: {}
template:
metadata:
creationTimestamp: null
labels:
io.kompose.network/external-traffic-policy-default: "true"
io.kompose.service: front-end
spec:
containers:
- env:
- name: GET_HOSTS_FROM
value: dns
image: ' '
name: front-end
ports:
- containerPort: 80
hostPort: 80
protocol: TCP
resources: {}
restartPolicy: Always
test: false
triggers:
- type: ConfigChange
- imageChangeParams:
automatic: true
containerNames:
- front-end
from:
kind: ImageStreamTag
name: front-end:v4
type: ImageChange
status:
availableReplicas: 0
latestVersion: 0
observedGeneration: 0
replicas: 0
unavailableReplicas: 0
updatedReplicas: 0
---
apiVersion: v1
kind: ImageStream
metadata:
creationTimestamp: null
labels:
io.kompose.service: front-end
name: front-end
spec:
lookupPolicy:
local: false
tags:
- annotations: null
from:
kind: DockerImage
name: gcr.io/google-samples/gb-frontend:v4
generation: null
importPolicy: {}
name: v4
referencePolicy:
type: ""
status:
dockerImageRepository: ""
@@ -0,0 +1,125 @@
---
apiVersion: v1
kind: Service
metadata:
annotations:
kompose.service.expose: lb
kompose.service.expose.ingress-class-name: nginx
kompose.service.external-traffic-policy: local
kompose.service.type: headless
creationTimestamp: null
labels:
io.kompose.service: front-end
name: front-end
spec:
clusterIP: None
ports:
- name: "80"
port: 80
targetPort: 80
selector:
io.kompose.service: front-end
type: ClusterIP
status:
loadBalancer: {}
---
apiVersion: v1
kind: DeploymentConfig
metadata:
annotations:
kompose.service.expose: lb
kompose.service.expose.ingress-class-name: nginx
kompose.service.external-traffic-policy: local
kompose.service.type: headless
creationTimestamp: null
labels:
io.kompose.service: front-end
name: front-end
spec:
replicas: 1
selector:
io.kompose.service: front-end
strategy:
resources: {}
template:
metadata:
creationTimestamp: null
labels:
io.kompose.network/external-traffic-policy-default: "true"
io.kompose.service: front-end
spec:
containers:
- env:
- name: GET_HOSTS_FROM
value: dns
image: ' '
name: front-end
ports:
- containerPort: 80
hostPort: 80
protocol: TCP
resources: {}
restartPolicy: Always
test: false
triggers:
- type: ConfigChange
- imageChangeParams:
automatic: true
containerNames:
- front-end
from:
kind: ImageStreamTag
name: front-end:v4
type: ImageChange
status:
availableReplicas: 0
latestVersion: 0
observedGeneration: 0
replicas: 0
unavailableReplicas: 0
updatedReplicas: 0
---
apiVersion: v1
kind: ImageStream
metadata:
creationTimestamp: null
labels:
io.kompose.service: front-end
name: front-end
spec:
lookupPolicy:
local: false
tags:
- annotations: null
from:
kind: DockerImage
name: gcr.io/google-samples/gb-frontend:v4
generation: null
importPolicy: {}
name: v4
referencePolicy:
type: ""
status:
dockerImageRepository: ""
---
apiVersion: v1
kind: Route
metadata:
creationTimestamp: null
labels:
io.kompose.service: front-end
name: front-end
spec:
host: lb
port:
targetPort: 80
to:
kind: Service
name: front-end
weight: null
status:
ingress: null
+1 -1
View File
@@ -25,4 +25,4 @@ networks:
name: app-network
web:
external:
name: web-network
name: web-network
+51 -4
View File
@@ -53,6 +53,54 @@ spec:
restartPolicy: Always
status: {}
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
creationTimestamp: null
name: normalized-network
spec:
ingress:
- from:
- podSelector:
matchLabels:
io.kompose.network/normalized-network: "true"
podSelector:
matchLabels:
io.kompose.network/normalized-network: "true"
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
creationTimestamp: null
name: v30-normalized-network
spec:
ingress:
- from:
- podSelector:
matchLabels:
io.kompose.network/v30-normalized-network: "true"
podSelector:
matchLabels:
io.kompose.network/v30-normalized-network: "true"
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
creationTimestamp: null
name: app-network
spec:
ingress:
- from:
- podSelector:
matchLabels:
io.kompose.network/normalized-network: "true"
podSelector:
matchLabels:
io.kompose.network/normalized-network: "true"
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
@@ -90,16 +138,16 @@ apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
creationTimestamp: null
name: v30-normalized-network
name: normalized-network
spec:
ingress:
- from:
- podSelector:
matchLabels:
io.kompose.network/v30-normalized-network: "true"
io.kompose.network/normalized-network: "true"
podSelector:
matchLabels:
io.kompose.network/v30-normalized-network: "true"
io.kompose.network/normalized-network: "true"
---
apiVersion: apps/v1
@@ -155,4 +203,3 @@ spec:
podSelector:
matchLabels:
io.kompose.network/v30-default: "true"
-1
View File
@@ -171,4 +171,3 @@ spec:
type: ""
status:
dockerImageRepository: ""