istio / old_issues_repo

Deprecated issue-tracking repo, please post new issues or feature requests to istio/istio instead.
37 stars 9 forks source link

Bug: Pod can't talk TCP if TCP Egress is present when pod starts #232

Open esnible opened 6 years ago

esnible commented 6 years ago

Note that @vadimeisenbergibm explained the problem is that I am specifying hostnames and not an IP block, and deploying with kubectl. I modified the Egress to use numeric CIDRs and it worked as expected. In that case the bug is that istioctl create -f kafka-egress.yaml also does not produce warnings or any messages. It may also be a bug that specifying an invalid Egress breaks things unrelated to the Egress -- my expectation is that an invalid Egress does not harm other traffic.

The symptom of having an invalid TCP Egress is as follows:

There is a bug that manifests if a Pod makes uses a TCP service and is started while there is an Egress that also refers to a TCP service. I tested this in Istio 0.5.x using minikube version 0.25 and Kubernetes version 1.9.0.

To reproduce deploy the attached set of two MySQL pods with kubectl apply -f deploy.yaml

Then, verify you can go to the client MySQL machine and operate on the server MySQL machine using the password 'passw0rd'

kubectl exec -it test-client-mysql-<instance-id> -- mysql -h mysql -p

Use 'passw0rd' for the password. quit to get out. Then, kubectl apply -f kafka-egress.yaml. Wait a few seconds then

kubectl exec -it test-client-mysql-<instance-id> -- mysql -h mysql -p

It should still work. Then, kubectl delete pod test-client-mysql-<instance-id>, wait for the new pod to initialize and try again

kubectl exec -it test-client-mysql-<new-instance-id> -- mysql -h mysql -p

This time, instead of a mysql prompt you receive an error message

ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
esnible commented 6 years ago

deploy.txt kafka-egress.txt

Rename these .txt files to .yaml