前文提要:
上篇文章我们简单部署了k8s的集群环境,相比一定迫不及待的想部署一个实际应用了吧。那这里我们就简单部署一个大家几乎都用得上的应用nginx。
里面一一般包含nginx相关的镜像,端口,名字,pod数量
kubernetes主要的功能就是管理多个Pod,Pod中可以包含一个或多个容器,而kubernetes是如可管理多个Pod的呢?对,没错,就是通过控制器,比如Deployment
vim nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2 # 设置副本数量
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest #镜像拉取地址
ports:
- containerPort: 80 #监听端口
kubectl apply -f nginx-deployment.yaml
kubectl apply -f nginx-deployment.yaml
到这里running就算创建完成了。
❓那么,如何访问呢?或者说怎么把服务暴漏呢?那么多容器,到底访问哪一个呢?❓
Service的主要目标是为Kubernetes集群内的应用程序提供一个稳定的网络端点,使它们可以相互通信。它顺便实现了以下几个功能。
- 服务发现:Kubernetes中的应用程序通常以副本的方式运行,这意味着多个相同的应用程序副本可能分布在集群的不同节点上。Service允许客户端应用程序找到并连接到这些副本,而无需了解它们的具体位置。Service为应用程序提供了一个虚拟的DNS名称或IP地址,客户端可以使用该名称或IP地址来访问服务。
- 负载均衡:Service在后台自动为多个副本分布的应用程序提供负载均衡。当客户端请求连接到Service时,它会将请求平均分发给可用的副本,以确保流量分布均匀,避免某个副本过载。
- 完整性检查:Service还提供了对服务的基本完整性检查。如果某个副本不可用(例如,由于节点故障或容器崩溃),Service会将流量路由到可用的副本,以确保服务的连续性。
不过我们为了测试,我们就用了一个最简单的ndeport的网络,说实话这并为用到k8s的核心内容,相当于单主机部署nginx并且开了一个端口。
ClusterIP是默认的Service类型。 它为服务分配一个虚拟的Cluster IP地址,仅在Kubernetes集群内部可用。
这意味着只有集群内部的其他Pod可以通过Cluster IP地址访问该服务。
ClusterIP通常用于内部微服务之间的通信,不会暴露到集群外部。 NodePort:NodePort: 类型的Service会在每个Node上都开放一个静态端口,允许从集群外部访问服务。
当外部流量到达NodePort端口时,它将被转发到Service的Cluster IP地址,并由Kubernetes进行负载均衡。
NodePort通常用于需要从集群外部访问服务的场景,但不是最安全的方式,因为端口是公开的。 LoadBalancer:LoadBalancer:类型的Service使用云提供商(如AWS、Azure、GCP)的负载均衡器服务来公开应用程序。
在创建LoadBalancer Service时,云提供商将为该服务分配一个外部IP地址,并将流量分发到集群中的Pod。
LoadBalancer通常用于需要在云环境中公开服务并实现负载均衡的情况。它对于外部流量非常有用,并且可以与HTTPS等TLS证书集成以提供安全的外部访问。
一般在落地方案中LoadBalancer分发流量是比较合适的,同时在纯后端应用中使用ClusterIP也没问题。
vim nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 8000 #nortPort开在主机的端口
type: NodePort # 这里使用LoadBalancer类型,如果你在本地运行,可以使用NodePort类型或ClusterIP类型
/1e208a1ada514890ae22c3689db903b5.png)
kubectl apply -f nginx-service.yaml
这篇文章,我们使用nodePort访问了k8s部署的nginx,并且简单理解了k8s的网络构成,这对对于我们理解k8s的庞大架构是重要的,希望我们不忘初心,砥砺前行!