手动发布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
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。。。