智享教程网
白蓝主题五 · 清爽阅读
首页  > 日常经验

网络容器化运维管理的那些实战细节

最近公司上了一个新项目,前后端分离架构,微服务拆得七七八八。刚开始部署时还用传统方式一台台配服务器,没几天就扛不住了。服务一多,版本更新频繁,网络配置错一次,整个链路就卡住。后来干脆全切到容器运维,用 Docker + Kubernetes 搞了一套自动化流程,才算真正松了口气。

容器不是万能药,但确实省事不少

很多人觉得容器就是打包镜像扔上去跑起来就行,其实真没那么简单。比如我们之前有个服务,本地跑得好好的,一上生产就连不上数据库。查了半天才发现是容器内部网络模式没设对,默认的 bridge 模式跟宿主机网络隔离太狠,跨节点通信还得额外配 overlay 网络。

后来改成 host 模式,问题解决了,但又发现端口冲突。最后折中用了自定义 bridge,配合 docker-compose 统一编排:

version: '3.8'
services:
  app:
    image: myapp:v1.2
    ports:
      - "8080:80"
    networks:
      - app-net

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
    networks:
      - app-net

networks:
  app-net:
    driver: bridge

K8s 的 Service 和 Ingress 得搭配着用

小团队一开始可能直接用 NodePort 暴露服务,简单粗暴。但我们用户量上来之后,发现外网 IP 变动频繁,域名解析老断。后来上了 Ingress-Nginx,统一入口转发,配合 cert-manager 自动续 HTTPS 证书,访问稳定多了。

比如这个 ingress 配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
    - hosts:
        - app.mydomain.com
      secretName: app-tls-cert
  rules:
    - host: app.mydomain.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: web-service
                port:
                  number: 80

这样一来,前端、API、后台管理全走同一个域名,路径分流,运维不用再一个个开公网端口,安全也更有保障。

日志和监控不能省

容器跑着跑着挂了,总得知道为啥吧?我们一开始没接集中日志,出问题只能进 pod 手动看 logs,效率极低。后来上了 ELK(Elasticsearch+Fluentd+Kibana),所有容器日志自动采集,按服务名和时间过滤,排查速度提升明显。

监控方面,Prometheus 抓 metrics,Grafana 做面板,CPU、内存、请求延迟一目了然。比如某个服务突然 500 错误飙升,一看 dashboard 就发现是数据库连接池被打满,立马扩容 sidecar 容器,问题快速收敛。

别忽视网络策略(NetworkPolicy)

很多人只关注服务能不能通,不关心谁该通谁不该通。我们吃过亏——一个内部统计服务被意外暴露在公网,差点被扫走数据。现在默认所有 Pod 不允许外部访问,只通过 Ingress 开放必要路径,其他服务间调用靠 NetworkPolicy 控制。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-api-only
spec:
  podSelector:
    matchLabels:
      app: payment-service
  policyTypes:
    - Ingress
  ingress:
    - from:
        - podSelector:
            matchLabels:
              app: api-gateway
      ports:
        - protocol: TCP
          port: 80

这种白名单机制,虽然配置麻烦点,但出了事责任清晰,审计也方便。

现在我们上线新版本,CI/CD 流水线自动构建镜像、推仓库、滚动更新,全程十分钟搞定。中间网络切换平滑,用户几乎无感。容器化运维管理搞顺了,人轻松多了,半夜告警少了,周末也能安心带娃出门玩了。