阿里云K8S私有Ingress Controller的配置和使用

简介: 阿里云K8S私有Ingress Controller的配置和使用创建集群进入阿里云容器服务控制台,创建一个新的k8s集群,此时集群会自动生成一个公网的Ingress Controller和一个公网的SLB监听着Worker的80和443端口。

阿里云K8S私有Ingress Controller的配置和使用

创建集群

进入阿里云容器服务控制台,创建一个新的k8s集群,此时集群会自动生成一个公网的Ingress Controller和一个公网的SLB监听着Worker的80和443端口。

默认的公网Ingress Controller

默认的公网SLB(SLB名字是自己起的,为了方便看)

创建私有SLB

进入负载均衡控制台创建一个私有SLB,实例规格按实际业务需求。注意:专有网络必须和刚才创建的集群的一样!!!

配置私有Ingress Controller

由于Ingress Controller Pods中的serviceAccountName是引用集群默认创建的,所以在此就不再配置ServiceAccount、ClusterRole和ClusterRoleBinding。

  1. Nginx ConfigMap

        
        apiVersion: v1
        kind: ConfigMap
        metadata:

    name: private-nginx-configuration #名字可以自己改
    namespace: kube-system
    labels:
    app: ingress-nginx

        data:

    proxy-body-size: 20m
    proxy-connect-timeout: "10"
    max-worker-connections: "65536"
    enable-underscores-in-headers: "true"
    reuse-port: "true"
    worker-cpu-affinity: "auto"
    server-tokens: "false"
    ssl-redirect: "false"
    allow-backend-server-header: "true"
    ignore-invalid-headers: "true"
    generate-request-id: "true"
    #forwarded-for-header: "X-Real-IP"
    #compute-full-forwarded-for: "true"
    #hsts: "false"
    #enable-vts-status: "true"
    #use-proxy-protocol: "true"

        ---
        # nginx tcp stream config map
        kind: ConfigMap
        apiVersion: v1
        metadata:

    name: private-tcp-services
    namespace: kube-system

        ---
        # nginx udp stream config map
        kind: ConfigMap
        apiVersion: v1
        metadata:

    name: private-udp-services
    namespace: kube-system

  2. Nginx Ingress Controller Pods

        apiVersion: apps/v1
        kind: Deployment
        metadata:

    name: private-nginx-ingress-controller
    labels:
    app: private-ingress-nginx
    namespace: kube-system
    annotations:
    component.version: '0.22.0'
    component.revision: '5'

        spec:

    replicas: 2
    selector:
    matchLabels:

    app: private-ingress-nginx

    template:
    metadata:

    labels:
      app: private-ingress-nginx
    annotations:
      prometheus.io/port: "10254"
      prometheus.io/scrape: "true"

    spec:

    #tolerations:
    #  - key: node-role.kubernetes.io/master
    #    effect: NoSchedule
    affinity:
      podAntiAffinity:
        preferredDuringSchedulingIgnoredDuringExecution:
        - weight: 100
          podAffinityTerm:
            labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - ingress-nginx
            topologyKey: "kubernetes.io/hostname"
    #use default serviceAccountName
    serviceAccountName: nginx-ingress-controller
    initContainers:
    - name: init-sysctl
      image: registry-vpc.cn-hongkong.aliyuncs.com/acs/busybox:latest
      command:
      - /bin/sh
      - -c
      - |
        sysctl -w net.core.somaxconn=65535
        sysctl -w net.ipv4.ip_local_port_range="1024 65535"
        sysctl -w fs.file-max=1048576
        sysctl -w fs.inotify.max_user_instances=16384
        sysctl -w fs.inotify.max_user_watches=524288
        sysctl -w fs.inotify.max_queued_events=16384
      securityContext:
        privileged: true
    containers:
    - name: nginx-ingress-controller
      image: registry-vpc.cn-hongkong.aliyuncs.com/acs/aliyun-ingress-controller:v0.22.0.5-552e0db-aliyun
      args:
        - /nginx-ingress-controller
        - --configmap=$(POD_NAMESPACE)/private-nginx-configuration
        - --tcp-services-configmap=$(POD_NAMESPACE)/private-tcp-services
        - --udp-services-configmap=$(POD_NAMESPACE)/private-udp-services
        - --annotations-prefix=nginx.ingress.kubernetes.io
        - --publish-service=$(POD_NAMESPACE)/private-nginx-ingress-lb
        - --ingress-class=private #自定义名
        - --v=2
      env:
        - name: POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
      ports:
      - name: http
        containerPort: 80
      - name: https
        containerPort: 443
      livenessProbe:
        failureThreshold: 3
        httpGet:
          path: /healthz
          port: 10254
          scheme: HTTP
        initialDelaySeconds: 10
        periodSeconds: 10
        successThreshold: 1
        timeoutSeconds: 1
      readinessProbe:
        failureThreshold: 3
        httpGet:
          path: /healthz
          port: 10254
          scheme: HTTP
        periodSeconds: 10
        successThreshold: 1
        timeoutSeconds: 1
      securityContext:
        capabilities:
            drop:
            - ALL
            add:
            - NET_BIND_SERVICE
        runAsUser: 33
      volumeMounts:
      - name: localtime
        mountPath: /etc/localtime
        readOnly: true
    nodeSelector:
      beta.kubernetes.io/os: linux
    volumes:
      - name: localtime
        hostPath:
          path: /etc/localtime
          type: File
  3. Nginx Ingress Service

        apiVersion: v1
        kind: Service
        metadata:

    name: private-nginx-ingress-lb
    namespace: kube-system
    labels:
    app: private-nginx-ingress-lb
    annotations:
    # set loadbalancer to the specified slb id
    service.beta.kubernetes.io/alicloud-loadbalancer-id: lb-xxxx
    # set loadbalancer address type to intranet if using private slb instance
    service.beta.kubernetes.io/alicloud-loadbalancer-address-type: intranet
    service.beta.kubernetes.io/alicloud-loadbalancer-force-override-listeners: 'true'

        spec:

    type: LoadBalancer

    do not route traffic to other nodes

    and reserve client ip for upstream

    externalTrafficPolicy: "Local"
    ports:

    • port: 80
      name: http

    targetPort: 80

    • port: 443
      name: https

    targetPort: 443
    selector:
    # select app=private-ingress-nginx pods
    app: private-ingress-nginx

