Я столкнулся с проблемой публичного раскрытия базы данных mysql, работающей внутри кластера kubernetes. Кластер работает с копами на AWS. Я использую рулевую диаграмму для входа nginx: https://github.com/helm/charts/tree/master/stable/nginx-ingress
controller:
config:
use-proxy-protocol: "true"
metrics:
enabled: true
replicaCount: 2
service:
annotations:
service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: '*'
stats:
enabled: true
rbac:
create: true
tcp:
5000: default/cbioportal-prod-db-mysql:3306
Из кластера я могу подключиться к БД через nginx через порт 5000:
# telnet eating-dingo-nginx-ingress-controller 5000
J
5.7.14
ke_|c&tc"ui%]}mysql_native_passwordConnection closed by foreign host
Но я не могу подключиться извне, используя имя хоста балансировщика нагрузки aws.
telnet xxx.us-east-1.elb.amazonaws.com 5000
Trying x.x.x.x...
Когда я смотрю на панель инструментов aws ec2, я вижу, что группа безопасности балансировщика нагрузки позволяет устанавливать соединения с любого места через порт 5000.
UPDATE
Я могу подключиться, когда использую порт 3306 вместо 5000:
tcp:
3306: default/cbioportal-prod-db-mysql:3306
Однако теперь, когда порт открыт:
$ nmap --verbose -Pn x.x.x.x
PORT STATE SERVICE
21/tcp open ftp
80/tcp open http
443/tcp open https
3306/tcp open mysql
У меня проблема с авторизацией:
$ mysql -h x.x.x.x -uroot -pabcdef
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading authorization packet', system error: 2
Я могу напрямую подключиться к контроллеру nginx из кластера:
kubectl run -it --rm --image=mysql:5.7 --restart=Never mysql-client -- mysql -h eating-dingo-nginx-ingress-controller -uroot -pabcdef
Я использую эту таблицу управления MySQL:
https://github.com/helm/charts/tree/master/stable/mysql