当前位置: 首页 > 知识库问答 >
问题:

试图用tls设置入口,并只对GKE上的一些IP开放

丁文轩
2023-03-14

我有麻烦设置一个入口只开放一些特定的IP,检查文档,尝试了很多东西和一个IP的来源不断访问。这是一个使用nginx的阿尔卑斯山上的Zabbix web界面,在节点端口80上设置一个服务,然后使用一个入口在GCP上设置一个loadbalancer,这一切都在工作,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

共有1个答案

季森
2023-03-14

您可以通过配置入口和云甲将IP列入白名单:

切换到项目:

gcloud config set project $PROJECT

创建策略:

gcloud compute security-policies create $POLICY_NAME --description "whitelisting"
gcloud compute security-policies rules update 2147483647 --action=deny-403 \ 
  --security-policy $POLICY_NAME
gcloud compute security-policies rules create 2 \
  --action allow \
  --security-policy $POLICY_NAME \
  --description "allow friends" \
  --src-ip-ranges "93.184.17.0/24,151.101.1.69/32"
gcloud compute security-policies describe $POLICY_NAME
gcloud compute security-policies rules delete $PRIORITY --security-policy $POLICY_NAME

或完整策略:

gcloud compute security-policies delete $POLICY_NAME

为策略创建BackendConfig:

# File backendconfig.yaml:
apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
  namespace: <namespace>
  name: <name>
spec:
  securityPolicy:
    name: $POLICY_NAME

$ kubectl apply -f backendconfig.yaml
backendconfig.cloud.google.com/backendconfig-name created

将BackendConfig添加到服务中:

metadata:
  namespace: <namespace>
  name: <service-name>
  labels:
    app: my-app
  annotations:
    cloud.google.com/backend-config: '{"ports": {"80":"backendconfig-name"}}'
spec:
  type: NodePort
  selector:
    app: hello-app
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080
 类似资料:
  • 我想从我的网站上禁用TLS 1.0和TLS 1.1。 该网站位于谷歌云平台Kubernetes引擎上。 我用了这个Nginx入口https://cloud.google.com/community/tutorials/nginx-ingress-gke 对于SSL证书,我使用了本教程中的cert managerhttps://youtu.be/hoLUigg4V18 我不知道该怎么做。应在以下地点

  • 我正在尝试将入口连接到静态ip。我似乎在遵循所有教程,但我似乎仍然无法将静态ip连接到入口。我的入口文件如下(参考静态ip“测试ip”) 然而,当我跑步时 它返回 没有给出地址。在VPC网络[外部IP地址]中,静态ip是存在的,它是全局的,但它一直说:In use by无 给予 我错过了什么?

  • 我正试图在GKE集群上添加一个NGINX入口控制器,使用现有的HAProxy入口控制器(它在重写规则方面有一些问题) 首先,我尝试将控制器的服务公开给LoadBalancer类型。流量可以到达入口和后端,但它不适用于托管证书。 因此,我尝试使用L7负载平衡器(URL映射)将流量转发到GKE群集IP,并为入口控制器本身创建入口对象。 问题是,这个入口对象似乎不绑定到外部IP。路由到域会产生“默认后端

  • GKE入口可以与Google的托管SSL证书一起使用。这些证书被部署在负载均衡器的边缘服务器中,这导致了非常低的TTFB(到第一个字节的时间) GKE入口有什么问题

  • 01 /【企业应用】 02 /【自建应用】