本教程适用范围

  • 在AWS上使用EKS服务部署k8s Dashboard,并通过ALB访问
  • EKS集群计算节点采用托管EC2,并使用启动模板。
  • 使用AWS海外账号,us-west-2区域
  • 使用账号默认vpc(172.31.0.0/16)和子网
  • 使用awscli创建而不是eksctl
  • 对AWS有一定了解,不适用于AWS小白
  • 文中代码,汉字部分需要修改成自己的信息

涉及到知识点

  • AWS服务:EC2,IAM,EKS,VPC,ACM,ALB,SecurityGroup, awscli, eksctl
  • K8s: Service, Pod, Ingress, Node

必备条件

  • 有一台用于操作的服务器(本教程使用ec2: ubuntu 18,EKS默认将集群最大权限赋予创建集群的用户,所以不建议使用控制台创建集群,尤其是对于SSO登录用户)
  • 拥有AWS administrator权限(本教程将权限赋予服务器)
  • 拥有域名管理权限(能够创建并解析域名)
  • 拥有域名证书(本教程使用ACM证书)

详细步骤

安装kubectl,awscli

# install kubectl
wget https://dl.k8s.io/release/v1.22.0/bin/linux/amd64/kubectl
chmod 755 kubectl
mv kubectl /usr/bin
# install awscli
pip3 install awscli
# install eksctl
wget https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz
tar -xvf eksctl_Linux_amd64.tar.gz
chmod 755 eksctl
mv eksctl /usr/bin

输入如下表示安装完成

在EKS上启动一个集群

使用aws控制台,创建eks-cluster角色,策略如下:

创建eks-cluster安全组

将需要使用的子网添加如下标签(有了此标签,才能使用alb)

创建集群

aws eks create-cluster \
--region us-west-2 \
--name zhenglisai \
--kubernetes-version 1.21 \
--role-arn arn:aws:iam::你的账号ID:role/eks-cluster \
--resources-vpc-config subnetIds=subnet-cf36ca92,subnet-75866b0d,subnet-19ef9b32,securityGroupIds=sg-0daa7eabdc1f845fd

从控制台可以看到集群创建中



查看集群状态

创建集群计算节点实例启动模板

在控制台EC2中创建启动模板,使用镜像AMI:ami-0cb182e3037115aa0,根据自己需要选择实例类型,安全组,服务器密钥对,启动模板中不要设置网络接口和IAM 实例配置文件,最重要的一步是在启动模板最后的用户数据中填写:

脚本后参数为EKS集群名

创建集群计算节点实例角色

创建集群计算节点组

aws eks create-nodegroup \
--cluster-name zhenglisai \
--nodegroup-name zls-node \
--scaling-config minSize=1,maxSize=3,desiredSize=2 \
--subnets subnet-cf36ca92 subnet-75866b0d subnet-19ef9b32 \
--node-role arn:aws:iam::你的账号ID:role/eks-demo \
--launch-template version=4,id=lt-020949e5e604df89c

配置kubectl以访问EKS

# --name 后为集群名
aws eks --region us-west-2 update-kubeconfig --name zhenglisai

配置完成后,访问EKS集群



表示完成配置,可以访问集群了。

查看所有正在运行的pod

可以看到,有两个pod没有起来,我们看一下为什么没有起来

执行

kubectl get pods coredns-85d5b4454c-rkccb --namespace kube-system --output yaml

看输出是没有可用的计算节点,说明我们上一步创建的计算节点还没运行起来,查看可用节点,确实没有

等大约两分钟以后,再次执行,可以看到实例已经注册到集群了

再次查看pod状态,都已经运行起来了。

安装Metric Server

这个东西主要用于集群的弹性扩容指标和dashboard指标,不是用于监控资源!

执行部署

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

输出



验证部署是否成功

部署Dashboard

执行

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.5/aio/deploy/recommended.yaml

默认情况下,Kubernetes 控制面板用户的权限是有限的,我们创建一个超级用户

创建一个名为eks-admin.yaml的文件,内容为

