最近在学习 k8s 相关的知识,遇到外部不能访问的问题
机器环境: 甲骨文 ARM 机器,上面安装了 k3s(已关闭 servicelb 和 traefik), istio(1.22.3), MetalLB (配置如下), bitnami/kafka(最新版本)
网络环境:甲骨文的机器有公网 IP ,关闭了防火墙, 域名 kafka.example.com 配置在 Cloudflare 上, kafka 集群默认使用的是 bitnami/kafka 的 helm 配置文件(helm install my-kafka bitnami/kafka --version 30.0.3
),修改了 listener 的 protocol 为 PLAINTEXT, 使用默认的 kraft 模式
listeners: client: protocol: PLAINTEXT controller: protocol: PLAINTEXT interbroker: protocol: PLAINTEXT external: protocol: PLAINTEXT
infra 配置文件: istio 配置 gateway.yaml
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: kafka-gateway spec: selector: istio: ingressgateway servers: - port: number: 80 name: http protocol: HTTP hosts: - "kafka.example.com" - port: number: 9092 name: kafka-tcp protocol: TCP hosts: - "kafka.example.com" # 这是 cloud 上面的可用域名
virtualservice.yaml
apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: kafka-virtualservice spec: hosts: - "kafka.example.com" gateways: - kafka-gateway tcp: - match: - port: 9092 route: - destination: host: my-kafka-controller-headless port: number: 9092
MetalLB 配置
apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: metallb-pool namespace: metallb-system spec: addresses: - xxx.xxx.xxx.xxx/32 # 这里使用的是甲骨文机器的 公网 ip
service 配置
apiVersion: v1 kind: Service metadata: name: istio-ingressgateway namespace: istio-system annotations: metallb.universe.tf/allow-shared-ip: "true" spec: selector: istio: ingressgateway ports: - port: 9092 targetPort: 9092 name: kafka type: LoadBalancer
目前的问题 使用上面的配置启动之后,istio-ingressgateway 的 external-ip 那个看到配置的公网 ip ,在 VM 上 curl -v kafka.example.com:9092
或者 curl -v public-ip:9092
也有结果,但是在其他机器上访问或者我自己电脑上访问不到( telnet xxx.xxx.xx.xxx 9092 也没有结果 telnet: Unable to connect to remote host: Connection refused ), 这个是正常的现象吗,还是必须要在 VM 上加一层反代才可以
![]() | 1 defunct9 2024-08-12 18:00:50 +08:00 MetalLB 是要配个池子,/32 单独一个 ip 不行吧。看看日志 |
![]() | 2 fantasy55 OP |
3 hyhnm 2024-08-12 22:31:42 +08:00 via iPhone 后续如何? |
5 naoying 2024-08-13 10:06:26 +08:00 防火墙? |
6 naoying 2024-08-13 10:47:38 +08:00 在主机抓包,看流量是否进入了 metallb 。 |
7 serialt 2024-08-13 21:39:39 +08:00 metallb layer2 模式需要分配一个网段(包含单个 ip),这个 ip 会绑定到网卡上,云服务器不支持这种情况 |