惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
量子位
M
MIT News - Artificial intelligence
Y
Y Combinator Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Google DeepMind News
Google DeepMind News
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
雷峰网
雷峰网
I
InfoQ
罗磊的独立博客
博客园 - 聂微东
酷 壳 – CoolShell
酷 壳 – CoolShell
大猫的无限游戏
大猫的无限游戏
D
Docker
H
Hackread – Cybersecurity News, Data Breaches, AI and More
腾讯CDC
博客园 - 三生石上(FineUI控件)
The GitHub Blog
The GitHub Blog
K
Kaspersky official blog
P
Privacy & Cybersecurity Law Blog
S
SegmentFault 最新的问题
T
Threat Research - Cisco Blogs
H
Help Net Security
小众软件
小众软件
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
C
CERT Recently Published Vulnerability Notes
WordPress大学
WordPress大学
T
Tenable Blog
T
The Blog of Author Tim Ferriss
C
Cisco Blogs
Simon Willison's Weblog
Simon Willison's Weblog
博客园 - Franky
A
Arctic Wolf
T
Threatpost
Scott Helme
Scott Helme
C
Cybersecurity and Infrastructure Security Agency CISA
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
The Exploit Database - CXSecurity.com
G
GRAHAM CLULEY
Security Latest
Security Latest
Spread Privacy
Spread Privacy
L
LINUX DO - 热门话题
V
Vulnerabilities – Threatpost
P
Privacy International News Feed
S
Schneier on Security
Latest news
Latest news
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Cyber Attacks, Cyber Crime and Cyber Security
C
CXSECURITY Database RSS Feed - CXSecurity.com

二丫讲梵

