Cluster IP

即Service的IP,通常在集群内部使用Service Name来访问服务,用户不需要知道该IP地址,kubedns会自动根据service name解析到服务的IP地址,将流量分发给Pod。

Service Name才是对外暴露服务的关键。

在kubeapi的配置中指定该地址范围。

默认配置

1
2
--service-cluster-ip-range=10.254.0.0/16
--service-node-port-range=30000-32767

Pod IP

flannel

通过配置flannel的networksubnet来实现。

默认配置

1
2
FLANNEL_NETWORK=172.30.0.0/16
FLANNEL_SUBNET=172.30.46.1/24

Pod的IP地址不固定,当pod重启时IP地址会变化。

该IP地址也是用户无需关心的。

但是Flannel会在本地生成相应IP段的虚拟网卡,为了防止和集群中的其他IP地址冲突,需要规划IP段。

主机/Node IP

物理机的IP地址,即kubernetes管理的物理机的IP地址。

1
2
3
4
5
$ kubectl get nodes
NAME STATUS AGE VERSION
172.20.0.113 Ready 12d v1.6.0
172.20.0.114 Ready 12d v1.6.0
172.20.0.115 Ready 12d v1.6.0

clusterIp

关于clusterIp属性, Service有个Cluster IP,这个IP是固定不变的,除非Service被删除,所以也可以使用ClusterIP在集群内部访问Service。(LoadBalancer需要指定clusterIp, 但是需要切记,这个clusterip和pod ip是两码事)

固定vip(clusterIp)

Service 创建的请求中,可以通过设置 spec.clusterIP 字段来指定自己的集群 IP 地址。 比如,希望替换一个已经已存在的 DNS 条目,或者遗留系统已经配置了一个固定的 IP 且很难重新配置。

1
2
3
4
# 固定vip
clusterIP: 10.43.77.110
clusterIPs:
- 10.43.77.110

用户选择的 IP 地址必须合法,并且这个 IP 地址在 service-cluster-ip-range CIDR 范围内, 这对 API 服务器来说是通过一个标识来指定的。 如果 IP 地址不合法,API 服务器会返回 HTTP 状态码 422,表示值不合法。

k8s: service-cluster-ip-range参数: 在apiserver配置文件/etc/kubernetes/manifests/kube-apiserver.yaml中查看

k3s: service-cluster-ip-range参数:

--cluster-cidr value (networking) Network CIDR to use for pod IPs (default: "10.42.0.0/16")
--service-cidr value (networking) Network CIDR to use for services IPs (default: "10.43.0.0/16")

从 v1.19.1+k3s1 开始可用

除了使用环境变量和 CLI 参数配置 K3s 之外,K3s 还可以使用配置文件。

默认情况下,位于 的 YAML 文件中的值/etc/rancher/k3s/config.yaml将在安装时使用。

固定pod ip(只找到了利用calico固定podip的方式)

Kubernetes 固定 Pod IP 地址方法

k8s配置calico,以及配置ip固定

k8s使用如下配置给pod固定ip