疑问:
1.对外公网解析 绑定eip
2.对内访问容器 ecs(dubbo服务暴漏):nodeport 要求互通
处理:绑定对内的slb,ecs访问失败 (svc ingress如何配置)
且单个应用只可对应一个slb
新增对内访问slb 会自动新增slb??

场景:部分应用在ecs,部分应用在阿里云ack托管版部署,如何把容器里面对内的http服务暴漏出来,并且在同一个vpc下访问。
解决:
通过部署两套独立的Nginx Ingress Controller服务,其前端绑定不同网络类型的SLB实例来满足这类需求场景

备注:通过阿里云容器服务申请一个Kubernetes版集群,集群初始化时会自动部署一套Nginx Ingress Controller,默认其挂载在公网SLB实例上。

ACK集群中再部署一套完全独立的Nginx Ingress Controller服务。
1,登录容器服务管理控制台。
2,在控制台左侧导航栏中,选择市场 > 应用目录。
3,在阿里云应用页签,选中并单击ack-ingress-nginx。
4,在应用目录-ack-ingress-nginx页面,单击参数并在右侧创建面板中设置目标集群、命名空间及发布名称,然后单击创建。
如何配置容器服务Kubernetes版Nginx Ingress Controller的私网SLB_第1张图片

如何配置容器服务Kubernetes版Nginx Ingress Controller的私网SLB_第2张图片

如何配置容器服务Kubernetes版Nginx Ingress Controller的私网SLB_第3张图片

关键参数注释:
ingressClass 设置该Ingress Controller可监听的目标Ingress Class标识。
注意 同一个集群中不同套Ingress Controller监听的Ingress Class标识必须唯一,且不能设置为nginx关键字(nginx是集群默认Ingress Controller的监听标识)。
replicaCount 设置该Ingress Controller Pod副本数。
publicService.enabled 是否开启公网SLB访问,不需要开启则设置为false。
privateService.enabled 是否开启私网SLB访问,需要开启则设置为true。
externalTrafficPolicy: "Local/Cluster" 单节点访问或者集群访问

5,在控制台左侧导航栏,选择应用 > 发布,在Helm页签可以看到一套新的Nginx Ingress Controller服务已经成功部署
6,nginx ingress controller是deployment类型,ingress还需要指定service(在上面创建选择打开的private时完成部署的时候就会自动创建svc及私网的slb)

测试:
一,ingressprivate.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: bdlocal
annotations:
#注意:这里要设置为您前面配置的controller.ingressClass唯一标识
kubernetes.io/ingress.class: siwang
spec:
rules:
host: bdlocal.test.com
http:
paths:

  • path: /
    backend:
    serviceName: crfcredit-svc(对应应用的service)
    servicePort: 8080
    二,容器控制台页面配置:
    路由与负载均衡
    服务:service
    路由:ingress-----》
    如何配置容器服务Kubernetes版Nginx Ingress Controller的私网SLB_第4张图片
    两种方式创建ingress,都可以实现想要的结果。唯一要区别的是注解标识符
    假设我们需要公网的,就可以定义一个kubernetes.io/ingress.class: gongwang的标识符

注意:一个 ingress-controller 应该对应一个ingress-svc(公网 私网要区分开来)

打印结果:
kubectl get ing
NAME HOSTS ADDRESS PORTS AGE
nginx bdlocal.test.com 10.196.10.132 80 46h

私网场景中写入hosts:
10.196.10.132 bdlocal.test.com