Kubernetes calio,dashboard,Kuboard 部署
Calico网络两台Docker主机如何实现容器互通?Docker跨主机会分配相同的的IP,这样肯定是无法通信的,在本地ping 172.17.0.2肯定是找的该主机上面的172.0.02不会去找另外一台主机上面的容器Q:1、统一管理这些k8s node网段,保障每个容器分配不一样的ip2、要知道转发哪个docker主机?3、怎么实现这个转发(从docker主机1上容器发送到另一台docker主机
Calico网络
两台Docker主机如何实现容器互通?
Docker跨主机会分配相同的的IP,这样肯定是无法通信的,在本地ping 172.17.0.2肯定是找的该主机上面的172.0.02不会去找另外一台主机上面的容器
Q:
1、统一管理这些k8s node网段,保障每个容器分配不一样的ip
2、要知道转发哪个docker主机?
3、怎么实现这个转发(从docker主机1上容器发送到另一台docker主机上容器)
A:
1、给每个docker主机分配唯一的网段
2、做好记录,每个docker主机对应的网段
3、可以使用iptables或者把宿主机当做一个路由器,配置路由表
Docker里面的容器实际上都连接到了dokcer0这个网桥上面,他们之间的通信就像局域网之间的通信。所以本机的docker容器网络通信已经解决了。引入CNI主要是为了解决容器跨主机网络通信。
为了解决这些网络需求需要部署网络组件,CNI是容器是一个容器网络接口规范,k8s就采用了这个规范去实现的
K8s CNI网络模型
K8s是一个扁平化网络。(只要部署了网络插件,k8s当中的网络就全部打通了)
即所有部署的网络组件都必须满足如下要求:
• 一个Pod一个IP
• 所有的 Pod 可以与任何其他 Pod 直接通信
• 所有节点可以与所有 Pod 直接通信
• Pod 内部获取到的 IP 地址与其他 Pod 或节点与其通信时的 IP 地址是同一个
主流网络组件有:Flannel、Calico等
k8s集群安装完毕验证
测试kubernetes集群
- 验证Pod工作
- 验证Pod网络通信
- 验证DNS解析
验证Pod工作
在Kubernetes集群中创建一个pod,验证是否正常运行:
[root@k8s-master ~]# kubectl create deployment nginx --image=nginx
[root@k8s-master ~]# kubectl expose deployment nginx --port=80 --type=NodePort
service/nginx exposed
[root@k8s-master ~]# kubectl get pod,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-6799fc88d8-drb2s 1/1 Running 0 109s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 103m
service/nginx NodePort 10.99.50.2 <none> 80:31332/TCP 23s
内部访问是通过cluster ip 10.99.50.2,集群内部访问是这个IP,这个可以在任意一个节点都可以访问
[root@k8s-master ~]# curl 10.99.50.2
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
[root@k8s-node1 ~]# curl 10.99.50.2
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
如果要在集群外部浏览器访问要使用31332端口,通过任意一个节点的IP+端口,这个端口随机生成的,31332是对外暴露的端口,任意一个节点的ip加上该端口号就可以访问
验证Pod网络通信
主要部署的calio组件是否是正常的
Calico是一个纯三层的数据中心网络方案,Calico支持广泛的平台,包括Kubernetes、OpenStack等。
Calico 在每一个计算节点利用 Linux Kernel 实现了一个高效的虚拟路由器( vRouter) 来负责数据转发,而每个 vRouter 通过 BGP 协议负责把自己上运行的 workload 的路由信息向整个 Calico 网络内传播。
此外,Calico 项目还实现了 Kubernetes 网络策略,提供ACL功能。
简单理解就是calio就是网络插件的一种
比如通过clusterip +端口号 在任意一个节点都是可以访问的,这个容器其实是分配在其中一个节点,访问该ip会转发到该容器上面,相对于虚拟的负载均衡器一样,这是一个VIP,帮你转发到后端的容器当中。这样在每台机器访问意味着容器不管是在哪个节点,都能够帮你提供响应
[root@k8s-master ~]# kubectl get pod -n kube-system -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
calico-kube-controllers-5c6f6b67db-q5qb6 1/1 Running 2 4d6h 10.244.36.75 k8s-node1 <none> <none>
calico-node-6hgrq 1/1 Running 2 4d6h 192.168.179.102 k8s-master <none> <none>
calico-node-jxh4t 1/1 Running 2 4d6h 192.168.179.103 k8s-node1 <none> <none>
calico-node-xjklb 1/1 Running 3 4d6h 192.168.179.104 k8s-node2 <none> <none>
部署 Dashboard
[root@k8s-master ~]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.3/aio/deploy/recommended.yaml
修改,只需要添加一行
spec:
ports:
- port: 443
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
type: NodePort 加上这一行就行了
[root@k8s-master ~]# kubectl apply -f recommended.yaml
[root@k8s-master ~]# kubectl get pods -n kubernetes-dashboard
NAME READY STATUS RESTARTS AGE
dashboard-metrics-scraper-7b59f7d4df-5tzgb 1/1 Running 0 56s
kubernetes-dashboard-5dbf55bd9d-tgt7b 1/1 Running 0 57s
[root@k8s-master ~]# kubectl get svc -n kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
dashboard-metrics-scraper ClusterIP 10.108.138.194 <none> 8000/TCP 64s
kubernetes-dashboard NodePort 10.106.187.194 <none> 443:31383/TCP 65s
这里暴露的是443表示使用https访问,对外暴露端口是31383
使用https访问(这里的证书是自签证书,这个证书是不会被信任的)
这里使用token来认证,创建service account并绑定默认cluster-admin管理员集群角色:
创建用户
[root@k8s-master ~]# kubectl create serviceaccount dashboard-admin -n kube-system
serviceaccount/dashboard-admin created
用户授权
[root@k8s-master ~]# kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
clusterrolebinding.rbac.authorization.k8s.io/dashboard-admin created
获取用户Token
[root@k8s-master ~]# kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
Name: dashboard-admin-token-spfnp
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name: dashboard-admin
kubernetes.io/service-account.uid: 8e757c86-13af-47fa-8d69-a4d0805d0152
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1066 bytes
namespace: 11 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6InR0cTRHNDNQUGFMeUZ5Rnp1azZnSUEyRVU0WEY1dWdEMEYwd056ZnNkWWcifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tc3BmbnAiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiOGU3NTdjODYtMTNhZi00N2ZhLThkNjktYTRkMDgwNWQwMTUyIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.zbOZ4-5UKqllErK1HLZ75srq6zeBzWWNtmz5LTIS0HES-Ih-HZbyGRJxqoW7-T692DW2J-LvRIZH-RrCw-V-wWT435KR-fku6X6YR6tTSzaUIYB3eh3UDjrgQlHriy1M752YwoCpXBi0k3sHAvzGPDJFupeihum2Dr3ZCvUqtpKeSx9zEoWEXWKyVyux4Wr7zbDYWGT-fe2DEAikosKt_70xPM3igexUT67ljH7DdITWzdcEFqB78NVfWGzSlLX6zddvQu2O17NLL_ea-yaxcv6rSMyYgYShRoPwmY55HHsP81dWuoIosBKml-TYbXAQXIcruKvU0vRS71KzN9yAyQ
使用输出的token登录Dashboard。
安装 Kuboard
https://kuboard.cn/install/install-dashboard.html#%E5%89%8D%E6%8F%90
kubectl apply -f https://kuboard.cn/install-script/kuboard.yaml
kubectl apply -f https://addons.kuboard.cn/metrics-server/0.3.7/metrics-server.yaml
查看 Kuboard 运行状态:
[root@k8s-master ~]# kubectl get pods -l k8s.kuboard.cn/name=kuboard -n kube-system
NAME READY STATUS RESTARTS AGE
kuboard-74c645f5df-l7rmf 1/1 Running 1 46h
获取Token
拥有的权限
- 此Token拥有 ClusterAdmin 的权限,可以执行所有操作
执行命令
# 如果您参考 www.kuboard.cn 提供的文档安装 Kuberenetes,可在第一个 Master 节点上执行此命令
echo $(kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep kuboard-user | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d)
输出
取输出信息中 token 字段
eyJhbGciOiJSUzI1NiIsImtpZCI6InR0cTRHNDNQUGFMeUZ5Rnp1azZnSUEyRVU0WEY1dWdEMEYwd056ZnNkWWcifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJvYXJkLXVzZXItdG9rZW4tcGNzbGsiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoia3Vib2FyZC11c2VyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiMmRlODY2ZjktZDUwZC00YzA3LTliZTctMTNkODRmZWJmYWRjIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmt1Ym9hcmQtdXNlciJ9.WvJ4NUbSw1FVFpltpD5T_LQVnJwL8XZbG2HCVPOlVN4cKD_2HLSBEvGl0rZ5ydqitQqds-o-6bjvbWOhKapMQTTHsI7-YeX9N2bjcAd4DCWo_TwR6TJ316yY1F6N94eQHF_Cjok3uOxHayE5banYQXKmsPrrUONbjBoCfU4kFIvRcam0y77QGNtNXUK4nHd0mb69IDNFZIX_42YQCUb2SH9_GNf-7EVpZniKwgGLwNLzbFqQPt7SrB4vLNPTXWWqLl-6SBg5p5RTI1n73ohBA5XURZXU7nmkh_T_jwKqGf9pFfPNPLe-VbsS7geearWrdq0KGgl-aTiTGKmAuGhxPQ
访问Kuboard
您可以通过NodePort访问 Kuboard
Kuboard Service 使用了 NodePort 的方式暴露服务,NodePort 为 32567;您可以按如下方式访问 Kuboard。
http://任意一个Worker节点的IP地址:32567/
更多推荐
所有评论(0)