Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 为什么可以';我不能通过名称访问ClusterIP服务吗?_Docker_Kubernetes - Fatal编程技术网

Docker 为什么可以';我不能通过名称访问ClusterIP服务吗?

Docker 为什么可以';我不能通过名称访问ClusterIP服务吗?,docker,kubernetes,Docker,Kubernetes,我设置了一个简单的redis ClusterIP服务,由集群内的php LoadBalancer服务访问。php日志显示连接超时错误。无法访问redis服务 'production'.ERROR: Operation timed out {"exception":"[object] (RedisException(code: 0): Operation timed out at /var/www/html/vendor/laravel/framework/src/Illuminate/Redi

我设置了一个简单的redis ClusterIP服务,由集群内的php LoadBalancer服务访问。php日志显示连接超时错误。无法访问redis服务

'production'.ERROR: Operation timed out {"exception":"[object] (RedisException(code: 0): 
Operation timed out at /var/www/html/vendor/laravel/framework/src/Illuminate/Redis
/html/vendor/laravel/framework/src/Illuminate/Redis/Connectors/PhpRedisConnector.php(109): 
    Redis->connect('redis-svc', '6379', 0, '', 0, 0)
我的redis服务非常简单,所以我不知道出了什么问题:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    io.kompose.service: redis
  name: redis
spec:
  replicas: 1
  strategy: {}
  template:
    metadata:
      labels:
        io.kompose.service: redis
    spec:
      containers:
      - image: redis:alpine
        name: redis
        resources: {}
        ports:
        - containerPort: 6379
      restartPolicy: Always
status: {}
---
kind: Service
apiVersion: v1
metadata:
  name: redis-svc
spec:
  selector:
    app: redis
  ports:
  - protocol: TCP
    port: 6379
    targetPort: 6379
  type: ClusterIP
我验证redis svc是否正在运行,为什么其他服务无法访问它

kubectl get service redis-svc                                                                                                                                  git:k8s*
NAME        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
redis-svc   ClusterIP   10.101.164.225   <none>        6379/TCP   22m
MyPHP是另一个使用env设置redis服务名称的服务

spec:
  containers:
  - env:
    - name: REDIS_HOST # the php code access this variable
      value: redis-svc #changed to "redis" when redis service name changed to "redis"
-----更新2------

我无法将我的redis服务名称设置为“redis”的原因是b/c“”,因此使用名称“redis”,将有一个
redis\u端口=tcp://10.101.210.23:6379
它会覆盖我自己的
REDIS\u PORT=6379

但是我的php只希望REDIS_PORT的值是6379,我运行了您提供的yaml配置,它创建了部署和服务。但是,当我运行以下命令时:

kubectl获得svc 名称类型CLUSTER-IP外部IP端口年龄 kubernetes ClusterIP 10.96.0.1 443/TCP 5d14h redis svc ClusterIP 10.105.31.201 6379/TCP 109s >>>>kubectl获取端点 姓名端点年龄 库伯内特斯192.168.99.116:8443 5d14h redis svc 78s 如您所见,redis svc的端点为none,这意味着服务没有要连接的端点。您正在redis svc中使用选择器标签作为
app:redis
。但是pod没有在服务中定义选择器标签。将标签
app:redis
添加到pod模板将起作用。部署的完整工作yaml配置如下所示:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    io.kompose.service: redis
  name: redis
spec:
  replicas: 1
  strategy: {}
  template:
    metadata:
      labels:
        io.kompose.service: redis
        app: redis
    spec:
      containers:
      - image: redis:alpine
        name: redis
        resources: {}
        ports:
        - containerPort: 6379
      restartPolicy: Always
status: {}

您的redis吊舱似乎没有
app:redis
标签,因此服务没有路由到它们。尝试将该标签添加到部署的
规范
。您是救命恩人!我感到很尴尬:$。我把我的问题留在这里了第二个问题的b/c。我如何验证redis svc是否可以访问?顺便说一句,您完全可以ping服务IP地址,这取决于您选择的网络插件。那么关于我的第二个问题,我如何验证redis svc是否可以访问?端点填充了与服务中定义的spec.selector标签匹配的pods IP。如前所述,在我的上述问题中,kubectl get endpoints最初没有任何pods ip。但是,一旦匹配选择器标签的POD运行,端点就会添加POD的ip地址。嗨,你能检查我更新的问题吗。我在部署和服务中使用了相同的名称,无法再次访问redis。我不明白您到底做了什么更改。到底是什么错误?你能给我一个详细的解释吗?嗨,我找到了原因,就像这个人说的
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    io.kompose.service: redis
  name: redis
spec:
  replicas: 1
  strategy: {}
  template:
    metadata:
      labels:
        io.kompose.service: redis
        app: redis
    spec:
      containers:
      - image: redis:alpine
        name: redis
        resources: {}
        ports:
        - containerPort: 6379
      restartPolicy: Always
status: {}