我目前正在使用kubernetes,并试图制定一个开发流程,使开发人员能够访问本地kubernetes集群中的服务?我希望它保持简单,现在尝试使用kubectl port-forward kafka 10000:9092
,但这似乎并没有将pod暴露给localhost:10000。
我尝试将kafka服务转换为节点端口,但仍然没有运气-我访问它的唯一方法是将应用程序创建为dockerized应用程序,然后在docker容器中运行该应用程序 -表示运行exe文件不会连接到该文件,但使用docker执行该文件将使其正常运行。
我尝试了Kubectl代理-也不起作用-我无法ping通clusterIp。
我还没有尝试过使用入口或负载平衡器,因为我觉得它太复杂了,考虑到这只是出于开发目的,而不是应该用于生产的“安全”产品。
我如何轻松公开kafka服务,以便本地运行kubernetes集群的笔记本电脑上的控制台应用程序可以访问它?
apiVersion: v1
kind: Service
metadata:
name: kafka-headless
spec:
clusterIP: None
ports:
- name: broker
port: 9092
protocol: TCP
targetPort: 9092
selector:
app: kafka
sessionAffinity: None
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
name: kafka
spec:
ports:
- name: broker
port: 9092
protocol: TCP
targetPort: 9092
selector:
app: kafka
sessionAffinity: None
type: ClusterIP
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app: kafka
name: kafka
spec:
podManagementPolicy: OrderedReady
replicas: 1
revisionHistoryLimit: 1
selector:
matchLabels:
app: kafka
serviceName: kafka-headless
template:
metadata:
labels:
app: kafka
spec:
containers:
- command:
- sh
- -exc
- |
unset KAFKA_PORT && \
export KAFKA_BROKER_ID=${HOSTNAME##*-} && \
export KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://${POD_IP}:9092 && \
exec /etc/confluent/docker/run
env:
- name: POD_IP
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
- name: KAFKA_HEAP_OPTS
value: -Xmx1G -Xms1G
- name: KAFKA_ZOOKEEPER_CONNECT
value: leader-zookeeper:2181
- name: KAFKA_LOG_DIRS
value: /opt/kafka/data/logs
- name: KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR
value: "1"
image: confluentinc/cp-kafka:latest
imagePullPolicy: IfNotPresent
livenessProbe:
exec:
command:
- sh
- -ec
- /usr/bin/jps | /bin/grep -q SupportedKafka
failureThreshold: 3
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 5
name: kafka-broker
readinessProbe:
failureThreshold: 3
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
tcpSocket:
port: kafka
timeoutSeconds: 5
ports:
- containerPort: 9092
name: kafka
protocol: TCP
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /opt/kafka/data
name: datadir
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 60
updateStrategy:
type: OnDelete
volumeClaimTemplates:
- metadata:
name: datadir
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
---
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
labels:
app: kafka-pdb
name: kafka-pdb
spec:
maxUnavailable: 0
selector:
matchLabels:
app: kafka
---
答案 0 :(得分:0)
要移植到服务,您需要在名称前使用svc/
。因此,您的命令将是kubectl port-forward svc/kafka 10000:9092
或kubectl port-forward kafka-0 10000:9092
在Windows上,确保Windows防火墙没有阻止kubectl。
您还可以使用telepresence
通过交换本地开发版本来调试集群上的现有服务。
安装网真并使用telepresence --swap-deployment $DEPLOYMENT_NAME
参考:
答案 1 :(得分:0)
如果我对您的理解正确,那么我还有一些其他选项可供您检查:
This answer使用externalTrafficPolicy: Local
的想法以及其他可能的解决方案。
我从评论中看到您正在使用Windows的Docker Desktop。您可以尝试使用type: LoadBalancer
服务而不是ClusterIP
或NodePort
。我知道听起来可能有些麻烦,但是我没有看到like this one的例子表明它确实有效。
我将其发布为社区答复,因为建议的解决方案最初并不是我的想法。
请让我知道是否有帮助。