K8s实战4-使用Helm在Azure上部署Ingress-Nginx和Tokengateway

手动发布Ingress-Nginx

1 登录到aks(dfinder-gw-aks)

az login

az account set --subscription ${sub ID}

az aks get-credentials --resource-group ${groupname} --name ${aks name}

2 下载 ingress-nginx-4.2.5.tgz

curl -LO https://github.com/kubernetes/ingress-nginx/releases/download/helm-chart-4.7.1/ingress-nginx-4.7.1.tgz

3 解压,修改文件

sudo tar -xvf ingress-nginx-4.2.5.tgz && sudo cd ingress-nginx

XML 复制代码
commonLabels: {}



controller:

  name: controller

  image:

    registry: registry.cn-hangzhou.aliyuncs.com # 根据自己情况修改

    image: google_containers/nginx-ingress-controller # 同上  

    tag: "v1.3.0"

    # digest: sha256:31f47c1e202b39fadecf822a9b76370bd4baed199a005b3e7d4d1455f4fd3fe2      # 注释掉


  dnsPolicy: ClusterFirstWithHostNet                     # 修改好的



  hostNetwork: true         # 改成true        



  kind: DaemonSet                          # 已经修改好的



  nodeSelector:

    kubernetes.io/os: linux

    ingress: "true"                              # 改成true



    patch:

      enabled: true

      image:

        registry: registry.cn-hangzhou.aliyuncs.com # 根据自己情况修改

        image: google_containers/kube-webhook-certgen # 同上


        tag: v1.3.0

        # digest: sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc67868660      # 注释掉

4 安装ingress-nginx

#创建命名空间

kubectl create ns ingress-nginx-public

# 使用helm进行安装

helm install ingress-nginx-public -f values.yaml -n ingress-nginx-public .

helm install ingress-nginx-public -f values.yaml -n ingress-nginx-public .--set controller.service.loadBalancerIP="159.27.190.62" --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-resource-group"="cn-prdcnn3-dfinder-pubip-rg"

其他命令

helm list -n ingress-nginx-public

kubectl -n ingress-nginx-public get pods -o wide

kubectl -n ingress-nginx-public get svc -o wide

# 删除ingress-nginx

helm delete ingress-nginx-public -n ingress-nginx-public

# 更新ingress-nginx

helm upgrade ingress-nginx-public -n -f values.yaml -n ingress-nginx-public .

错误处理1

错误描述:Ingress-nginx发布后,Load Balancer,Frontend IP configuration中没有生成申请的public ip的记录,只有自动生成的public ip记录

错误信息:

Error syncing load balancer: failed to ensure load balancer:

findMatchedPIPByLoadBalancerIP: failed to listPIP: Retriable: false,

RetryAfter: 0s, HTTPStatusCode: 403, RawError:

