Kubernetes-没有选择器的服务

我在没有选择器的情况下在Kubernetes的服务中苦苦挣扎。群集通过kops安装在AWS上。我有一个带有3个Nginx Pod的部署,暴露了端口80:

apiVersion: apps/v1

kind: Deployment

metadata:

name: ngix-dpl # Name of the deployment object

labels:

app: nginx

spec:

replicas: 3 # Number of instances in the deployment

selector: # Selector identifies pods to be

matchLabels: # part of the deployment

app: nginx # by matching of the label "app"

template: # Templates describes pods of the deployment

metadata:

labels: # Defines key-value map

app: nginx # Label to be recognized by other objects

spec: # as deployment or service

containers: # Lists all containers in the pod

- name: nginx-pod # container name

image: nginx:1.17.4 # container docker image

ports:

- containerPort: 80 # port exposed by container

创建部署后,我记下了IP地址:

$ kubectl get pods -o wide | awk {'print $1" " $3" " $6'} | column -t

NAME STATUS IP

curl Running 100.96.6.40

ngix-dpl-7d6b8c8944-8zsgk Running 100.96.8.53

ngix-dpl-7d6b8c8944-l4gwk Running 100.96.6.43

ngix-dpl-7d6b8c8944-pffsg Running 100.96.8.54

并创建了一个服务于IP地址的服务:

apiVersion: v1

kind: Service

metadata:

name: dummy-svc

labels:

app: nginx

spec:

ports:

- protocol: TCP

port: 80

targetPort: 80

---

apiVersion: v1

kind: Endpoints

metadata:

name: dummy-svc

subsets:

- addresses:

- ip: 100.96.8.53

- ip: 100.96.6.43

- ip: 100.96.8.54

ports:

- port: 80

name: http

服务已成功创建:

$ kubectl get svc

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE

dummy-svc ClusterIP 100.64.222.220 <none> 80/TCP 32m

kubernetes ClusterIP 100.64.0.1 <none> 443/TCP 5d14h

不幸的是,我尝试通过服务从相同名称空间的另一个Pod连接到Nginx失败:

$ curl 100.64.222.220

curl: (7) Failed to connect to 100.64.222.220 port 80: Connection refused

我可以直接成功地连接到Nginx Pod:

$ curl 100.96.8.53

<!DOCTYPE html>

<html>

<head>

....

我注意到我的服务没有任何端点。但是我不确定应该在此处显示手动端点:

$ kubectl get svc/dummy-svc -o yaml

apiVersion: v1

kind: Service

metadata:

annotations:

kubectl.kubernetes.io/last-applied-configuration: |

{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"nginx"},"name":"dummy-svc","namespace":"default"},"spec":{"ports":[{"port":80,"protocol":"TCP","targetPort":80}]}}

creationTimestamp: "2019-11-22T08:41:29Z"

labels:

app: nginx

name: dummy-svc

namespace: default

resourceVersion: "4406151"

selfLink: /api/v1/namespaces/default/services/dummy-svc

uid: e0aa9d01-0d03-11ea-a19c-0a7942f17bf8

spec:

clusterIP: 100.64.222.220

ports:

- port: 80

protocol: TCP

targetPort: 80

sessionAffinity: None

type: ClusterIP

status:

loadBalancer: {}

我知道这不是服务的正确用例,使用pod选择器会使它工作。但我想强调一下为什么此配置不起作用。我不知道在哪里寻找解决方案。任何提示将不胜感激。

回答:

如果您从端点配置中删除“名称”字段,则它起作用。它应该看起来像这样:

apiVersion: v1

kind: Endpoints

metadata:

name: dummy-svc

subsets:

- addresses:

- ip: 172.17.0.4

- ip: 172.17.0.5

- ip: 172.17.0.6

ports:

- port: 80

以上是 Kubernetes-没有选择器的服务 的全部内容, 来源链接: utcz.com/qa/416412.html

回到顶部