上云无忧 > 文档中心 > 百度智能云容器引擎服务 CCE 通过YAML创建CCE_Ingress
容器引擎服务CCE
百度智能云容器引擎服务 CCE 通过YAML创建CCE_Ingress

文档简介:
本文档介绍如何通过YAML创建和管理CCE Ingress。 创建Ingress Controller资源: 使用以下yaml内容创建Ingress Controller: kubectl create -f ingress-controller.yaml ingress-controller.yaml 如下所示: apiVersion: rbac.authorization.k8s.io/v1
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

本文档介绍如何通过YAML创建和管理CCE Ingress。

创建Ingress Controller资源

使用以下yaml内容创建Ingress Controller:

kubectl create -f ingress-controller.yaml

ingress-controller.yaml 如下所示:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  namespace: kube-system
  name: cce-ingress-clusterrole
rules:
- apiGroups: [""]
  resources:
  - nodes
  - services
  verbs: ["get", "list", "watch"]
- apiGroups: ["extensions"]
  resources:
  - ingresses
  verbs: ["get", "list", "watch", "update", "patch"]
- apiGroups: [""]
  resources:
  - events
  verbs: ["create", "update", "patch"]
- apiGroups:
    - "extensions"
  resources:
    - ingresses/status
  verbs:
    - update
---
apiVersion: v1
kind: ServiceAccount
metadata:
  namespace: kube-system
  name: cce-ingress-serviceaccount
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  namespace: kube-system
  name: cce-ingress-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cce-ingress-clusterrole
subjects:
- kind: ServiceAccount
  namespace: kube-system
  name: cce-ingress-serviceaccount
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cce-ingress-controller
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app: cce-ingress-controller
  template:
    metadata:
      labels:
        app: cce-ingress-controller
    spec:
      hostNetwork: true
      serviceAccountName: cce-ingress-serviceaccount
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      containers:
      - name: ingress-controller
        image: hub.baidubce.com/cce/cce-ingress-controller:latest
        imagePullPolicy: Always
        volumeMounts:
          - name: etc-volume
            mountPath: /etc/kubernetes/
            readOnly: true
        resources:
          limits:
            cpu: 0.5
            memory: 500Mi
      volumes:
      - name: etc-volume
        hostPath:
          path: /etc/kubernetes/

创建示例 Deployment 和 Service

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ingress-nginx-deployment
  labels:
    app: ingress-nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: ingress-nginx
  template:
    metadata:
      labels:
        app: ingress-nginx
    spec:
      containers:
      - name: nginx
        image: hub.baidubce.com/cce/nginx-ingress
        ports:
        - containerPort: 80
---
kind: Service
apiVersion: v1
metadata:
  name: hello-service
spec:
  selector:
    app: ingress-nginx
  type: NodePort
  ports:
  - protocol: TCP
    port: 8000
    targetPort: 80
---
kind: Service
apiVersion: v1
metadata:
  name: world-service
spec:
  selector:
    app: ingress-nginx
  type: NodePort
  ports:
  - protocol: TCP
    port: 9000
    targetPort: 80

创建Ingress对象

使用以下yaml内容创建名为 helloworld 的 Ingress 对象,并配置Ingress转发规则:

  • www.cce-ingress.com/hello/ -> hello-service:8000/hello/
  • www.cce-ingress.com/world/ -> world-service:9000/world/

可通过Ingress annotations中的参数对Ingress进行配置,例如指定BLB或EIP。

