Kubernetes-service实例

本文介绍Kubernetes中的Service资源,它是连接Pods与外部访问的重要桥梁。Service通过统一的入口地址实现对多个Pod实例的负载均衡,使得Pods的动态变化对外部访问透明。文章还展示了Service配置示例及如何通过kube-proxy在集群内实现负载均衡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也就意味着不方便直接采用pod的ip对服务进行访问。

为了解决这个问题,kubernetes提供了Service资源,Service会对提供同一个服务的多个pod进行聚合,并且提供—个统一的入口地址。通过访问Service的入口地址就能访问到后面的pod服务。
在这里插入图片描述

Service在很多情况下只是一个概念,真正起作用的其实是kube-proxy服务进程,每个Node节点上都运行着一个kube-proxy服务进程。当创建Service的时候会通过api-server向etcd写入创建的service的信息,而kube-proxy会基于监听的机制发现这种Service的变动,然后它会将最新的Service信息转换成对应的访问规则。

在这里插入图片描述

安装ipvsadm
#10.97.97.97:80是service提供的访问入口
#当访问这个入口的时候,可以发现后面有三个pod的服务在等待调用,# kube-proxy会基于rr(轮询〉的策略,将请求分发到其中一个pod上去
#这个规则会同时在集群内的所有节点上都生成,所以在任何一个节点上访问都可以。
[ root@node1 ~]# ipvsadm -Ln

安装deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment
  namespace: dev
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.1
        ports:
        - containerPort: 80 

进入nginx修改主页面的信息

kubectl exec -it deployment-5ffc5bf56c-z2vwk -n dev /bin/sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
# echo "1" > /usr/share/nginx/html/index.html
# exit
[root@master ~]# curl 10.244.1.4
1

安装service

apiVersion: v1
kind: Service
metadata:
  name: service
  namespace: dev
spec:
  selector:
    app: nginx-pod
  clusterIP: 10.97.97.97
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 80

出现的错误:标签要一样 app:nginx-pod

查看

[root@master ~]# kubectl describe svc  -n dev
Name:              service
Namespace:         dev
Labels:            <none>
Annotations:       <none>
Selector:          app=nginx-pod
Type:              ClusterIP
IP:                10.97.97.97
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:         10.244.1.2:80,10.244.2.2:80,10.244.2.3:80
Session Affinity:  None
Events:            <none>

[root@master ~]# kubectl get deploy -n dev
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
deployment   3/3     3            3           17m

[root@master ~]# kubectl get pod -n dev
NAME                          READY   STATUS    RESTARTS   AGE
deployment-5ffc5bf56c-4p8wk   1/1     Running   0          17m
deployment-5ffc5bf56c-d9tqr   1/1     Running   0          17m
deployment-5ffc5bf56c-ljzzm   1/1     Running   0          17m

[root@master ~]# curl 10.97.97.97
2
[root@master ~]# curl 10.97.97.97
3
[root@master ~]# curl 10.97.97.97
1
### Kubernetes Dashboard 7.6.1 安装与使用 #### 下载与安装指南 对于版本7.6.1的Kubernetes仪表板,官方推荐通过kubectl命令行工具来部署。具体操作如下: ```bash # 创建服务账户并赋予集群管理员权限 kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml # 部署Dashboard kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/alternative-7.6.1.yaml ``` 注意:上述链接中的`alternative-7.6.1.yaml`文件需根据实际需求调整路径或版本号[^1]。 为了访问仪表盘界面,还需要创建一个能够获取token的服务账号,并将其绑定到具有适当权限的角色上。这一步骤确保了安全性和授权控制。 #### 使用文档概览 一旦成功安装,可以通过以下方式启动代理服务器以便本地浏览器可以连接至远程集群上的Dashbaord实例: ```bash kubectl proxy ``` 打开Web浏览器,在地址栏输入http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#/login即可进入登录页面。 用户可以选择令牌(Token)认证方式进行登陆。此时需要用到之前提到过的ServiceAccount所生成的秘密密钥作为凭证完成身份验证过程。 #### 进阶功能探索 除了基本的操作外,该版本还支持多种插件扩展其可视化管理能力;允许定制化主题满足不同用户的审美偏好;提供了API接口方便开发者集成第三方应用程序和服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值