在本地kubernetes上公开服务
我在Mac OS上运行一个与docker捆绑的本地kubernetes 如何公开服务,以便通过Mac上的浏览器访问该服务 我创造了: a) 包括apachehttpd的部署 b) 通过yaml提供的服务:在本地kubernetes上公开服务,kubernetes,Kubernetes,我在Mac OS上运行一个与docker捆绑的本地kubernetes 如何公开服务,以便通过Mac上的浏览器访问该服务 我创造了: a) 包括apachehttpd的部署 b) 通过yaml提供的服务: apiVersion: v1 kind: Service metadata: name: apaches spec: selector: app: web type: NodePort ports: - protocol: TCP port: 80 ex
apiVersion: v1
kind: Service
metadata:
name: apaches
spec:
selector:
app: web
type: NodePort
ports:
- protocol: TCP
port: 80
externalIPs:
- 192.168.1.10 # Network IP of my Mac
我的服务看起来像:
$ kubectl get service apaches
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
apaches NodePort 10.102.106.158 192.168.1.10 80:31137/TCP 14m
我可以通过wget$cluster-IP
我试着打开我的Mac电脑,但它不起作用
这涉及到一个类似的问题。但是这个解决方案没有帮助,因为我不知道我可以使用哪个IP
更新
多亏了迈克尔·豪森布拉斯,我用计算机解决了这个问题。
尽管如此,仍有一些悬而未决的问题:
- 服务的externalIP是什么意思?当我不直接从外部访问服务时,为什么需要外部IP
- 服务端口31137的含义是什么
- kubernetes文档描述了一种方法[通过NodePort在minikube中发布服务][4]。在docker上捆绑kubernetes也可以吗
hostNetwork: true
脏(出于安全原因不应共享主机网络)=>我没有检查此解决方案
2。主机端口
hostPort: 8086
不适用于服务=>我没有检查此解决方案
3。节点端口
hostPort: 8086
通过定义节点端口公开服务:
apiVersion: v1
kind: Service
metadata:
name: apaches
spec:
type: NodePort
ports:
- port: 80
nodePort: 30000
selector:
app: apache
4。负载平衡器
编辑
@马修发帖了
5。入口
a。安装
b。配置入口
kubectl apply-f apache ing.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: apache-ingress
spec:
rules:
- host: localhost
http:
paths:
- path: /
backend:
serviceName: apaches
servicePort: 80
现在我可以通过调用
使用说明
- 回购协议简化了交易流程
- 对于生产使用,我将遵循以下步骤
- 回购协议附带了一个新的条款。对于快速获得工作示例应用程序非常有用
NodePort
:在静态端口(NodePort)的每个节点的IP上公开服务。自动创建节点端口
服务路由的集群
服务。您可以通过请求:
,从集群外部联系节点端口
服务
如果将类型
字段设置为节点端口
,则Kubernetes控制平面从--服务节点端口范围
标志指定的范围(默认值:30000-32767)分配端口。每个节点将该端口(每个节点上的端口号相同)代理到您的服务中。您的服务在其.spec.ports[*].nodePort
字段中报告分配的端口
使用节点端口的类型设置服务
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
clusterIP: 10.0.171.239
type: NodePort
然后,您可以通过检查服务暴露于哪个端口
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-service NodePort 10.103.218.215 <none> 9376:31040/TCP 52s
对于那些仍在寻找答案的人。我通过添加另一个Kube服务来实现这一点,只是为了将我的应用程序暴露于本地主机呼叫(通过浏览器或邮递员):
现在试试:我没有为类型:Loadbalancer:apaches Loadbalancer 10.98.28.154获取外部ip…可能是因为您的8080端口已被占用?例如,您有另一个本地服务或程序使用此端口?首先我会尝试两件事:1)docker ps-a
(查看正在运行的进程)2)尝试像8743
或8090
这样的奇特端口,而不是8080
,以确保没有其他应用程序在使用它3)我正在使用docker Desktop,也许你在Linux上,那里的工作方式有点不同4)我也在使用kubectl
,你可能在使用minikube
?你说得对,在修复了不正确的端口后,我可以访问该服务。你检查过它是否在127.0.0.1上公开了吗?
curl http://localhost:31040
kind: Service
apiVersion: v1
metadata:
name: apaches-published
spec:
ports:
- name: http
port: 8080
targetPort: 80
protocol: TCP
selector:
app: web
type: LoadBalancer