You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于MicroK8s,无DNS仅用私有IP配置Istio IngressGateway TLS咨询

基于私有IP的Istio HTTPS网关配置方案(可行)

1. 完成基础组件部署与初始化

  • 确保MicroK8s已安装并启用所需addon:
    microk8s enable istio metallb cert-manager
    
  • 配置MetalLB的私有IP池,指定可用网段(示例为192.168.200.10-192.168.200.20):
    创建metallb-config.yaml:
    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
      name: default
      namespace: metallb-system
    spec:
      addresses:
      - 192.168.200.10-192.168.200.20
    ---
    apiVersion: metallb.io/v1beta1
    kind: L2Advertisement
    metadata:
      name: default
      namespace: metallb-system
    spec:
      ipAddressPools:
      - default
    
    应用配置:
    microk8s kubectl apply -f metallb-config.yaml
    

2. 生成私有环境可用的证书

Let's Encrypt不支持私有IP颁发公可信证书,需采用自签名CA+cert-manager方案:

  • 创建自签名根CA:
    创建selfsigned-ca.yaml:
    apiVersion: cert-manager.io/v1
    kind: ClusterIssuer
    metadata:
      name: selfsigned-issuer
    spec:
      selfSigned: {}
    ---
    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
      name: root-ca
      namespace: istio-system
    spec:
      isCA: true
      commonName: root-ca
      secretName: root-ca-secret
      issuerRef:
        name: selfsigned-issuer
        kind: ClusterIssuer
        group: cert-manager.io
    
    应用配置:
    microk8s kubectl apply -f selfsigned-ca.yaml
    
  • 基于根CA生成Istio网关证书(直接将私有IP作为SAN字段):
    创建gateway-cert.yaml:
    apiVersion: cert-manager.io/v1
    kind: ClusterIssuer
    metadata:
      name: ca-issuer
    spec:
      ca:
        secretName: root-ca-secret
    ---
    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
      name: istio-gateway-cert
      namespace: istio-system
    spec:
      secretName: istio-gateway-cert-secret
      dnsNames:
      - "192.168.200.10"
      issuerRef:
        name: ca-issuer
        kind: ClusterIssuer
        group: cert-manager.io
      usages:
      - server auth
      - client auth
    
    应用配置:
    microk8s kubectl apply -f gateway-cert.yaml
    

3. 配置Istio网关强制HTTPS

  • 创建网关资源,启用HTTP到HTTPS的自动重定向,并绑定证书:
    创建istio-gateway.yaml:
    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: private-ip-gateway
      namespace: istio-system
    spec:
      selector:
        istio: ingressgateway
      servers:
      - port:
          number: 80
          name: http
          protocol: HTTP
        hosts:
        - "*"
        tls:
          httpsRedirect: true
      - port:
          number: 443
          name: https
          protocol: HTTPS
        hosts:
        - "*"
        tls:
          mode: SIMPLE
          credentialName: istio-gateway-cert-secret
    
    应用配置:
    microk8s kubectl apply -f istio-gateway.yaml
    

4. 为每个微服务配置独立VirtualService

以service-a为例,创建路由规则:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: service-a-vs
  namespace: default
spec:
  hosts:
  - "192.168.200.10"
  gateways:
  - istio-system/private-ip-gateway
  http:
  - match:
    - uri:
        prefix: /service-a
    route:
    - destination:
        host: service-a.default.svc.cluster.local
        port:
          number: 8080

应用配置:

microk8s kubectl apply -f service-a-vs.yaml

其他微服务只需修改name、uri.prefix和destination.host字段即可复用该配置。


私有IP证书方案补充说明

Let's Encrypt仅支持公网可解析域名,私有IP场景的替代方案:

  1. 自签名CA+cert-manager:如上述步骤,适合内部环境,可实现证书自动化管理。
  2. 企业私有CA对接:如果内部有现成的私有CA(如HashiCorp Vault、AD CS),可通过cert-manager对接实现证书自动签发。
  3. 手动生成自签名证书:用openssl直接生成证书后导入Istio网关,但缺乏自动化更新能力。

内容的提问来源于stack exchange,提问作者user8749481

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 08:45:20