Docker 了解kubernetes中的服务?

Docker 了解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

我在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
    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当试图与一个问题或答案。