gpt4 book ai didi

ssl - 启用 SSL 的 GCP 运行状况检查

转载 作者:行者123 更新时间:2023-12-02 11:59:59 24 4
gpt4 key购买 nike

我对 Kubernetes 的东西有点陌生,我正在尝试改进我们这里现有的一个系统。
该应用程序是使用 Spring Boot 开发的,直到现在它使用 HTTP(端口 8080),没有任何加密。系统要求是为所有传输中的数据启用 e2e 加密。所以这就是问题所在。
目前,我们使用 Let's Encrypt 启用了启用了 TLS 的 GCE Ingress,以在集群入口提供证书。这工作正常。我们的 Ingress 有一些路径规则来将流量重定向到正确的微服务,并且这些微服务在通信中没有使用 TLS。
我设法创建了一个自签名证书并将其嵌入到 WAR 中,这在本地机器上运行良好(使用禁用证书验证)。当我在 GKE 上部署它时,GCP 健康检查和 Kubernetes 探测器根本不起作用(我在应用程序日志上看不到任何通信尝试)。
当我尝试在 GCP 上配置后端和健康检查同时更改为 HTTPS 时,它们没有显示任何错误,但一段时间后它们悄悄地切换回 HTTP。
这是我的 YAML 文件:

  • admin-service.yaml

  • ---
    apiVersion: v1
    kind: Service
    metadata:
    name: admin-service
    namespace: default
    spec:
    type: NodePort
    selector:
    app: admin
    ports:
    - port: 443
    targetPort: 8443
    name: https
    protocol: TCP
  • 管理员部署.yaml

  • ---
    apiVersion: "apps/v1"
    kind: "Deployment"
    metadata:
    name: "admin"
    namespace: "default"
    labels:
    app: "admin"
    spec:
    replicas: 1
    selector:
    matchLabels:
    app: "admin"
    template:
    metadata:
    labels:
    app: "admin"
    spec:
    containers:
    - name: "backend-admin"
    image: "gcr.io/my-project/backend-admin:X.Y.Z-SNAPSHOT"
    livenessProbe:
    httpGet:
    path: /actuator/health/liveness
    port: 8443
    scheme: HTTPS
    initialDelaySeconds: 8
    periodSeconds: 30
    readinessProbe:
    httpGet:
    path: /actuator/health/readiness
    port: 8443
    scheme: HTTPS
    initialDelaySeconds: 8
    periodSeconds: 30
    env:
    - name: "FIREBASE_PROJECT_ID"
    valueFrom:
    configMapKeyRef:
    key: "FIREBASE_PROJECT_ID"
    name: "service-config"
    ---
    apiVersion: "autoscaling/v2beta1"
    kind: "HorizontalPodAutoscaler"
    metadata:
    name: "admin-etu-vk1a"
    namespace: "default"
    labels:
    app: "admin"
    spec:
    scaleTargetRef:
    kind: "Deployment"
    name: "admin"
    apiVersion: "apps/v1"
    minReplicas: 1
    maxReplicas: 3
    metrics:
    - type: "Resource"
    resource:
    name: "cpu"
    targetAverageUtilization: 80

  • ingress.yaml

  • ---
    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
    name: my-ingress
    annotations:
    kubernetes.io/ingress.global-static-ip-name: my-ingress-addr
    kubernetes.io/ingress.class: "gce"
    kubernetes.io/tls-acme: "true"
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
    acme.cert-manager.io/http01-edit-in-place: "true"
    kubernetes.io/ingress.allow-http: "false"
    spec:
    tls:
    - hosts:
    - my-domain.com
    secretName: mydomain-com-tls
    rules:
    - host: my-domain.com
    http:
    paths:
    - path: /admin/v1/*
    backend:
    serviceName: admin-service
    servicePort: 443
    status:
    loadBalancer:
    ingress:
    - ip: XXX.YYY.WWW.ZZZ
    阅读 this document from GCP我了解 Loadbalancer 它与自签名证书兼容。
    我将不胜感激你们可以提供的任何见解或新方向。
    提前致谢。
    编辑 1:我在这里添加了入口 YAML 文件,这可能有助于更好地理解这个问题。
    编辑 2:我已经使用我为 active 和就绪性探测 ( scheme) 找到的解决方案更新了部署 YAML。
    编辑 3:我使用服务声明上的注释找到了 GCP 健康检查的解决方案。我将把所有细节放在对我自己的问题的回答中。

    最佳答案

    这是我发现的有关如何解决此问题的信息。
    在阅读了大量与 Kubernetes 和 GCP 相关的文档后,我找到了一份关于 GCP 的文档,解释了在服务声明中使用注释。看一下第 7-8 行。

    ---
    apiVersion: v1
    kind: Service
    metadata:
    name: admin-service
    namespace: default
    annotations:
    cloud.google.com/app-protocols: '{"https":"HTTPS"}'
    spec:
    type: NodePort
    selector:
    app: iteam-admin
    ports:
    - port: 443
    targetPort: 8443
    name: https
    protocol: TCP
    这将提示 GCP 创建 后端服务 健康检查使用 HTTPS,一切都会按预期工作。
    引用: https://cloud.google.com/kubernetes-engine/docs/concepts/ingress-xlb#https_tls_between_load_balancer_and_your_application

    关于ssl - 启用 SSL 的 GCP 运行状况检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63652017/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com