apiVersion: v1
kind: ServiceAccount
metadata:
name: eks-admin
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: eks-admin
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: eks-admin
namespace: kube-system

执行此文件

kubectl apply -f eks-admin.yaml

获取Dashboard的token令牌,用于访问Dashboard

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep eks-admin | awk '{print $1}')

到此为止,已完成集群的搭建和Dashboard的部署,但是此时只能在集群内部访问Dashboard,无法通过外网访问。下一步将Dashboard接口暴露给ALB

安装AWS负载均衡器控制器到EKS集群

下载IAM策略

wget  https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.2.0/docs/install/iam_policy.json

创建策略

aws iam create-policy \
--policy-name AWSLoadBalancerControllerIAMPolicy \
--policy-document file://iam_policy.json

创建集群IAM OIDC身份提供商

eksctl utils associate-iam-oidc-provider --cluster zhenglisai --approve

创建k8s账户并关联策略

eksctl create iamserviceaccount \
--cluster=zhenglisai \
--namespace=kube-system \
--name=aws-load-balancer-controller \
--attach-policy-arn=arn:aws:iam::你的账号ID:policy/AWSLoadBalancerControllerIAMPolicy \
--override-existing-serviceaccounts \
--approve

安装负载均衡器控制器

kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller/crds?ref=master"
helm repo add eks https://aws.github.io/eks-charts
helm repo update
helm upgrade -i aws-load-balancer-controller eks/aws-load-balancer-controller \
--set clusterName=zhenglisai \
--set serviceAccount.create=false \
--set serviceAccount.name=aws-load-balancer-controller \
-n kube-system

验证安装是否完成

部署Ingress

创建部署文件,dashboard-ingress.yaml,内容如下(需要修改汉字部分内容):

