Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 尝试使用tls设置入口,并仅在GKE上对某些IP开放_Kubernetes_Google Cloud Platform_Containers_Google Kubernetes Engine_Kubernetes Ingress - Fatal编程技术网

Kubernetes 尝试使用tls设置入口,并仅在GKE上对某些IP开放

Kubernetes 尝试使用tls设置入口,并仅在GKE上对某些IP开放,kubernetes,google-cloud-platform,containers,google-kubernetes-engine,kubernetes-ingress,Kubernetes,Google Cloud Platform,Containers,Google Kubernetes Engine,Kubernetes Ingress,我在设置一个只对某些特定IP开放的入口时遇到了问题,检查了文档,尝试了很多东西,一个源代码之外的IP继续访问。这是一个使用nginx的alpine上的Zabbix web界面,在节点端口80上设置了一个服务,然后使用入口在GCP上设置了一个负载平衡器,一切正常,web界面工作正常,但我如何才能使它仅对所需的IP进行访问? 我的防火墙规则正常,只能通过负载均衡器IP访问 此外,我还有一个用于此部署的特定命名空间 群集版本1.11.5-gke.5 编辑我使用的是GKE标准入口GLBC 我的模板配置如

我在设置一个只对某些特定IP开放的入口时遇到了问题,检查了文档,尝试了很多东西,一个源代码之外的IP继续访问。这是一个使用nginx的alpine上的Zabbix web界面,在节点端口80上设置了一个服务,然后使用入口在GCP上设置了一个负载平衡器,一切正常,web界面工作正常,但我如何才能使它仅对所需的IP进行访问? 我的防火墙规则正常,只能通过负载均衡器IP访问

此外,我还有一个用于此部署的特定命名空间

群集版本
1.11.5-gke.5
编辑我使用的是GKE标准入口GLBC

我的模板配置如下:是否有人可以帮助我了解缺少的内容:

    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: zabbix-web
      namespace: zabbix-prod
      labels:
        app: zabbix
        tier: frontend
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            name: zabbix-web
            app: zabbix
        spec:
          volumes:
          - name: cloudsql-instance-credentials
            secret:
              defaultMode: 420
              secretName: cloudsql-instance-credentials
          containers:
            - command:
              - /cloud_sql_proxy
              - -instances=<conection>
              - -credential_file=/secrets/cloudsql/credentials.json
              image: gcr.io/cloudsql-docker/gce-proxy:1.11
              imagePullPolicy: IfNotPresent
              name: cloudsql-proxy
              resources: {}
              securityContext:
                allowPrivilegeEscalation: false
                runAsUser: 2
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
              volumeMounts:
              - mountPath: /secrets/cloudsql
                name: credentials
                readOnly: true
            - name: zabbix-web
              image: zabbix/zabbix-web-nginx-mysql:alpine-3.2-latest
              ports:
              - containerPort: 80
              env:
              - name: MYSQL_USER
                valueFrom:
                  secretKeyRef:
                    key: <user>
                    name: <user>
              - name: MYSQL_PASSWORD
                valueFrom:
                  secretKeyRef:
                    key: <pass>
                    name: <pass>
              - name: DB_SERVER_HOST
                value: 127.0.0.1
              - name: MYSQL_DATABASE
                value: <db>
              - name: ZBX_SERVER_HOST
                value: <db>
            readinessProbe:
              failureThreshold: 3
              httpGet:
                path: /index.php
                port: 80
                scheme: HTTP
              periodSeconds: 10
              successThreshold: 1
              timeoutSeconds: 30
---
apiVersion: v1
kind: Service
metadata:
  name: "zabbix-web-service"
  namespace: "zabbix-prod"
  labels:
    app: zabbix
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    name: "zabbix-web"
  type: "NodePort"
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: zabbix-web-ingress
  namespace: zabbix-prod
  annotations:
    ingress.kubernetes.io/service.spec.externalTrafficPolicy: local
    ingress.kubernetes.io/whitelist-source-range: <xxx.xxx.xxx.xxx/32>
spec:
  tls:
  - secretName: <tls-cert>
  backend:
    serviceName: zabbix-web-service
    servicePort: 80
