0

是否可以使用 metalLB 将 LoadbalancerIP 分配给入口网关?鉴于此 yaml,它会引发有关 loadBalancerIP 的错误(io.istio.networking.v1alpha3.Gateway.spec 中的“未知字段”loadBalancerIP“),我可以通过使用'--validate = false'标志来解决它,但metalLB是没有分配正确的 IP 地址?

测试.yaml:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: httpbin-gateway
spec:
  loadBalancerIP: 10.0.0.242
  selector:
    istio: ingressgateway # use Istio default gateway implementation
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: httpbin
spec:
  hosts:
  - "*"
  gateways:
  - httpbin-gateway
  http:
  - match:
    - uri:
        prefix: /headers
    route:
    - destination:
        port:
          number: 8000
        host: httpbin

层2.yaml:

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: nips
      protocol: layer2
      addresses:
      - 10.0.0.206-10.0.0.225
      auto-assign: true
    - name: mainips
      protocol: layer2
      addresses:
      - 10.0.0.230-10.0.0.239
      auto-assign: false
    - name: cheapips
      protocol: layer2
      addresses:
      - 10.0.0.240-10.0.0.249
      auto-assign: false
    - name: web 
      protocol: layer2
      addresses:
      - 10.0.0.203-10.0.0.205
      auto-assign: false

运行 kubectl 命令:

$ kubectl apply -f /tmp/test.yaml
error: error validating "/tmp/test.yaml": error validating data: ValidationError(Gateway.spec): unknown field "loadBalancerIP" in io.istio.networking.v1alpha3.Gateway.spec; if you choose to ignore these errors, turn validation off with --validate=false
$ kubectl apply --validate=false -f /tmp/test.yaml
gateway.networking.istio.io/httpbin-gateway created
virtualservice.networking.istio.io/httpbin created

$ kubectl get svc -n istio-system -o wide istio-ingressgateway
NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                                      AGE   SELECTOR
istio-ingressgateway   LoadBalancer   10.108.199.32   10.0.0.206   15021:31659/TCP,80:30780/TCP,443:30769/TCP   17h   app=istio-ingressgateway,istio=ingressgateway

请注意,它从 MetalLB 获得了错误的 EXTERNAL-IP 地址。

4

1 回答 1

1

我认为您需要在安装 Istio 时使用 IstioOperator 在 ingressGateway 上设置 IP 地址。不在您的虚拟网关上。

使用您的配置创建一个 yaml 文件:

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  components:
    ingressGateways:
    - name: istio-ingressgateway
      enabled: true
      k8s:
        service:
          type: LoadBalancer
          loadBalancerIP: 10.0.0.242

如果您目前在安装 Istio 时未提供操作员,则将使用默认配置,因此请确保添加任何您希望保留的值ingressGateway。此配置将与默认配置合并。

要获取当前配置:

kubectl get istiooperators.install.istio.io -n istio-system installed-state -o yaml

然后在安装 Istio 时应用此配置:

istioctl install \
    -f k8s/istio/gateways.yaml

IstioOperator 的所有选项:

https://istio.io/latest/docs/reference/config/istio.operator.v1alpha1/

于 2021-12-16T10:37:49.353 回答