{"error":{"code":"AuthorizationFailed","message":"The client

'9f32426d-729e-4d88-8c62-d9d3b6ad4921' with object id

'9f32426d-729e-4d88-8c62-d9d3b6ad4921' does not have authorization to perform

action 'Microsoft.Network/publicIPAddresses/read' over scope

'/subscriptions/fc10f621-0a92-4106-941e-cb7c63b9295a/resourceGroups/cn-prdcnn3-dfinder-pubip-rg/providers/Microsoft.Network'

or the scope is invalid. If access was recently granted, please refresh your

credentials."}}

执行命令:

这个需要有subcriptions权限才能执行成功,haidi执行未成功,但liuxiao执行成功,haidi再次执行helm install,Load Balancer中就有两条记录了。

az role assignment create --assignee <object ID> --scope <resource ID of the Vnet> --role "Network Contributor"

5 测试是否DNS是否通了

1 通过在DNS的public endpoint页面点击health check按钮,如果status变为绿色,implemented,则为通过

2 通过命令测试

openssl s_client -crlf -connect 159.27.190.62:443 -servername dfdr-nonprod.query.api.dvb.corpinter.net.cn

curl -X GET -k -I --resolve dfdr-nonprod.query.api.dvb.corpinter.net.cn:443:159.27.190.62 https://dfdr-nonprod.query.api.dvb.corpinter.net.cn

手动发布Tokengateway

1 下载tokengateway的helm模版

git clone https://dev.azure.com/daimler-mic/IAMS/_git/mic-gateway

git pull -r

cd mic-gateway/helm-chart

2 通过Helm部署到Aks

helm upgrade \

--install ${NAME} . \

--namespace ${NAMESPACE} \

--values ${VALUES_FILE} \

--set "global.clientsecret=${CLIENT_SECRET}"

upgrade前准备工作,需要修改Values.yaml中的

region

stage

pullPolicy

clientid

clientsecret

aksversion

dockerPullID: "${dockerPullID}"

dockerPullSecret: "${dockerPullSecret}"

acrValues: "gas:strong"

requestedScopes:

  • "groups" # standard OIDC scope

  • "openid" # standard OIDC scope

  • "profile" # standard OIDC scope

  • "email" # standard OIDC scope

  • "offline_access"

项目总结:

这个项目是要接入一个字节的埋点系统,目前的Step是要在公司的AKS上部署Ingress-Nginx和TokenGateway来打通域名解析,为后面接入第三方系统提供支持。

我刚开始接到这个工作时,还是觉得有些挑战的。

挑战1 没有实际用helm部署过应用。只是部署了一个简单的nginx(幸好动手部署一次,这次省了很多事),还有就是在配置pipeline时,对helm有一些了解。

挑战2 对配置DNS,IP这些心里没底。之前都是同事配置的,我负责把开发的应用,部署到搭建好的环境,真正可以在浏览器访问到,需要其他同事支持。

挑战3 对K8s中的一些知识点理解的还不深。比如Ingress-nginx(之前以为是个简单的nginx,心里还想我部署过,其实还是有区别的),Deamset,endpoint,Load banlancer,K8s开发工具lens.

挑战4 对这个部署的套路不熟悉。部署Ingress-Nginx之前有个pipeline,但当我部署是禁用了,于是负责的同事给我推荐了好几种其他方案,本来简单的事,需要尝试好几种方案。再有tokengateway之前也是有pipeline,但具体项目需要重新建立,这个项目目前不需要pipeline,只能参考。虽然部署不需要写代码,但部署不成功,需要找原因解决,也是需要工具,需要有方法的。Lens比直接在portal看到更多的信息,修改也更方便。

挑战5 对不熟悉的事情需要请教很多人。这个其实还好,现在回顾一下,之前做前后端开发,可能一两人交流一下就搞定了。这次部署涉及到了Li(部署套路结束和细节问题解决),liu(整体需求,整体解决方案,问题找人,最后的联调),zou(权限的配置),ma(账户开通,提供了一些解决方案),zhang and xiong(经验提供者,APP组有类似配置经验),XX(没记住名字,腾讯云部署经验,提供最后调试阶段的支持),Li(微软case接口人,解决了一个权限问题)。

上周五刚开始具体工作时,有点压力山大,那那都不顺,经过本周三天的努力,已经成功部署,并测试跑通,Happy。。。

相关推荐
denglei.22 分钟前
在Nginx部署Web应用,如何保障后端API的安全
nginx·安全
ether-lin1 小时前
DevOps实战:用Kubernetes和Argo打造自动化CI/CD流程(2)
kubernetes·自动化·devops
苹果醋33 小时前
React系列(八)——React进阶知识点拓展
运维·vue.js·spring boot·nginx·课程设计
我要出家当道士3 小时前
Nginx单向链表 ngx_list_t
数据结构·nginx·链表·c
是芽芽哩!5 小时前
【Kubernetes 指南】基础入门——Kubernetes 基本概念(二)
云原生·容器·kubernetes
fat house cat_6 小时前
Linux环境下使用tomcat+nginx部署若依项目
linux·nginx·tomcat
怡雪~7 小时前
k8s使用ceph
ceph·容器·kubernetes
运维小文8 小时前
K8S中的服务质量QOS
云原生·容器·kubernetes
华为云开发者联盟8 小时前
Karmada v1.12 版本发布!单集群应用迁移可维护性增强
云原生·kubernetes·开源·容器编排·karmada
꧁༺朝花夕逝༻꧂8 小时前
nginx-代理服务
运维·服务器·nginx