学习周刊-总第258期-2026年第15周 学习周刊-总第257期-2026年第14周 学习周刊-总第256期-2026年第13周 学习周刊-总第255期-2026年第12周 学习周刊-总第254期-2026年第11周 学习周刊-总第253期-2026年第10周 临时插播一条羊毛,免费领取450元大模型API代金券 学习周刊-总第252期-2026年第09周 学习周刊-总第251期-2026年第08周 学习周刊-总第250期-2026年第07周 学习周刊-总第249期-2026年第06周 诚邀评论,聊聊你所知欲知的我 学习周刊-总第248期-2026年第05周 我的QQ动态之2015年 我的QQ动态之2014年 我的QQ动态之2013年 我的QQ动态之2012年 我的QQ动态-2010-2011年 我的QQ动态-创栏小叙 学习周刊-总第247期-2026年第04周 Nexus社区版权益阉割--一文告诉你有哪些版本可以选择 学习周刊-总第246期-2026年第03周 学习周刊-总第245期-2026年第02周 学习周刊-总第244期-2026年第01周 学习周刊-总第243期-2025年第52周 学习周刊-总第242期-2025年第51周 开源项目ZenOps:带你领略禅意运维 学习周刊-总第241期-2025年第50周 用京东金融,享负债人生 学习周刊-总第240期-2025年第49周 学习周刊-总第239期-2025年第48周 整理我在静态服务透明代理上的极致求索之路,最后一个你绝想不到 学习周刊-总第238期-2025年第47周 我们输了,但收获颇多 太多了,太多了 学习周刊-总第237期-2025年第46周 学习周刊-总第236期-2025年第45周 学习周刊-总第235期-2025年第44周 二五年国庆二三事 学习周刊-总第234期-2025年第43周 学习周刊-总第233期-2025年第42周 学习周刊-总第232期-2025年第41周 学习周刊-总第231期-2025年第40周 学习周刊-总第230期-2025年第39周 西湖毅行 2025年开源世界逸闻三则 学习周刊-总第229期-2025年第38周 手抄《与妻书》 CNB开发与构建基于docker-cache缓存复用的配置实践心得 学习周刊-总第228期-2025年第37周 父亲善行录 学习周刊-总第227期-2025年第36周 带你认识我之看看我的高中同学录(其二) 学习周刊-总第226期-2025年第35周 带你认识我之看看我的高中同学录(其一) 认识神级MCP工具系列--用anyquery和数据库交互 学习周刊-总第225期-2025年第34周 学习周刊-总第224期-2025年第33周 学习周刊-总第223期-2025年第32周 学习周刊-总第222期-2025年第31周 学习周刊-总第221期-2025年第30周 CNB云原生开发环境届的瑞士军刀,详解qifei项目 vuepress-vdoing主题配置自建不蒜子统计 学习周刊-总第220期-2025年第29周 写在博客发表文章1000篇的节点 从claude cli的体验聊聊最大的敌人是我们自己的成见 学习周刊-总第219期-2025年第28周 学习周刊-总第218期-2025年第27周 学习周刊-总第217期-2025年第26周 理论正确,事实错误 学习周刊-总第216期-2025年第25周 学习周刊-总第215期-2025年第24周 学习周刊-总第214期-2025年第23周 学习周刊-总第213期-2025年第22周 学习周刊-总第212期-2025年第21周 从赵心童世锦赛夺冠聊聊我的斯诺克情缘 学习周刊-总第211期-2025年第20周 记录二五年五一之短暂回归家庭 学习周刊-总第210期-2025年第19周 学习周刊-总第209期-2025年第18周 学习周刊-总第208期-2025年第17周 Go开发实践之Gin框架将前端的dist目录embed到二进制 学习周刊-总第207期-2025年第16周 近期关于cobra库的一些实践心得总结 学习周刊-总第206期-2025年第15周 我的嗜好--嗑瓜子 记大宝参加幼儿园组织的清明烈士陵园扫墓活动 学习周刊-总第205期-2025年第14周 学习周刊-总第204期-2025年第13周 前端开发小笔记--在数组中给字段添加值与删除字段的操作 学习周刊-总第203期-2025年第12周 人生实苦,何以自渡 学习周刊-总第202期-2025年第11周 近期发现的一些优秀的工具提名(一) 学习周刊-总第201期-2025年第10周 学习周刊-总第200期-2025年第09周 记一次女友喝醉使我忍术破功 爱情风波--一次分手又复合的经历 学习周刊-总第199期-2025年第08周 整理我的信息源
AWS运维部署实践--内外网Ingress配置验证实践
二丫讲梵 · 2024-10-19 · via 二丫讲梵

# 前言

EKS集群拉起之后,事情并没有结束,因为想要集群内的服务被外部访问,势必需要Ingress的配置,上文中已经讲了ingress-controller的安装,那么本文将通过一些实际例子,来介绍内外网ingress的配置用法。

# 公有 ingress

# 准备工作

首先需要对公有子网进行打标,关于打标,可见此文档:子网自动发现 (opens new window)

当然前边部署的时候已经介绍过此事项,如果已经配置过,则可略过。

# 如果是公有子网,则打标:
kubernetes.io/role/elb=1

# 如果是私有子网,则打标:
kubernetes.io/role/internal-elb=1

1
2
3
4
5

# 部署服务

  1. 准备yaml。

    原文件地址为:点我查看 (opens new window),我这里稍微调整内容如下,2048_full.yaml

    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: ops
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      namespace: ops
      name: deployment-2048
    spec:
      selector:
        matchLabels:
          app.kubernetes.io/name: app-2048
      replicas: 2
      template:
        metadata:
          labels:
            app.kubernetes.io/name: app-2048
        spec:
          containers:
          - image: public.ecr.aws/l6m2t8p7/docker-2048:latest
            imagePullPolicy: Always
            name: app-2048
            ports:
            - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      namespace: ops
      name: service-2048
    spec:
      ports:
        - port: 80
          targetPort: 80
          protocol: TCP
      type: NodePort
      selector:
        app.kubernetes.io/name: app-2048
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      namespace: ops
      name: ingress-2048
      annotations:
        alb.ingress.kubernetes.io/scheme: internet-facing
        alb.ingress.kubernetes.io/target-type: ip
    spec:
      ingressClassName: alb
      rules:
        - http:
            paths:
            - path: /
              pathType: Prefix
              backend:
                service:
                  name: service-2048
                  port:
                    number: 80
    

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62

  2. 部署服务

    $ kubectl apply -f 2048_full.yaml
    

    1

  3. 查看服务,正常拉起之后,可以看到 ingress 的监听:

    $ k get ingress -n ops
    NAME           CLASS   HOSTS   ADDRESS                                                                  PORTS   AGE
    ingress-2048   alb     *       k8s-ops-ingress2-3d319b8e28-734433292.ap-southeast-1.elb.amazonaws.com   80      2m24s
    

    1
    2
    3