---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
namespace: kubernetes-dashboard
name: ingress-dashboard
annotations:
alb.ingress.kubernetes.io/load-balancer-name: zhenglisai
alb.ingress.kubernetes.io/backend-protocol: HTTPS
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]'
alb.ingress.kubernetes.io/certificate-arn: 你证书的ARN,在ACM中查看
spec:
rules:
- host: 你的域名
http:
paths:
- path: /*
backend:
serviceName: kubernetes-dashboard
servicePort: 443

执行文件,创建ingress

kubectl apply -f dashboard-ingress.yaml

去域名解析网站,创建域名,并指向ALB的DNS

使用https协议访问域名

输入上一章节中获取Dashboard的token令牌即可登录

到此,完成EKS集群的搭建,Dashobard部署,Ingress部署,并实现了外网访问Dashboard。

【k8s】在AWS EKS部署并通过ALB访问k8s Dashboard保姆级教程的更多相关文章

  1. Eclipse for C/C++ 开发环境部署保姆级教程

    Eclipse for C/C++ 开发环境部署保姆级教程 工欲善其事,必先利其器. 对开发人员来说,顺手的开发工具必定事半功倍.自学编程的小白不知道该选择那个开发工具,Eclipse作为一个功能强大 ...

  2. 使用Esxi虚拟化部署OpenWrt/HomeLede+扩容硬盘 保姆级教程

    本文介绍使用VMware虚拟化平台部署OpenWrt/HomeLede,并扩容固件硬盘的方法. 推荐使用虚拟化方式部署软路由,理由如下: 部署.升级.回退.扩容等操作非常方便,特别适合折腾 可以方便的 ...

  3. jenkins在aws eks中的CI/CD及slave

    本文档不讲解jenkins的基础用法,主要讲解配合k8s的插件,和pipeline的用途和k8s ci/cd的流程. 以及部署在k8s集群内和集群外的注意事项. 1.准备工作 以下在整个CI/CD流程 ...

  4. AWS EKS 创建k8s生产环境实例

    #AWS EKS 创建k8s生产环境实例 在AWS部署海外节点, 图简单使用web控制台创建VPC和k8s集群出错(k8s), 使用cli命令行工具创建成功 本实例为复盘, 记录aws命令行工具创建e ...

  5. aws EKS EFS 上安装mysql Operation notpermitted

    在AWS EKS k8s.EFS nfs.mysql.changing ownership of '/var/lib/mysql/': Operation notpermitted 在aws eks ...

  6. k8s 1.12 环境部署及学习笔记

    1.K8S概述 1.Kubernetes是什么 2.Kubernetes特性 3.Kubernetes集群架构与组件 4.Kubernetes核心概念 1.1 Kubernetes是什么 • Kube ...

  7. AWS EKS 添加IAM用户角色

    作者:SRE运维博客 博客地址: https://www.cnsre.cn/ 文章地址:https://www.cnsre.cn/posts/211203931498/ 相关话题:https://ww ...

  8. 基于Kubernetes在AWS上部署Kafka时遇到的一些问题

    作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 交代一下背景:我们的后台系统是一套使用Kafka消息队列的数据处理管线 ...

  9. 在AWS中部署OpenShift平台

    OpenShift是RedHat出品的PAAS平台.OpenShift做为PAAS平台最大的特点是它是完全容器化的PAAS平台,底层封装了Docker和Kubernetes,上层暴露了对开发者友好的接 ...

随机推荐

  1. 题解 有标号DAG计数

    题目传送门 题目大意 给出\(n\),求出对于任意\(t\in[1,n]\),点数为\(t\)的弱联通\(\texttt{DAG}\)个数.答案对\(998244353\)取模. \(n\le 10^ ...

  2. python中return的返回和执行

    1 打印函数名和打印函数的执行过程的区别 例子1.1 def a(): print(111) print(a) # 打印a函数的内存地址,不会对a函数有影响,a函数不会执行 print(a()) # ...

  3. 阿里P8面试官:如何设计一个扛住千万级并发的架构?

    大家先思考一个问题,这也是在面试过程中经常遇到的问题. 如果你们公司现在的产品能够支持10W用户访问,你们老板突然和你说,融到钱了,会大量投放广告,预计在1个月后用户量会达到1000W,如果这个任务交 ...

  4. Vuls 漏洞扫描工具部署及效果展示

    Vuls 漏洞扫描工具部署及效果展示 介绍 Vuls根据NVD,OVAL等数据对主流Linux系统进行扫描,并具有完善的报告. 支持系统 Distribution Release Alpine 3.3 ...

  5. exe图标消失的解决方案

    步骤 win + r组合键打开运行窗口 输入cmd,回车 在终端窗口右键粘贴即可 taskkill /im explorer.exe /f cd /d %userprofile%\appdata\lo ...

  6. 第五次Alpha Scrum Meeting

    本次会议为Alpha阶段第五次Scrum Meeting会议 会议概要 会议时间:2021年4月30日 会议地点:线上会议 会议时长:15min 会议内容简介:本次会议以主要围绕卡牌对接的诸多问题与对 ...

  7. 【技术博客】在Unity3d中实现烟花效果

    在游戏开发中,我们经常需要用到类似烟花的效果.在Unity3d中,实现烟花效果的方法不止一种,我选用了Unity3d中新添加的粒子特效工具--visual effect graph来进行实现. 实现过 ...

  8. 大神教零基础入门如何快速高效的学习c语言开发

    零基础如果更快更好的入门C语言,如何在枯燥的学习中找到属于自己的兴趣,如果把学习当成一种事务性的那以后的学习将会很难有更深入的进步,如果带着乐趣来完成学习那将越学越有意思这样才会让你有想要更深入学习的 ...

  9. CPU使用率和平均负载

    转载: https://mp.weixin.qq.com/s?__biz=MzU4NzU0MDIzOQ==&mid=2247487782&idx=3&sn=3f04bb053d ...

  10. Python pip 和pip3区别 联系

    python 有python2和python3的区别 那么pip也有pip和pip3的区别 大概是这样的 pip是python的包管理工具,pip和pip3版本不同,都位于Scripts\目录下: 如 ...