部署私有Ingress Controller

kubectl apply -f private-ingress-controller.yml
  1. Private Ingress Pod
  2. Private Ingress LB Service

更新Clusterrole:nginx-ingress-controller

由于在配置私有Ingress Controller Pod时是引用集群默认的ServiceAccount,新生成的ingress-controller-leader-private配置项没有更新到默认的ClusterRole所以导致Service启动时会报没权限,此时我们需要在默认的ClusterRole中的resourceNames下添加ingress-controller-leader-private


kubectl edit clusterrole nginx-ingress-controller -o yaml

使用阿里云DNS PrivateZone绑定SLB IP

  1. 进入云解析DNS控制台,开通PrivateZone并添加域名。
  2. 关联vpc
  3. 添加域名解析,绑定私有SLB IP

部署测试服务

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: '1'
  generation: 1
  labels:
    app: demo
  name: demo
  namespace: default
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: demo
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: demo
    spec:
      containers:
        - image: >-
            registry-vpc.cn-hongkong.aliyuncs.com/xxxx/demo:1.0.6-1
          imagePullPolicy: Always
          name: demo
          resources:
            limits:
              cpu: 2048m
              memory: 4Gi
            requests:
              cpu: 2048m
              memory: 4Gi
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          livenessProbe:
            httpGet:
              path: /v1/health
              port: 80
            initialDelaySeconds: 180
            periodSeconds: 10
          readinessProbe:
            httpGet:
              path: /v1/health
              port: 80
            initialDelaySeconds: 180
            periodSeconds: 10
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 300
      
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: private
    nginx.ingress.kubernetes.io/rewrite-target: /$2
  generation: 1
  name: private-demo-ingress
  namespace: default
