阿里云自建k8s对接SLB

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
简介: 参考链接:https://github.com/kubernetes/cloud-provider-alibaba-cloud/blob/master/docs/getting-started.md


https://github.com/kubernetes/cloud-provider-alibaba-cloud/blob/master/docs/getting-started.md

1.创建ccm用到的cm

mkdir slb
cd slb
AccessKeyID=
AcceessKeySecret=
AccessKeyID-base64=`echo -n "$AccessKeyID" |base64`
AcceessKeySecret-base64=`echo -n "$AcceessKeySecret"|base64`
vim cloud-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:  name: cloud-config
  namespace: kube-system
data:  cloud-config.conf: |-
{        "Global": {            "accessKeyID": "$AccessKeyID",            "accessKeySecret": "$AcceessKeySecret-base64"}}kubectl apply -f cloud-config.yaml

2.获取ccm用到的元数据

curl100.100.100.200/latest/meta-data/hostname
curl100.100.100.200/latest/meta-data/instance-id
vim /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
Environment="KUBELET_CLOUD_PROVIDER_ARGS=--cloud-provider=external --hostname-override=iZj6c3ydyj9t4ztmha08rbZ --provider-id=cn-hongkong.i-j6c3ydyj9t4ztmha08rb"Environment="--system-reserved=memory=300Mi --kube-reserved=memory=400Mi --eviction-hard=imagefs.available<15%,memory.available<300Mi,nodefs.available<10%,nodefs.inodesFree<5% --cgroup-driver=systemd"$KUBELET_CLOUD_PROVIDER_ARGS$KUBELET_CGROUP_ARGSsystemctl daemon-reload
systemctl restart kubelet

3.修改kube-apiserver

vim /etc/kubernetes/manifests/kube-apiserver.yaml
---cloud-provider=external

4.获取证书

cat /etc/kubernetes/pki/ca.crt|base64 -w 0
vim /etc/kubernetes/cloud-controller-manager.conf
kind: Config
contexts:- context:    cluster: kubernetes
    user: system:cloud-controller-manager
  name: system:cloud-controller-manager@kubernetes
current-context: system:cloud-controller-manager@kubernetes
users:- name: system:cloud-controller-manager
  user:    tokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
apiVersion: v1
clusters:- cluster:    certificate-authority-data: $ca.crt
    server: https://172.16.1.193:6443  name: kubernetes

5.创建ds

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:  name: system:cloud-controller-manager
rules:  - apiGroups:      - ""    resources:      - events
    verbs:      - create
      - patch
      - update
  - apiGroups:      - ""    resources:      - nodes
    verbs:      - get
      - list
      - watch
      - delete
      - patch
      - update
  - apiGroups:      - ""    resources:      - nodes/status
    verbs:      - patch
      - update
  - apiGroups:      - ""    resources:      - services
    verbs:      - get
      - list
      - watch
      - update
      - patch
  - apiGroups:      - ""    resources:      - services/status
    verbs:      - update
      - patch
  - apiGroups:    - ""    resources:    - serviceaccounts
    verbs:    - create
  - apiGroups:      - ""    resources:      - endpoints
    verbs:      - get
      - list
      - watch
      - create
      - patch
      - update
  - apiGroups:      - coordination.k8s.io
    resources:      - leases
    verbs:      - get
      - list
      - update
      - create
  - apiGroups:      - apiextensions.k8s.io
    resources:      - customresourcedefinitions
    verbs:      - get
      - update
      - create
      - delete
---apiVersion: v1
kind: ServiceAccount
metadata:  name: cloud-controller-manager
  namespace: kube-system
---kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:  name: system:cloud-controller-manager
roleRef:  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:cloud-controller-manager
subjects:- kind: ServiceAccount
  name: cloud-controller-manager
  namespace: kube-system
---apiVersion: apps/v1
kind: DaemonSet
metadata:  labels:    app: cloud-controller-manager
    tier: control-plane
  name: cloud-controller-manager
  namespace: kube-system
