首先,我在https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer测试了本教程
效果很好。我还测试了相同的教程,但还添加了一个 tls 密码来测试 https,它也可以正常工作。
当我创建自己的图像时,我的问题就出现了。这是我采取的步骤:
- Dockerfile:
# 我们将我们的舞台标记为“建造者” FROM node:9.4.0-alpine 作为构建器 复制 package.json package-lock.json ./ ## 将节点模块存储在单独的层将防止在每次构建时安装不必要的 npm 运行 npm i && mkdir /srv/cs-ui && cp -R ./node_modules ./srv/cs-ui 工作目录 /srv/cs-ui 复制 。. ## 在生产模式下构建 Angular 应用程序并将工件存储在 dist 文件夹中 运行 $(npm bin)/ng build --environment "prod" 来自 nginx ## 复制我们默认的 nginx 配置 复制 nginx/default.conf /etc/nginx/conf.d/ ## 删除默认的 nginx 网站 运行 rm -rf /usr/share/nginx/html/* ## 从“builder”阶段将 dist 文件夹中的工件复制到默认 nginx nginx 公用文件夹 复制 --from=builder /srv/cs-ui/dist /usr/share/nginx/html/
- Dockerfile 使用如下所示的 docker-compose 文件运行:
版本:'2' 服务: cs-ui: 图片:“gcr.io/cs-micro/cs-ui:v1” 容器名称:“cs-ui” tty: 真 建造: 。 端口: - “80:80”
- 在本地,这可以正常工作。接下来我要做的是将它推送到 Container Registry。
gcloud docker -- 推送 gcr.io/cs-micro/cs-ui:v1
- 之后我创建一个容器:
kubectl 运行 cs-ui --image=gcr.io/cs-micro/cs-ui:v1 --port=80
- 然后我暴露它:
kubectl 暴露部署 cs-ui --target-port=80 --type=NodePort
- 然后我运行以下入口文件:
apiVersion:扩展/v1beta1 种类:入口 元数据: 名称:基本入口 规格: tls: -secretName:tls 证书 后端: 服务名称:cs-ui 服务端口:80
用命令:
kubectl apply -f test.yaml
- kubectl 描述服务
名称:cs-ui 命名空间:默认 标签:运行=cs-ui 注释: 选择器:run=cs-ui 类型:节点端口 IP:10.35.244.124 端口:80/TCP 目标端口:80/TCP 节点端口:30272/TCP 端点:10.32.0.32:80 会话亲和性:无 外部流量策略:集群 事件: 名称:kubernetes 命名空间:默认 标签:组件=apiserver 提供者=kubernetes 注释: 选择器: 类型:集群IP IP:10.35.240.1 端口:https 443/TCP 目标端口:443/TCP 端点:35.195.192.28:443 会话亲和性:ClientIP 事件:
- kubectl 描述部署
名称:cs-ui 命名空间:默认 创建时间戳:2018 年 1 月 25 日星期四 12:27:59 +0100 标签:运行=cs-ui 注释:deployment.kubernetes.io/revision=1 选择器:run=cs-ui 副本:1 个需要 | 1 更新 | 共 1 个 | 1 个可用 | 0 不可用 策略类型:滚动更新 MinReadySeconds: 0 RollingUpdateStrategy:最多 1 个不可用,最多 1 个激增 吊舱模板: 标签:运行=cs-ui 容器: cs-ui: 图片:gcr.io/cs-micro/cs-ui:v1 端口:80/TCP 环境: 坐骑: 卷: 条件: 类型 状态 原因 ---- ------ ------ Available True MinimumReplicasAvailable 旧副本集: NewReplicaSet:cs-ui-2929390783(创建了1/1副本) 事件: 类型原因年龄来自消息 ---- ------ ---- ---- -------- Normal ScalingReplicaSet 9m deployment-controller 扩大副本集 cs-ui-2929390783 到 1
- kubectl 描述
名称:基本入口 命名空间:默认 地址:35.227.220.186 默认后端:cs-ui:80 (10.32.0.32:80) TLS: tls 证书终止 规则: 主机路径后端 ---- ---- -------- * * cs-ui:80 (10.32.0.32:80) 注释: https-转发规则:k8s-fws-default-basic-ingress--f5fde3efbfa51336 https-target-proxy:k8s-tps-default-basic-ingress--f5fde3efbfa51336 ssl 证书:k8s-ssl-default-basic-ingress--f5fde3efbfa51336 目标代理:k8s-tp-default-basic-ingress--f5fde3efbfa51336 网址映射:k8s-um-default-basic-ingress--f5fde3efbfa51336 后端:{“k8s-be-30272--f5fde3efbfa51336”:“不健康”} 转发规则:k8s-fw-default-basic-ingress--f5fde3efbfa51336 静态 IP:k8s-fw-default-basic-ingress--f5fde3efbfa51336 事件: 类型原因年龄来自消息 ---- ------ ---- ---- -------- 正常 ADD 12m loadbalancer-controller default/basic-ingress 正常 CREATE 11m loadbalancer-controller ip: 35.227.220.186 正常服务 6m (x4 over 11m) loadbalancer-controller 默认后端设置为 cs-ui:30272
- 3-5 分钟后,我变得不健康,我不知道为什么,因为设置几乎与他们的设置完全相同。
我已经阅读了无数关于当你得到不健康的后端状态时该怎么做的帖子,但没有一个有帮助。在本教程中提到添加防火墙规则提及:https ://cloud.google.com/compute/docs/load-balancing/health-checks我已添加,但没有帮助。
如果您有任何建议,我很乐意对其进行测试。