apiVersion:v1 种类:复制控制器 元数据: 名称:zabbix网站 名称空间:zabbix prod 标签: 应用程序:zabbix 层:前端 规格: 副本:1份 模板: 元数据: 标签: 名称:zabbix网站 应用程序:zabbix 规格: 卷数: -名称:cloudsql实例凭据 秘密: 默认模式:420 secretName:cloudsql实例凭据 容器: -命令: -/cloud\u sql\u代理 --实例= --credential_file=/secrets/cloudsql/credentials.json 图片:gcr.io/cloudsqldocker/gce代理:1.11 imagePullPolicy:如果不存在 名称:cloudsql代理 资源:{} securityContext: allowPrivilegeEscalation:false runAsUser:2 terminationMessagePath:/dev/终止日志 terminationMessagePolicy:文件 体积数量: -mountPath:/secrets/cloudsql 姓名:凭据 只读:正确 -名称:zabbix网站 图片:zabbix/zabbix web nginx mysql:alpine-3.2-latest 端口: -集装箱港口:80 环境: -名称:MYSQL\u用户 价值来源: secretKeyRef: 关键: 姓名: -名称:MYSQL\u密码 价值来源: secretKeyRef: 关键: 姓名: -名称:数据库服务器主机 数值:127.0.0.1 -名称:MYSQL\u数据库 价值: -名称:ZBX_服务器_主机 价值: readinessProbe: 故障保持:3 httpGet: 路径:/index.php 港口:80 方案:HTTP 秒:10 成功阈值:1 超时秒:30 --- 版本:v1 种类:服务 元数据: 名称:“zabbix web服务” 命名空间:“zabbix prod” 标签: 应用程序:zabbix 规格: 端口: -港口:80 目标港:80 选择器: 名称:“zabbix网站” 类型:“节点端口” --- apiVersion:extensions/v1beta1 种类:入口 元数据: 名称:zabbix web入口 名称空间:zabbix prod 注释: ingress.kubernetes.io/service.spec.externalTrafficPolicy:本地 ingress.kubernetes.io/whitelist-source-range: 规格: tls: -秘书长姓名: 后端: serviceName:zabbix web服务 服务端口:80
好的,您不能通过或在上限制IP地址。请注意,在撰写本文时,GLBC也是一项正在进行的工作

ingres.kubernetes.io/whitelist源代码范围工作得很好,但是当您使用像nginx本身这样的东西时


限制/白名单IP地址的一般方法是使用(看起来您已经这样做了)。基本上,您可以将IP地址限制/列入运行K8s节点的网络的白名单。

实现目标的最佳选择之一是使用防火墙规则,因为您无法通过全局LB或GCP L7 LB本身限制IP地址。但是,如果您在Kubernetes群集上使用入口,则可以根据专用IP地址限制对应用程序的访问

一个可能的用例是,您有一个开发设置,不想让所有人,尤其是竞争对手,都能使用所有新奇的新特性。在这种情况下,可以使用IP白名单来限制访问

这可以通过
ingres.kubernetes.io/whitelist source range
注释指定允许的客户端IP源范围来完成

该值是以逗号分隔的CIDR块列表

例如:

10.0.0.0/24、1.1.1.1/32.


请获取更多信息。

对于像我一样通过谷歌偶然发现这个问题的人,现在有了一个解决方案。您可以通过
cloud.google.com
Kubernetes API中的
BackendConfig
以及GCE CloudArmor策略来实现这一点

您可以通过以下方式将IP列入白名单:

切换到项目:

gcloud配置集项目$project
创建策略:

gcloud计算安全策略创建$POLICY\u NAME——说明“白名单”
将默认策略更改为拒绝:

gcloud计算安全策略规则更新2147483647--action=deny-403\
--安全策略$policy\u名称
以低于默认白名单的优先级列出要白名单的所有IP:

gcloud计算安全策略规则创建2\
--行动允许\
--安全策略$policy\u名称\
--说明“允许好友”\
--src ip范围“93.184.17.0/24151.101.1.69/32”
每个范围最多10个

注意,您需要有效的CIDR范围,以便使用

按如下方式查看策略: