应用服务
主机网络配置
Kubernetes 集群中的节点主机网络配置涉及到容器运行时、网络插件、Pod 网络以及节点主机的网络设置。以下是一些与主机网络配置相关的关键方面
容器运行时配置
你的 Kubernetes 节点上可能运行着一个或多个容器运行时,如 Docker、containerd 或 CRI-O。每个容器运行时都有其自己的网络配置和选项。在 Docker 中,你可以通过编辑 Docker 配置文件(通常是 /etc/docker/daemon.json
)来配置 Docker 的网络设置。
{
"bip": "172.17.0.1/16",
"default-address-pools": [
{"base": "172.18.0.0/16", "size": 24}
]
}
上述示例配置了 Docker 的默认桥接网络的地址范围以及默认地址池。
网络插件(CNI)
Kubernetes 使用容器网络接口(CNI)规范来与不同的网络插件集成。网络插件负责创建和管理 Pod 之间的网络通信。常见的网络插件包括 Calico
、Flannel
、Weave
等。每个网络插件都有其自己的配置方式,通常需要在节点上安装和配置。
Pod 网络
Pod 网络是指在 Kubernetes 集群中 Pod 之间和 Pod 到集群外部通信的网络。网络插件会创建虚拟网络,使得 Pod 能够通过该网络进行通信。一些网络插件可能使用 overlay 网络,而另一些可能使用主机网络直接将 Pod 连接到主机网络。
节点主机网络设置
节点主机上的网络设置可能需要根据网络插件和容器运行时的要求进行调整。这可能包括修改主机的 iptables 规则、路由设置、网络接口配置等。具体的配置取决于你选择的容器运行时和网络插件。
服务类型
ClusterIP
- 特性: ClusterIP 是默认的服务类型。它为集群内部提供了一个虚拟的 IP 地址,用于将流量引导到匹配服务选择器的 Pod。
- 用途: 通常用于将应用程序的不同部分连接起来,以实现内部通信。
- 示例 YAML:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
NodePort
- 特性: NodePort 将服务公开为每个节点的 IP 地址上的相同端口号。它会创建一个高端口(通常在
30000-32767
范围内)来映射到服务的端口。 - 用途: 适用于需要从集群外部访问服务的情况,但不适用于生产环境。
- 示例 YAML:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: NodePort
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
LoadBalancer
- 特性: LoadBalancer 将云提供商的负载均衡器配置为服务的前端,通过分配一个外部 IP 地址给服务。
- 用途: 适用于需要从集群外部访问服务的情况,并且在生产环境中,尤其在云环境中。
- 示例 YAML:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: LoadBalancer
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
端点(Endpoints)
- 特性: 端点是 Service 对象背后的实际工作负载(Pod)的 IP 地址和端口。
- 用途: 用于了解服务后面的实际 Pod 地址,可用于手动配置负载均衡器或直接连接到服务背后的 Pod。
- 示例查看端点:
kubectl get endpoints my-service