spec:  selector:    matchLabels:      app: cloud-controller-manager
      tier: control-plane
  updateStrategy:    rollingUpdate:      maxUnavailable: 1    type: RollingUpdate
  template:    metadata:      labels:        app: cloud-controller-manager
        tier: control-plane
      annotations:        scheduler.alpha.kubernetes.io/critical-pod: ""    spec:      serviceAccountName: cloud-controller-manager
      tolerations:      - operator: Exists
      nodeSelector:        node-role.kubernetes.io/master: ""      containers:      - name: cloud-controller-manager
        securityContext:          readOnlyRootFilesystem: true          allowPrivilegeEscalation: false          runAsNonRoot: true          runAsUser: 1200         command:        -  /cloud-controller-manager
        - --kubeconfig=/etc/kubernetes/cloud-controller-manager.conf
        - --cloud-config=/etc/kubernetes/config/cloud-config.conf
        - --metrics-bind-addr=0
#For terway configuration        - --configure-cloud-routes=false
        image: registry-vpc.cn-shanghai.aliyuncs.com/acs/cloud-controller-manager-amd64:v2.0.1
        livenessProbe:          failureThreshold: 8          httpGet:            host: 127.0.0.1            path: /healthz
            port: 10258            scheme: HTTP
          initialDelaySeconds: 15          timeoutSeconds: 15        resources:          requests:            cpu: 100m
            memory: 200Mi
          limits:            cpu: 1000m
            memory: 1Gi
        volumeMounts:        - mountPath: /etc/kubernetes/cloud-controller-manager.conf
          name: k8s
          readOnly: true        - name: cloud-config
          mountPath: /etc/kubernetes/config
      hostNetwork: true      volumes:      - hostPath:          path: /etc/kubernetes/cloud-controller-manager.conf
          type: File
        name: k8s
      - name: cloud-config
        configMap:          name: cloud-config
          items:          - key: cloud-config.conf
            path: cloud-config.conf

6.验证

由于是单节点集群测试,故使用local模式的流量策略

[root@izj6c3ydyj9t4ztmha08rbz slb]# kubectl get svc nginx -o yaml
apiVersion: v1
kind: Service
metadata:  creationTimestamp: "2021-11-18T22:36:48Z"  finalizers:  - service.k8s.alibaba/resources
  labels:    app: nginx
    service.beta.kubernetes.io/hash: 73b160d328a26d99ed855f80117a95610f38768c282bc4bc5606bdc3
  name: nginx
  namespace: default
  resourceVersion: "12502"  uid: 9c897582-0484-41b8-b983-32626599b4c1
spec:  allocateLoadBalancerNodePorts: true  clusterIP: 10.98.194.116  clusterIPs:  - 10.98.194.116
  externalTrafficPolicy: Local
  healthCheckNodePort: 30738  internalTrafficPolicy: Cluster
  ipFamilies:  - IPv4
  ipFamilyPolicy: SingleStack
  ports:  - nodePort: 32093    port: 80    protocol: TCP
    targetPort: 80  selector:    app: nginx
  sessionAffinity: None
  type: LoadBalancer
status:  loadBalancer:    ingress:    - ip: 47.242.151.91

7.访问测试

7.1 node节点访问

7.2 pod访问

7.3 查看日志

8.ram权限

ps: 如果是ram用户需要授权如下策略

