Kubernetes网络问题

时间:2015-12-09 20:05:28

标签: docker kubernetes etcd flannel

我使用here的教程在VirtualBox(centos7)上安装了Kubernetes集群。

这是我的设置:

  
      
  • kube-master - 10.1.10.152(etcd,kube-apiserver,kube-controller-manager,kube-scheduler)
  •   
  • kube-minion1 - 10.1.10.153(kube-proxy,kubelet,docker,flanneld)
  •   

当我完成设置后,一切看起来都不错:

$ kubectl get nodes
NAME           LABELS                                STATUS
kube-minion1   kubernetes.io/hostname=kube-minion1   Ready

我尝试使用以下配置添加mysql pod和服务:

$ cat mysql.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mysql
  labels:
    name: mysql
spec:
      containers:
    - resources:
        limits :
          cpu: 1
      image: mysql
      name: mysql
      env:
        - name: MYSQL_ROOT_PASSWORD
          value: qwe123
      ports:
        - containerPort: 3306
          name: mysql

$ cat mysql-service.yaml 
apiVersion: v1
kind: Service
metadata:
  labels:
    name: mysql
  name: mysql
spec:
  publicIPs:
    - 10.1.10.153
  ports:
    # the port that this service should serve on
    - port: 3306
  # label keys and values that must match in order to receive traffic for this service
  selector:
    name: mysql

请注意,我确实提供了publicIPs = 10.1.10.153。一旦注入mysql.yaml和mysql-service.yaml,这就是我得到的:

$ kubectl get pods
NAME           READY     STATUS    RESTARTS   AGE
mysql          1/1       Running   0          31s

$ kubectl get services
NAME         LABELS                                    SELECTOR     IP(S)            PORT(S)
kubernetes   component=apiserver,provider=kubernetes   <none>       10.254.0.1       443/TCP
mysql        name=mysql                                name=mysql   10.254.215.138   3306/TCP


$ kubectl describe service mysql
Name:           mysql
Namespace:      default
Labels:         name=mysql
Selector:       name=mysql
Type:           ClusterIP
IP:             10.254.215.138
Port:           <unnamed>   3306/TCP
Endpoints:      172.17.17.5:3306
Session Affinity:   None
No events.

所以我遇到的问题是使用10.1.10.153无法访问mysql。与我能够做的mysql通信的唯一方法是使用10.254.215.138从minion主机访问

为什么我无法使用10.1.10.153访问它?有没有办法让它发挥作用?

谢谢 -D

1 个答案:

答案 0 :(得分:0)

在您的情况下,最简单的方法是指定服务类型“NodePort”。在这种情况下,kubernetes将在每个节点上为服务打开端口,因此可以通过10.1.10.153:3306访问它。你的情况如何 - 如果服务类型是ClusterIP,那么服务只能从集群内部(从pod中)访问,如果指定的话,它可以独立于它的publicIp。