K8s安装Ingress
摘要
1. 拉取镜像
由于无法访问google网络,故拉取相应的镜像一定不会成功。
说明:
- 本文采用的拉取镜像方法是通过docker hub拉取镜像到本地,最后把镜像tag成k8s镜像的方式
- 本文所有镜像的拉取都是通过这种方式完成的
比如:
1 | docker pull k8s.gcr.io/defaultbackend-amd64:1.5 |
2. 使用Helm部署Nginx Ingress
为了便于将集群中的服务暴露到集群外部,需要使用Ingress。接下来使用Helm将Nginx Ingress部署到Kubernetes上。 Nginx Ingress Controller被部署在Kubernetes的边缘节点上.
我们将master(192.168.0.7)做为边缘节点,打上Label:
1 | kubectl label node k8s-master node-role.kubernetes.io/edge= |
stable/nginx-ingress chart
的值文件ingress-nginx.yaml
如下:
1 | controller: |
nginx ingress controller的副本数replicaCount为1,将被调度到master这个边缘节点上。这里并没有指定nginx ingress controller service的externalIPs,而是通过hostNetwork: true设置nginx ingress controller使用宿主机网络。
1 | helm repo update |
1 | kubectl get pod -n ingress-nginx -o wide |
拉取镜像报错(所有来自k8s.gcr.io
镜像都无法拉取)
查看报错信息
1 | kubectl describe pod nginx-ingress-default-backend-7b8b45bd49-zsfzm -n ingress-nginx |
命令解释:kubectl describe pod
通过命令kubectl get pod --all-namespaces
获取上述信息
发现nginx-ingress的容器状态是ContainersCreating/ImagePullBackOff,则需要手动下载镜像
通过从docker hub拉取镜像到本地,最后把镜像tag成k8s镜像的方式
1 | docker pull googlecontainer/defaultbackend-amd64:1.1 |
如果访问http://192.168.0.7返回default backend,则部署完成。
3. 使用Helm部署dashboard
kubernetes-dashboard.yaml
文件如下:
1 | image: |
1 | helm install stable/kubernetes-dashboard \ |
获取登录token
1 | kubectl -n kube-system get secret | grep kubernetes-dashboard-token |
镜像拉取失败,原因一样,同理处理问题
1 | kubectl describe pod kubernetes-dashboard-848b8dd798-dlcfn -n kube-system |
1 | docker pull siriuszg/kubernetes-dashboard-amd64:v1.10.1 |
使用域名访问k8s.frognew.com
,客户端需要修改hosts,有dns服务器直接在dns服务器添加解析。
在dashboard的登录窗口使用上面的token登录。
3.1 登录方式
可以看到有两种登录方式:kubeconfig文件、token令牌。
要想登录,得先有账号
k8s集群中,账号分为两种:UserAccount(现实中的人)、ServiceAccount(集群内的客户端)
由于dashboard在集群中是以Pod方式运行提供的服务,所以要使用ServiceAccount访问,简称sa
然而并不是随随便便找个账号就能登录,我们对账号还要设置访问控制,哪些资源允许什么样的操作。
这就用到RBAC(基于角色的访问控制)
首先创建一个sa
1 | kubectl create serviceaccount mysa -n default |
创建rolebinding\clusterrolebinding
,然后将此sa绑定至集群中存在的或自定义的role或clusterrole,绑定哪个role\clusterrole
,sa就会具有此role\clusterrole
对应的权限
1 | kubectl create clusterrolebinding dashboard-admin --clusterrole=admin --serviceaccount=default:mysa |
查看sa的secret
1 | kubectl get secret |
获取tocken
1 | kubectl describe secret mysa-token-92bvn |
将secret中的token使用base64方式进行解码,然后使用变量引用
1 | DASH_TOCKEN=$(kubectl get secret mysa-token-92bvn -o jsonpath={.data.token}|base64 -d) |
创建一个集群,将信息输出到/root/dashbord-admin.conf
1 | kubectl config set-cluster dashboard-UI --server=192.168.0.50:6443 --kubeconfig=/root/dashbord-admin.conf |
创建一个集群用户,并引用sa的token,并输出到/root/dashbord-admin.conf
1 | kubectl config set-credentials dashboard-admin --token=$DASH_TOCKEN --kubeconfig=/root/dashbord-admin.conf |
创建一个上下文,指定集群名、集群用户名,并输出到/root/dashbord-admin.conf
1 | kubectl config set-context dashboard-admin@dashboard-UI --cluster=dashboard-UI --user=dashboard-admin --kubeconfig=/root/dashbord-admin.conf |
设置集群中当前使用的用户,并输出到/root/dashbord-admin.conf
1 | kubectl config use-context dashboard-admin@dashboard-UI --kubeconfig=/root/dashbord-admin.conf |
生成的dashbord-admin.conf
即可用于登录dashboard
可以将此文件复制到其他主机,这样其他主机也可以登录
不过,不管是刚用到token登录或kubeconfig文件登录,设置的权限是整个集群中最高的管理员的权限,切记当心泄露
生产环境中,最好将sa绑定到自定义权限的role或者cluster,可以降低role和cluster的权限,来保证集群安全