有了监听之后,可直接访问返回的地址,此地址如果访问不通,可能是拉起的 lb 关联的安全组需要加下规则。

此时访问 k8s-ops-ingress2-3d319b8e28-734433292.ap-southeast-1.elb.amazonaws.com (opens new window) 就可以看到对应的 2048 的页面。

申明

原创文章eryajf,未经授权,严禁转载,侵权必究!此乃文中随机水印,敬请读者谅解。

# 添加域名

上边的示例是启动一个示例服务,并且通过aws提供的一个访问入口进行请求,实际生产业务中,我们会把自定义域名指向自己集群内的服务,现在来介绍一下配置方式。

废话不多说,这里直接进入正题。

# 先将证书导入到aws证书管理器

这里以eryajf.net域名举例。

AWS支持完善的域名托管能力,支持自动续期,当然也支持你将已经申请好的证书导入进来,这里我演示一下导入证书的用法。

先下载好域名证书,在AWS中,可以通过控制台,或者命令行两种形式把证书导入。

# 控制台导入

来到Certificate Manager,然后点击导入证书,需要注意,通常我们下载的证书是NGINX格式的,那么证书的正文只需要导入pem文件的第一段,而非完整内容,否则会在导入的时候,提示无法导入:

image-20240706135432097

导入成功之后,会自动识别,然后可以拿到证书的arn。

image-20240706140219038

# 命令行导入

第二种方式,可通过命令行导入:

$ aws acm import-certificate --certificate fileb://eryajf.net_bundle.crt --private-key  fileb://eryajf.net.key

1

需要注意:此处的crt文件仍然也是只能保留第一段内容。命令执行完毕之后,会返回该证书的arn信息。

# 演示2048自定义域名

此处先演示上边2048游戏的自定义域名。

配置如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  namespace: ops
  name: ingress
  annotations:
    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:ap-southeast-1:AWS_ACCOUNT_ID:certificate/SSL_CERT_ID # https证书,就是上面创建的证书的arn
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]' # 监听端口
    alb.ingress.kubernetes.io/scheme: internet-facing # 开放外网访问
    alb.ingress.kubernetes.io/target-type: ip
spec:
  ingressClassName: alb # 指定ingressclass类型,k8s-1.18及以后的版本推荐这种配置方式,旧版本需要在注释中加入 kubernetes.io/ingress.class: alb
  rules:
    - host: 2048.eryajf.net
      http:
        paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: service-2048
              port:
                number: 80

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

然后创建这个ingress:

查看这个ingress:

$ k get ingress -n ops


NAME           CLASS   HOSTS                                 ADDRESS                                                                  PORTS   AGE
ingress        alb     2048.eryajf.net   k8s-ops-ingress-c5612bc56a-346058994.ap-southeast-1.elb.amazonaws.com    80      3h53m

1
2
3
4
5

然后给域名添加解析,此时访问 2048.eryajf.net 就可以访问到这个服务了。

# 配置一个go服务

whoami (opens new window)是一个验证服务访问的工具,我们通过如下方式将其部署起来:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  namespace: ops
  name: ingress
  annotations:
    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:ap-southeast-1:AWS_ACCOUNT_ID:certificate/SSL_CERT_ID # https证书,就是上面创建的证书的arn
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]' # 监听端口
    alb.ingress.kubernetes.io/scheme: internet-facing # 开放外网访问
    alb.ingress.kubernetes.io/target-type: ip
