Docker 了解kubernetes中的服务?
我在k8s学习服务,来自 我创建的服务没有选择器,只有一个端点。我想做的是我已经安装了apache,并且它正在80端口上运行。我已经在端口31000上创建了一个节点端口服务。现在这个服务应该将ip:31000重定向到ip:80端口 它针对服务的内部ip而不是外部ip 我的服务。yamlDocker 了解kubernetes中的服务?,docker,kubernetes,devops,kubernetes-service,Docker,Kubernetes,Devops,Kubernetes Service,我在k8s学习服务,来自 我创建的服务没有选择器,只有一个端点。我想做的是我已经安装了apache,并且它正在80端口上运行。我已经在端口31000上创建了一个节点端口服务。现在这个服务应该将ip:31000重定向到ip:80端口 它针对服务的内部ip而不是外部ip 我的服务。yaml apiVersion: v1 kind: Service metadata: name: my-service spec: ports: - protocol: TCP port: 9376
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
ports:
- protocol: TCP
port: 9376
targetPort: 80
nodePort: 31000
type: NodePort
apiVersion: v1
kind: Endpoints
metadata:
name: my-service
subsets:
- addresses:
- ip: <IP>
ports:
- port: 80
my endpoint.yaml
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
ports:
- protocol: TCP
port: 9376
targetPort: 80
nodePort: 31000
type: NodePort
apiVersion: v1
kind: Endpoints
metadata:
name: my-service
subsets:
- addresses:
- ip: <IP>
ports:
- port: 80
apiVersion:v1
种类:端点
元数据:
姓名:我的服务
子集:
-地址:
-知识产权:
端口:
-港口:80
kubectl获取服务的输出-o宽
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 53m <none>
my-service NodePort 10.111.205.207 <none> 9376:31000/TCP 30m <none>
NAME TYPE CLUSTER-IP EXTERNAL-IP端口年龄选择器
kubernetes ClusterIP 10.96.0.1 443/TCP 53m
我的服务节点端口10.111.205.207 9376:31000/TCP 30m
有多种类型的服务可为您提供不同级别的访问:
集群IP-可以从另一个pod访问服务(仅在Kubernetes集群内)
节点端口-可以从另一个pod以及运行Kubernetes群集的机器访问服务
LoadBalancer-可以从Kubernetes群集外部访问服务(使用外部IP)
当您有TCP级别的连接时,负载平衡器非常好。如果您有一个更高级别的连接(http),您也可以使用入口+节点端口第一件事是,您需要在集群内运行一个pod,然后在端点yaml和端口内分配该pod的ip,因为服务将pod公开到集群内或集群外,我们必须使用选择器或pod的地址,以便服务可以将其自身附加到特定的pod
apiVersion: v1
kind: Endpoints
metadata:
name: my-service
subsets:
- addresses:
- ip: <ip address of the pod>
ports:
- port: <port of the pod>
apiVersion:v1
种类:端点
元数据:
姓名:我的服务
子集:
-地址:
-知识产权:
端口:
-端口:
还有一件事,使用Statefulset代替部署来运行pod 服务的用途是在所有不同的pod之间建立通信或从集群外部访问pod 因此,您创建的每个pod或每个部署都会有某种匹配的服务。有几种不同类型的服务 1。群集IP:设置一个易于记忆的URL以访问pod。仅公开群集中的吊舱。因此,您可以随时使用集群IP服务,以便在集群内的不同POD之间建立通信 例如:event-bus-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: event-bus-depl
spec:
replicas: 1
selector:
matchLabels:
app: event-bus
template:
metadata:
labels:
app: event-bus
spec:
containers:
- name: event-bus
image: lordrafiq/event-bus:latest
---
apiVersion: v1
kind: Service
metadata:
name: event-bus-srv
spec:
selector:
app: event-bus
type: ClusterIP
ports:
- name: event-bus
protocol: TCP
port: 4005
targetPort: 4005
因此,从任何想要与事件总线通信的pod内部,可以使用端口4005上的事件总线srv
await axios.post('http://event-bus-srv:4005/events', {});
2。节点端口:使pod可以从集群外部访问(通常仅用于开发目的)。因此,节点端口可用于您希望从集群外部访问pod的任何时候,但它仅用于开发目的,负载平衡器是从集群访问pod的正确方法
apiVersion: v1
kind: Service
metadata:
name: posts-srv
spec:
type: NodePort
selector:
app: posts
ports:
- name: posts
protocol: TCP
port: 4000
targetPort: 4000
31154是创建节点端口服务后得到的节点端口
3。负载平衡器:可从集群外部访问pod。这是将吊舱暴露于外界的正确方式
4。外部名称:将集群内请求重定向到CNAME url。您如何运行apache?您是在pod中运行apache还是直接安装在节点中?你在哪里运行这个?Minikube或云管理kubernetes群集?外部IP是什么意思?这是一个可以公开访问的IP吗?NodePort类型服务使用
${NodeIP}:${NodePort}
使您的服务在集群节点上可用。如果这些节点没有公共IP,您将无法从网络外部访问服务。我仅在节点上运行Apache。我正在云上运行它。云有两个工作节点和一个主节点我期待着一个问题的解决方案。我知道理论,这是解决方案。。。使用LoadBalancer服务类型或将入口与节点端口服务结合使用。如何实现它们取决于您使用的云提供商。通常,你可以在每个云提供商上找到很多关于如何使用这些资源的文档。你能发布一些例子吗?谢谢Arun的解释。这对我来说已经奏效了。如果可以发布文本,请不要发布图像。图像不容易搜索,会降低帖子的质量。而且你不能复制他们的内容,这是一个PITA当试图与一个问题或答案。