spec:
  tls:
  - hosts:
    - k8s-test.internal.abc.com
    # 配置TLS证书
    secretName: abc.com
  rules:
  - host: k8s-test.internal.abc.com
    http:
      paths:
      - backend:
          serviceName: demo-svc
          servicePort: 80
        path: /abc(/|$)(.*)
        
---
apiVersion: v1
kind: Service
metadata:
  name: demo-svc
  namespace: default
spec:
  clusterIP: None
  ports:
    - port: 80
      protocol: TCP
      targetPort: 80
  selector:
    app: demo
  sessionAffinity: None
  type: ClusterIP
  

测试结果

在同一个VPC下的ECS访问集群服务结果如下

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
2月前
|
编解码 对象存储
阿里云视频转码转码模板-配置工作流
阿里云视频转码转码模板-配置工作流
14 0
|
2月前
|
弹性计算
2024年阿里云服务器不同实例规格与配置实时优惠价格整理与分享
2024年阿里云服务器的优惠价格新鲜出炉,有特惠云服务器也有普通优惠价格,本文为大家整理汇总了2024年阿里云服务器的优惠价格,包含特惠云服务器和其他配置云服务器的优惠价格。以便大家了解自己想购买的云服务器选择不同实例规格和带宽情况下的价格,仅供参考。
2024年阿里云服务器不同实例规格与配置实时优惠价格整理与分享
|
2月前
阿里云配置dcoker镜像仓库
阿里云配置dcoker镜像仓库
97 0
|
2天前
|
运维 监控 关系型数据库
Serverless 应用引擎产品使用之在阿里云函数计算(FC)中,要访问另一个账号的rds配置rds的白名单如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
13 0
|
4天前
|
缓存 Linux
Centos阿里云源配置
Centos阿里云源配置
17 0
|
6天前
|
网络协议 对象存储
阿里云oss配置自有域名
阿里云oss配置自有域名
15 1
|
8天前
|
弹性计算 安全 Java
阿里云服务器配置、(xshell)远程连接、搭建环境、设置安全组、域名备案、申请ssl证书
以下是内容的摘要: 在阿里云购买服务器并进行基本配置的步骤如下: 1. **准备工作**: - 注册阿里云账号:访问阿里云官网并注册新账号,输入用户名、手机号和验证码。 - 实名认证:在个人中心进行实名认证,建议选择企业实名,因为个人实名可能无法索取企业发票。
|
12天前
|
弹性计算 缓存 运维
2024阿里云服务器4核8G配置最新租用收费标准与活动价格参考
4核8G配置是大部分企业级用户购买阿里云服务器的首选配置,2024年经过调价之后,4核8G配置的阿里云服务器按量收费标准最低为0.45元/小时,按月租用平均优惠月价最低收费标准为216.0元/1个月,按年购买最低活动价格为1322.78元/1年,云服务器实例规格和配置不同,收费标准与活动价格也不同,下面是小编为大家整理汇总的阿里云服务器4核8G配置2024年最新收费标准与活动价格。
2024阿里云服务器4核8G配置最新租用收费标准与活动价格参考
|
13天前
|
弹性计算 缓存 运维
阿里云服务器2核4G配置最新收费标准与活动价格和购买流程参考
2024年阿里云服务器2核4G配置降价,按量计费最低0.225元/小时,月付68.0元起,年付165元起。价格下调20%,部分实例降价93%。详细价格表包括多种实例规格,如通用算力型、计算型等,活动价格从165元到244.62元不等。下面是小编为大家整理汇总的阿里云服务器2核4G配置2024年最新收费标准与活动价格。
阿里云服务器2核4G配置最新收费标准与活动价格和购买流程参考
|
15天前
|
存储 弹性计算 安全
阿里云服务器2核2G、2核4G配置最新租用收费标准及活动价格参考
2核2G、2核4G配置是很多个人和企业建站以及部署中小型的web应用等场景时首选的云服务器配置,这些配置的租用价格也是用户非常关心的问题,本文为大家整理汇总了2024年阿里云服务器2核2G、2核4G配置不同实例规格及地域之间的收费标准,同时整理了这些配置最新活动价格,以供大家参考和选择。
阿里云服务器2核2G、2核4G配置最新租用收费标准及活动价格参考

推荐镜像

更多