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。。。

相关推荐
人生匆匆9 小时前
k8s通过域名访问 StatefulSet的pod
云原生·容器·kubernetes
寂寞旅行11 小时前
k8s实现多人同时使用pod
云原生·容器·kubernetes
工具罗某人13 小时前
docker快速部署minio
java·nginx·docker
三不原则14 小时前
实战:Docker+K8s 部署 MNIST 模型,实现 API 调用功能
docker·容器·kubernetes
oMcLin15 小时前
如何在Ubuntu 24.04上通过配置Nginx与Keepalived实现高可用负载均衡集群
nginx·ubuntu·负载均衡
小Ti客栈16 小时前
前后台Nginx部署同域名路径区分配置
java·前端·nginx
无聊的HZ19 小时前
k8s中, deployments 、pods 、replica sets 、services 他们分别是什么?有什么关联?
云原生·容器·kubernetes
cooldream200920 小时前
Nginx 部署 Vue 项目后首页空白问题深度解析:从样式冲突到路由配置的系统性排查
运维·vue.js·nginx
庸子20 小时前
动静结合的防御体系:Kubernetes 网络零信任与漏洞扫描实战
网络·容器·kubernetes
间彧21 小时前
K8s Gateway API与现有Ingress控制器如何实现平滑迁移?
kubernetes