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