最近在学习 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 上加一层反代才可以
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.