1)Explain problems
Anh em có dựng database trên k8s ko?
Thường hệ thống database sẽ không nằm trên kubernetes mà database anh em sẽ cài cụm database riêng trên VM, trên physical server hoặc trên cloud thì anh em sài các dịch vụ Database as a Services.
Khi mình apply istio lên các workload trên k8s thì phát sinh vấn đề:
Workload kết nối đến postgresql nằm ngoài k8s sẽ bị lỗi khó hiểu.

Các bạn có thể tham khảo issues bên dưới.
https://github.com/istio/istio/issues/24856
https://preliminary.istio.io/latest/docs/ops/deployment/requirements#server-first-protocols
Và thường lỗi trên gặp ở mode PERMISSIVE
mTLS and Automatic protocol selection.

Còn postgresql, redis,.. khả năng sẽ lỗi kết nối.
2) Solve Problem
2.1) excludeOutboundPorts
2.1.1) Config annotation inside workload
A nice workaround, at least when you are using an external PostgreSQL service like AWS RDS, can be excluding the port from redirection to Envoy. You can do that by setting the following annotation at the pod:
annotations:
traffic.sidecar.istio.io/excludeOutboundPorts: "5432"
Reference:
https://istio.io/latest/docs/reference/config/annotations/
trong tài liệu này còn có excludeInboundPorts
https://doc.akka.io/docs/akka-management/current/bootstrap/istio.html
2.1.2) Config inside Istio operator – update thu 18 Nov 2021
https://issueexplorer.com/issue/istio/istio/35216
như bài viết ở trên chúng ta sẽ dò spec -> components -> values -> global -> proxy thì chúng ta sẽ thấy 3 thông số:

proxy:
autoInject: disabled
clusterDomain: cluster.local
componentLogLevel: misc:error
enableCoreDump: false
excludeIPRanges: ""
excludeInboundPorts: ""
excludeOutboundPorts: "3306,6379"
Giờ gen manifest theo operator.
Để biết istio operator sửa j chúng ta xem mục bên dưới
2.1.2) Config inside configmap – update thu 18 Nov 2021
Bạn tìm trong configmap “istio-sidecar-injector
” nó cũng cấy hình excludeOutboundPorts
"proxy": {
"autoInject": "disabled",
"clusterDomain": "cluster.local",
"componentLogLevel": "misc:error",
"enableCoreDump": false,
"excludeIPRanges": "",
"excludeInboundPorts": "",
"excludeOutboundPorts": "",
"excludeOutboundPorts": "3306,6379",
"holdApplicationUntilProxyStarts": false,
"image": "docker.nimtechnology.com/dockerhub/istio/proxyv2:1.9.9",
"includeIPRanges": "*",
2.2)Service Entry
Seems like this issue has become a dumping ground of a bunch of vague issues without enough details to solve or using very old versions of Istio. I tried to reproduce with an in mesh and external, and everything works.
if you are actively seeing issues in Istio 1.8.3+, please open a new issue with more info on how to reproduce it and config dumps.
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: sql
spec:
hosts:
- "hh-pgsql-public.ebi.ac.uk"
ports:
- number: 5432
name: sql
protocol: TCP
resolution: DNS
and psql postgres://reader:NWDMCE5xdipIjRrp@hh-pgsql-public.ebi.ac.uk:5432/pfmegrnargs'
is a good way to reproduce as its a publicly accessible DB. Thanks everyone.