Service 对应后端服务必须支持转发策略的 URI,如果要支持所有情况,建议设置为 /*,这里对URI的路径要求很严格注意"/"。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    cce.ingress.blb-backup-content: ""
    kubernetes.io/cce.ingress.blb-cert-id: ""
    kubernetes.io/cce.ingress.blb-id: ""
    kubernetes.io/cce.ingress.eip: ""
    kubernetes.io/cce.ingress.http-redirect: "false"
    kubernetes.io/cce.ingress.https: "false"
    kubernetes.io/cce.ingress.internal: "false"
    kubernetes.io/cce.ingress.timeout-in-seconds: "30"
    kubernetes.io/cce.ingress.vpc-subnet-id: ""
    kubernetes.io/ingress.class: cce
  name: helloworld
  namespace: default
spec:
  rules:
  - host: www.cce-ingress.com
    http:
      paths:
      - backend:
          serviceName: hello-service
          servicePort: 8000
        path: /hello/
      - backend:
          serviceName: world-service
          servicePort: 9000
        path: /world/

访问测试

修改本地 /etc/hosts,将 www.cce-ingress.com 指向 EIP(例如: 106.12.52.80),可在控制台或者集群内查看ingress信息:

# kubectl get ingress
NAME         HOSTS                 ADDRESS                    PORTS   AGE
helloworld   www.cce-ingress.com   10.0.3.251,106.12.52.80   80      6m34s

访问测试:

Ingress Annotation 说明

参数名 类型 说明 示例
kubernetes.io/ingress.class string 指定为 cce-ingress-controller 托管 "cce"
kubernetes.io/cce.ingress.keep-iaas-resource string 释放时是否保留 BLB/EIP "true" 或 "false", 默认 false
kubernetes.io/cce.ingress.blb-name string 指定 Ingress 对应 BLB Name 为避免 CCE 默认 Name 超长,支持指定 BLB Name
kubernetes.io/cce.ingress.enable-ipv6 string 在IPv6 集群中使用,会为 Ingress 分配 IPv6 地址 "true" 或 "false",默认为 "false"
kubernetes.io/cce.ingress.blb-id string Ingress 绑定 BLB,修改或删除可能会导致 BLB 泄漏 "lb-asdfDsXS"
kubernetes.io/cce.ingress.internal string 是否只内网访问,默认 "false" "true" 或 "false"
kubernetes.io/cce.ingress.eip string Ingress 绑定 EIP,修改或删除可能会导致 EIP 泄漏 "100.0.0.1"
kubernetes.io/cce.ingress.eip-bandwidth-in-mbps string EIP 带宽,按流量计费 1~1000 mbps "500"
kubernetes.io/cce.ingress.timeout-in-seconds string 访问超时时间 1~3600 "1500"
kubernetes.io/cce.ingress.https string 是否支持 HTTPS "true" 或 "false"
kubernetes.io/cce.ingress.http-redirect string HTTP 是否支持 HTTPS 重定向,开启 HTTPS 才生效 "true" 或 "false"
kubernetes.io/cce.ingress.blb-cert-id string HTTPS 证书 ID "xs-asdfDESz"
kubernetes.io/cce.ingress.max-backend-count string BLB 挂载默认 RS 数,默认不做限制 "50"
kubernetes.io/cce.ingress.vpc-subnet-id string 指定 BLB VPC 子网,默认不使用 "sb-adfEsDzs"

CCE Ingress 为满足单个域名同时支持 HTTP 及 HTTPS 转发,新增如下两条 Annotation:

kubernetes.io/cce.ingress.http-rules:

[
    {
        "host":"baidu-cce-ingress.com",
        "http":{
            "paths":[
                {
                    "path":"/apple/",
                    "backend":{
                        "serviceName":"service-example",
                        "servicePort":80
                    }
                },
                {
                    "path":"/banana/",
                    "backend":{
                        "serviceName":"service-example",
                        "servicePort":80
                    }
                }
            ]
        }
    }
]

kubernetes.io/cce.ingress.https-rules

[
    {
        "host":"baidu-cce-ingress.com",
        "http":{
            "paths":[
                {
                    "path":"/orange/",
                    "backend":{
                        "serviceName":"service-example",
                        "servicePort":80
                    }
                }
            ]
        }
    }
]

规则逻辑如下:

for rule in rules:
    if rule in annotation_https_rules:
        setHTTPS(rule)
     
    if rule in annotation_http_rule:
        setHTTP(rule)
 
    if rule not in annotation_https_rules && rule not in annotation_http_rule:
        setHTTP(rule)
相似文档
  • 本文介绍如何利用百度云容器服务的Ingress功能,实现蓝绿发布。 背景信息: 灰度及蓝绿发布是为新版本创建一个与老版本完全一致的生产环境,在不影响老版本的前提下,按照一定的规则把部分流量切换到新版本,当新版本试运行一段时间没有问题后,将用户的全量流量从老版本迁移至新版本。
  • 本文介绍使用 Nginx Ingress 作为 Ingress 的实现方式。 Kubernetes Ingress 除了 CCE Ingress 实现之外,也可以使用 Kubernetes 社区的 Nginx Ingress实现。 Nginx 支持反向代理与负载均衡器等功能。 Nginx Ingress Controller 是 Ingress 控制器,使用 Nginx 实现反向代理功能,并通过解析集群中的 Ingress 来配置转发规则。
  • 对于 cce-ingress-nginx-controller 组件有 2 处位置可以对组件参数或 Ingress 资源进行配置。 我们可以在组件的 ConfigMap 配置组件的全局运行参数,或是在 Ingress Annotation 中对某个 Ingress 或是 Host、Rule 的配置进行修改。
  • NetworkPolicy 是 K8S 提供的一种资源,用于定义基于 Pod 的网络隔离策略。它描述了一组 Pod 能否与其它组 Pod 及其它 Endpoints 进行通信。本文主要演示如何使用开源工具 felix 或 kube-router 在 CCE 上实现 NetworkPolicy 功能。 用户可以根据集群的容器网络模式,选择对应的组件进行部署。
  • VPC-CNI 模式是百度云容器引擎 CCE 支持的扩展网络模式,基于百度云的弹性网卡产品,能够为集群内的 Pod 分配 VPC 内的 IP 地址。 由百度云 VPC 功能负责路由,打通容器网络的连通性,可实现 Pod 和 Node 的控制面和数据面完全在同一网络层面,该模式下的 Pod 能够复用百度云 VPC 所有产品特性。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部