GKE 1.9.6-gke.1至GCE实例出口网络及Filebeat部署问题
在GKE 1.9.6-gke.1上部署Filebeat DaemonSet + 解决出口网络问题
我来帮你一步步搞定这个部署,顺便解决你提到的GKE到GCE实例的出口网络问题——毕竟1.9.x版本的GKE确实偶尔会有这类网络小坑。
一、先搞定集群权限配置
Filebeat需要访问K8s API来获取Pod元数据,还要读取节点上的容器日志,所以得先给它配置对应的权限:
- 创建ServiceAccount(放在kube-system命名空间更合理):
apiVersion: v1 kind: ServiceAccount metadata: name: filebeat namespace: kube-system
- 创建ClusterRole,定义Filebeat需要的权限:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: filebeat rules: - apiGroups: [""] resources: - namespaces - pods verbs: ["get", "list", "watch"]
- 把ClusterRole绑定到刚才的ServiceAccount:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: filebeat subjects: - kind: ServiceAccount name: filebeat namespace: kube-system roleRef: kind: ClusterRole name: filebeat apiGroup: rbac.authorization.k8s.io
把这三个配置保存成filebeat-rbac.yaml,然后执行:
kubectl apply -f filebeat-rbac.yaml
二、部署Filebeat DaemonSet
我给你适配了GKE 1.9.6的DaemonSet配置(注意这个版本用extensions/v1beta1的DaemonSet API更稳妥),还有对应的ConfigMap:
1. 先创建Filebeat的ConfigMap(核心配置)
保存成filebeat-config.yaml,记得替换<你的Elasticsearch地址>为实际地址,如果ES有认证就打开用户名密码的注释:
apiVersion: v1 kind: ConfigMap metadata: name: filebeat-config namespace: kube-system labels: k8s-app: filebeat data: filebeat.yml: |- filebeat.inputs: - type: container paths: - /var/log/containers/*.log processors: - add_kubernetes_metadata: host: ${NODE_NAME} matchers: - logs_path: logs_path: "/var/log/containers/" output.elasticsearch: hosts: ["<你的Elasticsearch地址>:9200"] # 如果Elasticsearch开启了认证,取消下面两行注释并填写正确信息 # username: "elastic" # password: "changeme"
2. 创建DaemonSet配置
保存成filebeat-daemonset.yaml:
apiVersion: extensions/v1beta1 kind: DaemonSet metadata: name: filebeat namespace: kube-system labels: k8s-app: filebeat spec: template: metadata: labels: k8s-app: filebeat spec: serviceAccountName: filebeat terminationGracePeriodSeconds: 30 containers: - name: filebeat image: docker.elastic.co/beats/filebeat:7.17.0 # 选和你的Elastic栈匹配的LTS版本,兼容性更好 args: [ "-c", "/etc/filebeat.yml", "-e", ] securityContext: runAsUser: 0 # 必须以root运行才能读取容器日志文件 resources: limits: memory: 200Mi requests: cpu: 100m memory: 100Mi volumeMounts: - name: config mountPath: /etc/filebeat.yml subPath: filebeat.yml - name: data mountPath: /usr/share/filebeat/data # 持久化Filebeat的状态数据 - name: varlibdockercontainers mountPath: /var/lib/docker/containers readOnly: true - name: varlog mountPath: /var/log readOnly: true volumes: - name: config configMap: defaultMode: 0600 name: filebeat-config - name: varlibdockercontainers hostPath: path: /var/lib/docker/containers - name: varlog hostPath: path: /var/log - name: data hostPath: path: /var/lib/filebeat-data type: DirectoryOrCreate # 如果目录不存在自动创建
然后执行部署命令:
kubectl apply -f filebeat-config.yaml kubectl apply -f filebeat-daemonset.yaml
3. 验证部署
执行以下命令确认每个节点上都运行了Filebeat Pod:
kubectl get pods -n kube-system -l k8s-app=filebeat
如果要查看Filebeat的日志,确认是否正常采集:
kubectl logs <你的filebeat-pod-name> -n kube-system
三、解决GKE到GCE实例的出口网络问题
针对GKE 1.9.6-gke.1的出口问题,给你几个实用的排查和解决步骤:
- 检查防火墙规则
确保GKE节点所在的VPC防火墙允许出站访问GCE实例的目标端口(比如如果是访问ES的9200端口)。用这个命令查看防火墙规则:
gcloud compute firewall-rules list --filter="network:<你的VPC网络名称>"
如果没有对应的出站规则,就创建一个:
gcloud compute firewall-rules create allow-gke-to-gce --network=<你的VPC网络> --direction=EGRESS --action=ALLOW --rules=tcp:<目标端口> --source-ranges=<GKE节点子网CIDR>
- 配置Cloud NAT(如果节点没有公网IP)
如果你的GKE节点是私有节点(没有公网IP),就需要配置Cloud NAT让节点通过NAT网关访问外部资源:
# 先创建路由器(如果还没有) gcloud compute routers create gke-nat-router --region=us-east1 --network=<你的VPC网络> # 创建NAT网关 gcloud compute routers nats create gke-nat --router=gke-nat-router --region=us-east1 --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges
- 检查VPC路由表
确认VPC里有到GCE实例所在子网的路由,如果没有就添加静态路由:
gcloud compute routes create route-gke-to-gce --network=<你的VPC网络> --destination-range=<GCE实例子网CIDR> --next-hop-instance=<GCE实例名称> --next-hop-instance-zone=<GCE实例所在区域>
- 验证DNS解析
有时候出口问题是DNS解析失败导致的,你可以在Filebeat Pod里测试GCE实例的域名解析:
kubectl exec -it <filebeat-pod-name> -n kube-system -- nslookup <GCE实例的域名或IP>
如果解析失败,检查集群的CoreDNS配置,或者给GKE集群添加自定义DNS服务器。
内容的提问来源于stack exchange,提问作者Luis F Hernandez
相关产品推荐
相关产品推荐

