在k8s中不能直接给pod容器做端口映射让外界访问
当pod挂了的时候,rc会拉起一个新的pod,新的pod的ip地址会改变,service资源提供负载均衡,自动关联podip。clusterip外界访问不了,内部才能访问。
k8s中的ip地址类型
nodeip(宿主机ip地址) | 10.0.0.11,可和docker容器直接映射 |
clusterip(k8s中定义10.254.0.0/16段) | 用户访问任意nodeip,映射到固定的clusterip地址 |
podip(自动关联到service上) | cluster上提供负载均衡功能,默认轮询 |
创建一个service
apiVersion: v1
kind: Service
metadata:
name: myservice
spec:
type: NodePort # NodePort-端口映射的形式
ports:
- port: 80 # cluster-ip的端口
nodePort: 30000 # 宿主机的端口
targetPort: 80 # pod-ip的端口
selector:
app: mypod # 为哪些pod做负载均衡,标签用选择器
可在浏览器用nodeip:nodeport访问,端口范围只能设置成30000-32767,这个值可以修改,配置文件
/etc/kubernetes/apiserver
配置给参数KUBE_API_ARGS
KUBE_API_ARGS="--service-node-port-range=10000-60000"
指定clusterip地址范围的参数
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
这些参数都会用来启动apiserver,apiserver的启动文件在
/usr/lib/systemd/system/kube-apiserver.service
修改配置文件成功后重启:
systemctl restart kube-apiserver.service
rc保证高可用,service保证能被外界访问到