{
"Version": "1",
"Statement": [
    {
"Action": [
"ecs:Describe*",
"ecs:AttachDisk",
"ecs:CreateDisk",
"ecs:CreateSnapshot",
"ecs:CreateRouteEntry",
"ecs:DeleteDisk",
"ecs:DeleteSnapshot",
"ecs:DeleteRouteEntry",
"ecs:DetachDisk",
"ecs:ModifyAutoSnapshotPolicyEx",
"ecs:ModifyDiskAttribute",
"ecs:CreateNetworkInterface",
"ecs:DescribeNetworkInterfaces",
"ecs:AttachNetworkInterface",
"ecs:DetachNetworkInterface",
"ecs:DeleteNetworkInterface",
"ecs:DescribeInstanceAttribute"      ],
"Resource": [
"*"      ],
"Effect": "Allow"    },
    {
"Action": [
"cr:Get*",
"cr:List*",
"cr:PullRepository"      ],
"Resource": [
"*"      ],
"Effect": "Allow"    },
    {
"Action": [
"slb:*"      ],
"Resource": [
"*"      ],
"Effect": "Allow"    },
    {
"Action": [
"cms:*"      ],
"Resource": [
"*"      ],
"Effect": "Allow"    },
    {
"Action": [
"vpc:*"      ],
"Resource": [
"*"      ],
"Effect": "Allow"    },
    {
"Action": [
"log:*"      ],
"Resource": [
"*"      ],
"Effect": "Allow"    },
    {
"Action": [
"nas:*"      ],
"Resource": [
"*"      ],
"Effect": "Allow"    }
  ]
}
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
5月前
|
弹性计算 负载均衡 网络协议
阿里云SLB深度解析:从流量分发到架构优化的技术实践
本文深入探讨了阿里云负载均衡服务(SLB)的核心技术与应用场景,从流量分配到架构创新全面解析其价值。SLB不仅是简单的流量分发工具,更是支撑高并发、保障系统稳定性的智能中枢。文章涵盖四层与七层负载均衡原理、弹性伸缩引擎、智能DNS解析等核心技术,并结合电商大促、微服务灰度发布等实战场景提供实施指南。同时,针对性能调优与安全防护,分享连接复用优化、DDoS防御及零信任架构集成的实践经验,助力企业构建面向未来的弹性架构。
420 76
|
7月前
|
Cloud Native Serverless 数据中心
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
207 10
|
6月前
|
负载均衡 容灾 Cloud Native
云原生应用网关进阶:阿里云网络ALB Ingress 全面增强
云原生应用网关进阶:阿里云网络ALB Ingress 全面增强
146 6
|
7月前
|
Kubernetes 监控 Serverless
基于阿里云Serverless Kubernetes(ASK)的无服务器架构设计与实践
无服务器架构(Serverless Architecture)在云原生技术中备受关注,开发者只需专注于业务逻辑,无需管理服务器。阿里云Serverless Kubernetes(ASK)是基于Kubernetes的托管服务,提供极致弹性和按需付费能力。本文深入探讨如何使用ASK设计和实现无服务器架构,涵盖事件驱动、自动扩展、无状态设计、监控与日志及成本优化等方面,并通过图片处理服务案例展示具体实践,帮助构建高效可靠的无服务器应用。
|
7月前
|
边缘计算 调度 对象存储
部署DeepSeek但IDC GPU不足,阿里云ACK Edge虚拟节点来帮忙
介绍如何使用ACK Edge与虚拟节点满足DeepSeek部署的弹性需求。
|
7月前
|
Kubernetes 持续交付 开发工具
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
176 2
|
7月前
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
7月前
|
弹性计算 人工智能 资源调度
DeepSeek大解读系列公开课上新!阿里云专家主讲云上智能算力、Kubernetes容器服务、DeepSeek私有化部署
智猩猩「DeepSeek大解读」系列公开课第三期即将开讲,聚焦阿里云弹性计算助力大模型训练与部署。三位专家将分别讲解智能算力支撑、Kubernetes容器服务在AI场景的应用实践、以及DeepSeek一键部署和多渠道应用集成,分享云计算如何赋能大模型发展。欲观看直播,可关注【智猩猩GenAI视频号】预约。 (239字符)
|
7月前
|
边缘计算 调度 对象存储
部署DeepSeek但IDC GPU不足,阿里云ACK Edge虚拟节点来帮忙
部署DeepSeek但IDC GPU不足,阿里云ACK Edge虚拟节点来帮忙
110 0
|
7月前
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。

推荐镜像

更多