spec:
  ingressClassName: alb # 指定ingressclass类型,k8s-1.18及以后的版本推荐这种配置方式,旧版本需要在注释中加入 kubernetes.io/ingress.class: alb
  rules:
    - host: 2048.eryajf.net
      http:
        paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: service-2048
              port:
                number: 80
    - host: gotest.eryajf.net
      http:
        paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: go-whoami-service
              port:
                number: 80

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

然后执行apply,之后增加对应域名解析。

$ curl https://gotest.eryajf.net
Hostname: go-whoami-87f8586ff-g7w7v
IP: 127.0.0.1
IP: ::1
IP: 10.172.3.122
IP: fe80::2c3d:22ff:fe45:aecb
RemoteAddr: 10.172.103.161:22154
GET / HTTP/1.1
Host: gotest.eryajf.net
User-Agent: curl/7.79.1
Accept: */*
X-Amzn-Trace-Id: Root=1-6688faf8-6cf2c60c4b2dd36b25007ea0
X-Forwarded-For: 183.129.165.114
X-Forwarded-Port: 443
X-Forwarded-Proto: https

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 配置多个证书

用逗号可以分割多个证书的arn,yaml示例如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  namespace: ops
  name: ingress
  annotations:
    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:ap-southeast-1:AWS_ACCOUNT_ID:certificate/SSL_CERT_ID_1,arn:aws:acm:ap-southeast-1:AWS_ACCOUNT_ID:certificate/SSL_CERT_ID_2 # https证书,就是上面创建的证书的arn
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]' # 监听端口
    alb.ingress.kubernetes.io/scheme: internet-facing # 开放外网访问
    alb.ingress.kubernetes.io/target-type: ip
spec:
  ingressClassName: alb # 指定ingressclass类型,k8s-1.18及以后的版本推荐这种配置方式,旧版本需要在注释中加入 kubernetes.io/ingress.class: alb
  rules:
    - host: gotest.eryajf.net
      http:
        paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: go-whoami-service
              port:
                number: 80
    - host: gotest.erzong.net
      http:
        paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: go-whoami-service
              port:
                number: 80

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

将域名证书的arn通过逗号进行分割,然后下边配置规则中直接配置即可,alb会自动匹配对应后缀的域名证书。

# 私有 ingress

上边介绍的例子都是公有ingress,接下来介绍一下私有的ingress怎么配置。

在注解中的 alb.ingress.kubernetes.io/scheme 用于标识lb的类型为公网或内网。

所以只需要简单调整为下:

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  namespace: ops
  name: ingress-internal
  annotations:
    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:ap-southeast-1:AWS_ACCOUNT_ID:certificate/SSL_CERT_ID_1,arn:aws:acm:ap-southeast-1:AWS_ACCOUNT_ID:certificate/SSL_CERT_ID_2 # https证书,就是上面创建的证书的arn
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]' # 监听端口
    alb.ingress.kubernetes.io/scheme: internal # 开放内网访问
    alb.ingress.kubernetes.io/target-type: ip
spec:
  ingressClassName: alb # 指定ingressclass类型,k8s-1.18及以后的版本推荐这种配置方式,旧版本需要在注释中加入 kubernetes.io/ingress.class: alb
  rules:
    - host: gotest2.eryajf.net
      http:
        paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: go-whoami-service
              port:
                number: 80
    - host: gotest2.erzong.net
      http:
        paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: go-whoami-service
              port:
                number: 80

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

然后再进行加载,此时可以看到负载均衡控制台创建了一台私有lb,添加域名解析之后,就只能在局域网内部访问了。

# 最后

你可以根据自己实际业务需求进行配置,证书建议尽量使用aws托管证书,这样能够保障自动续期,其他的就是正常使用即可。