基于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: - defaultmicrok8s 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.iomicrok8s 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 authmicrok8s 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-secretmicrok8s 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场景的替代方案:
- 自签名CA+cert-manager:如上述步骤,适合内部环境,可实现证书自动化管理。
- 企业私有CA对接:如果内部有现成的私有CA(如HashiCorp Vault、AD CS),可通过cert-manager对接实现证书自动签发。
- 手动生成自签名证书:用
openssl直接生成证书后导入Istio网关,但缺乏自动化更新能力。
内容的提问来源于stack exchange,提问作者user8749481
相关产品推荐
相关产品推荐

