我的集群中有一个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转发吗?
答案 0 :(得分:1)
对于您的问题,您想将mysql pod公开给公共IP。因此,您需要看一下Ingress in Kubernets。它是一个API对象,用于管理对集群中服务的外部访问,通常是HTTP。对于Ingress,您需要Ingress Controller和Ingress规则。有关更多详细信息,您可以阅读我发布的文档。
在Azure中,您可以从HTTPS Ingress on Azure Kubernetes Service (AKS)获取更多详细信息。
答案 1 :(得分:1)
正如@aurelius指出的那样,您的配置似乎正确,很可能是您的防火墙规则阻止了流量。
还要确保为集群启用了云提供程序选项。
kubectl get svc -o wide
将显示LoadBalancer的状态和分配的IP地址。
@ charles-xu-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