二丫讲梵 二丫讲梵
首页
  • 最佳实践
  • 迎刃而解
  • 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配置验证实践
      • 前言
      • 公有 ingress
        • 准备工作
        • 部署服务
        • 添加域名
        • 先将证书导入到aws证书管理器
        • 控制台导入
        • 命令行导入
        • 演示2048自定义域名
        • 配置一个go服务
        • 配置多个证书
      • 私有 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-19
目录

AWS运维部署实践--内外网Ingress配置验证实践

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

# 前言

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,未经授权,严禁转载,侵权必究!此乃文中随机水印,敬请读者谅解。

Copyright 二丫讲梵 (opens new window) 版权所有

# 添加域名

上边的示例是启动一个示例服务,并且通过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:

k apply -f 2048.yaml
1

查看这个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怎么配置。

  • ingress注解官方文档 (opens new window)

在注解中的 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托管证书,这样能够保障自动续期,其他的就是正常使用即可。

微信 支付宝
上次更新: 2024/10/23, 08:28:59
AWS运维部署实践--配置跨账号通过kubectl管理EKS集群
AWS运维部署实践--EKS集群结合metrics-server配置HPA的功能

← AWS运维部署实践--配置跨账号通过kubectl管理EKS集群 AWS运维部署实践--EKS集群结合metrics-server配置HPA的功能→

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