我的集群中有一个mysql pod,我想将其公开给一个公共IP。因此,我通过做将其更改为负载均衡器
kubectl edit svc mysql-mysql --namespace mysql
release: mysql
name: mysql-mysql
namespace: mysql
resourceVersion: "646616"
selfLink: /api/v1/namespaces/mysql/services/mysql-mysql
uid: cd1cce11-890c-11e8-90f5-869c0c4ba0b5
spec:
clusterIP: 10.0.117.54
externalTrafficPolicy: Cluster
ports:
- name: mysql
nodePort: 31479
port: 3306
protocol: TCP
targetPort: 3306
selector:
app: mysql-mysql
sessionAffinity: None
type: LoadBalancer
status:
loadBalancer:
ingress:
- ip: 137.117.40.121
将ClusterIP更改为LoadBalancer。
然而,我似乎无法通过访问mysql -h137.117.40.121 -uroot -p*****
来访问它
有人知道吗?是因为我试图通过TCP转发它吗?
对于您的问题,您希望将您的mysql pod公开给一个公共IP。所以你需要看看Kubernets中的Ingress。它是一个API对象,用于管理对集群中服务的外部访问,通常是HTTP。对于入口,您需要入口控制器和入口规则。有关更多详细信息,您可以阅读我发布的文档。
在Azure中,您可以从Azure Kubernetes服务(AKS(上的HTTPS入口获取更多详细信息。
正如@aurelius所指出的,您的配置似乎是正确的——流量可能被防火墙规则阻止了。
还要确保为您的集群启用了云提供商选项。
kubectl get svc -o wide
将显示LoadBalancer的状态和分配的IP地址。
@charlesxu-msft,使用Ingress肯定是一种选择,但当为kubernetes集群启用云提供程序时,使用LoadBalancer类型的服务并没有错。
仅供参考,这里是测试配置:
apiVersion: v1
kind: Pod
metadata:
name: mysql-pod
labels:
name: mysql-pod
spec:
containers:
- name: mysql:5
image: mysql
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: mysqlpassword
---
apiVersion: v1
kind: Service
metadata:
name: test-mysql-lb
spec:
type: LoadBalancer
ports:
- port: 3306
targetPort: 3306
protocol: TCP
selector:
name: mysql-pod