I'm Trying to understand how Istio envoy proxy works when outboundTrafficPolicy
mode is set to REGISTRY_ONLY. With the setup defined below I would expect that the inside
pod would be blocked from accessing the outside
pod since the sidecar.istio.inject
label is set to "false"
for the outside pod and "true"
for the inside pod. However when I exec into the inside
pod and issue a curl command I get a success .
kubectl -n istio-test exec -it inside-85f794ff76-7x44s -c sleep -- curl http://outside
<html><body><h1>It works!</h1></body></html>
Configuration Setup
---
apiVersion: v1
kind: Service
metadata:
labels:
app: outside
name: outside
namespace: istio-test
spec:
ports:
- name: 80-80
port: 80
protocol: TCP
targetPort: 80
selector:
app: outside
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
labels:
app: inside
name: inside
namespace: istio-test
spec:
ports:
- name: 80-80
port: 80
protocol: TCP
targetPort: 80
selector:
app: inside
clusterIP: None
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: outside
name: outside
namespace: istio-test
spec:
replicas: 1
selector:
matchLabels:
app: outside
template:
metadata:
labels:
app: outside
version: v1
sidecar.istio.io/inject: "false"
spec:
containers:
- image: httpd
name: httpd
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: inside
name: inside
namespace: istio-test
spec:
replicas: 1
selector:
matchLabels:
app: inside
template:
metadata:
labels:
app: inside
version: v1
sidecar.istio.io/inject: "true"
spec:
containers:
- image: curlimages/curl
name: sleep
command:
- /bin/sleep
- infinity
---
apiVersion: networking.istio.io/v1beta1
kind: Sidecar
metadata:
name: default
namespace: istio-test
spec:
workloadSelector:
labels:
app: inside
outboundTrafficPolicy:
mode: REGISTRY_ONLY
I was expecting to need a ServiceEntry
to register the external pod. Why does this not appear to be the case?
How can I block traffic from the inside
pod to the outside
pod?