二丫讲梵 二丫讲梵
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)

二丫讲梵

行者常至,为者常成
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)
  • 最佳实践

  • 迎刃而解

  • Nginx

  • Php

  • Zabbix

  • AWS

    • AWS运维部署实践--网络环境规划
    • AWS运维部署实践--route53私有域跨账号共享
    • AWS运维部署实践--使用sigma自建镜像仓库代替ECR
    • AWS运维部署实践--快速拉起生产可用的EKS集群
    • AWS运维部署实践--给EKS集群安装Ingress-Controller
      • AWS运维部署实践--配置跨账号通过kubectl管理EKS集群
      • AWS运维部署实践--内外网Ingress配置验证实践
      • AWS运维部署实践--EKS集群结合metrics-server配置HPA的功能
      • AWS运维部署实践--EKS多集群监控指标集中采集到集群外一个Prometheus的实践
      • AWS运维部署实践--EKS集群事件采集
    • Prometheus

    • Grafana

    • Loki

    • CentOS

    • Supervisord

    • Systemd

    • Docker

    • Docker-Compose

    • Rancher

    • Ansible

    • OpenLdap

    • GitLab

    • GitHub

    • Etcd

    • Consul

    • RabbitMQ

    • Kafka

    • Mysql

    • MongoDB

    • OpenVPN

    • Kvm

    • VMware

    • 配置文件详解

    • Other

    • 运维观止
    • AWS
    二丫讲梵
    2024-10-23
    目录

    AWS运维部署实践--给EKS集群安装Ingress-Controller

    文章发布较早,内容可能过时,阅读注意甄别。

    集群创建完毕之后,可以正常部署应用,但是要想被外部访问,还需要配置 ingress-controller。接下来介绍一下配置的流程。

    # 创建 OIDC

    注意指定 集群名字:

    $ oidc_id=$(aws eks describe-cluster --name aws3-sgp-eks-cluster --query "cluster.identity.oidc.issuer" --output text | cut -d '/' -f 5)
    $ echo $oidc_id
    $ aws iam list-open-id-connect-providers | grep $oidc_id | cut -d "/" -f4
    $ eksctl utils associate-iam-oidc-provider --cluster aws3-sgp-eks-cluster --approve
    
    1
    2
    3
    4

    创建成功之后,可以在 IAM 的角色提供商那里可以看到。

    img

    # OIDC 关联角色

    先创建策略:

    $ curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.8.1/docs/install/iam_policy.json
    
    
    $ aws iam create-policy \
       --policy-name AWSLoadBalancerControllerIAMPolicxh \
       --policy-document file://iam_policy.json
    
    # 执行之后会输出策略内容。
    
    1
    2
    3
    4
    5
    6
    7
    8

    然后使用 eksctl 创建角色

     # 注意arn使用上一部 oidc生成的
     eksctl create iamserviceaccount \
        --cluster=aws3-sgp-eks-cluster \
        --namespace=kube-system \
        --name=aws-load-balancer-controller \
        --role-name AmazonEKSLoadBalancerControllerRole \
        --attach-policy-arn=arn:aws:iam::0000007:policy/AWSLoadBalancerControllerIAMPolicxh \
      --approve
    
    1
    2
    3
    4
    5
    6
    7
    8

    📢 特别注意

    这里踩坑了,创建的时候,总是会提示:

    image-20240718145420060

    这里实际 kubectl get sa -n kube-system | grep load,以及查看都找不到这个信息,猜测是 eksctl 的 bug。

    那么可以将 --name=aws-load-balancer-controller 改为 --name=aws-load-balancer-controller-new,但需要注意下边安装 controller 时把名字指定为与这里一致。

    如果正常创建了,可以查看一下这个 sa:

    $ k get sa -n kube-system aws-load-balancer-controller-new -oyaml
    
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      annotations:
        eks.amazonaws.com/role-arn: arn:aws:iam::0000007:role/AmazonEKSLoadBalancerControllerRoleg
      creationTimestamp: "2024-07-17T09:59:06Z"
      labels:
        app.kubernetes.io/managed-by: eksctl
      name: aws-load-balancer-controller
      namespace: kube-system
      resourceVersion: "45191"
      uid: 0755f65b-7886-4e38-b022-4729b147e2bb
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

    其中的 arn 可以在控制台的 IAM 中查看到这个角色,以及角色里边关联的策略。

    # 添加 helm 源

    $ helm repo add eks https://aws.github.io/eks-charts
    $ helm repo update eks
    
    1
    2

    # 安装 ingress-controller

    $ helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
      -n kube-system \
      --set clusterName=aws3-sgp-eks-cluster \
      --set serviceAccount.create=false \
      --set serviceAccount.name=aws-load-balancer-controller
    
    1
    2
    3
    4
    5

    注意这里的角色与上边保持一致。默认情况下,安装的副本数为 2,如果你是生产环境,可酌情考虑增加。

    然后查看这个 deployment:

    $ k get deploy -n kube-system aws-load-balancer-controller
    NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
    aws-load-balancer-controller   2/2     2            2           20h
    
    1
    2
    3

    至此,一个基础的集群,以及基本的 ingress-controller 就部署好了。

    如果在部署之后,状态不正常,然后可以通过查看日志来分析:

    $ k logs -f -n kube-system  aws-load-balancer-controller-64bb9f5f57-r5tfh
    
    {"level":"info","ts":"2024-10-22T01:32:23Z","msg":"version","GitVersion":"v2.9.1","GitCommit":"e0f59c6c35f44b42f5eeae514059b356f9ba4ee7","BuildDate":"2024-10-11T23:16:28+0000"}
    {"level":"error","ts":"2024-10-22T01:32:28Z","logger":"setup","msg":"unable to initialize AWS cloud","error":"failed to get VPC ID: failed to fetch VPC ID from instance metadata: error in fetching vpc id through ec2 metadata: get mac metadata: operation error ec2imds: GetMetadata, canceled, context deadline exceeded"}
    
    1
    2
    3
    4

    如果遇到如上错误,则可通过在安装时指定区域以及 VPC 来解决。详见:issue (opens new window)

    $ helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
    -n kube-system \
    --set clusterName=aws3-sgp-eks-cluster \
    --set serviceAccount.create=false \
    --set serviceAccount.name=aws-load-balancer-controller
    --set region=ap-southeast-1   \
    --set vpcId=vpc-xxxxxxxxxxxxxx
    
    1
    2
    3
    4
    5
    6
    7

    安装成功之后,剩下的就是部署应用,以及配置 ingress 了。后边单独开篇来介绍。

    参考文档:

    • 使用 Helm 安装 AWS Load Balancer Controller (opens new window)
    • 从 Amazon Linux 2 升级到 Amazon Linux 2023 (opens new window)
    微信 支付宝
    上次更新: 2024/10/23, 08:28:59
    AWS运维部署实践--快速拉起生产可用的EKS集群
    AWS运维部署实践--配置跨账号通过kubectl管理EKS集群

    ← AWS运维部署实践--快速拉起生产可用的EKS集群 AWS运维部署实践--配置跨账号通过kubectl管理EKS集群→

    最近更新
    01
    记录二五年五一之短暂回归家庭
    05-09
    02
    学习周刊-总第210期-2025年第19周
    05-09
    03
    学习周刊-总第209期-2025年第18周
    05-03
    更多文章>
    Theme by Vdoing | Copyright © 2017-2025 | 点击查看十年之约 | 浙ICP备18057030号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式