牧场主/ K8 /天蓝色/ Kubectl

时间:2018-07-16 19:25:30

标签: azure kubectl rancher kubernetes-ingress

我的集群中有一个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转发吗?

2 个答案:

答案 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