小编sur*_*ren的帖子

如何通过Kubernetes中的另一个Pod访问部署在一个Pod上的服务?

谁能让我知道我们如何通过kubernetes集群中的另一个Pod来访问部署在一个Pod上的服务?

例:

有一个部署在Node1上的Nginx服务(以Pod名称为Nginx-12345)和另一个部署在Node2上的服务(以Pod名称为Service-23456)。现在,如果“服务”出于某种原因要与“ nginx”进行通信,那么我们如何在“ service-23456”窗格中访问“ nginx”?

docker kubernetes kubectl kubelet

4
推荐指数
2
解决办法
4137
查看次数

使用 K8s Python 客户端获取服务选择器

label selectors我正在尝试通过Kubernetes Python Client获取服务。我正在使用list_service_for_all_namespaces方法来检索服务,并使用field_selector如下参数对其进行过滤:

...
field_selector="spec.selector={u'app': 'redis'}
...
services = v1.list_service_for_all_namespaces(field_selector=field_selector, watch=False)
for service in services.items:
    print(service)
...
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

HTTP response body: {"kind":"Status","apiVersion":"v1","metadata":{},"status":"Failure","message":"\"spec.selector\" is not a known field selector: only \"metadata.name\", \"metadata.namespace\"","reason":"BadRequest","code":400}
Run Code Online (Sandbox Code Playgroud)

因此,似乎只有namenamespace是有效参数,但没有记录:

field_selector = 'field_selector_example' # str | 通过字段限制返回对象列表的选择器。默认为一切。(选修的)

目前我的解决方法是为服务设置与标签选择器相同的标签,然后通过参数检索它,但我希望能够通过.label_selectorlabel selectors

问题是,从一开始我就需要获取服务背后的端点(后端 Pod),但 API 调用甚至没有返回此信息,所以我想我会获取选择器,将它们与 Pod 上的标签进行匹配,就这样,但现在我意识到选择器也不可能获得。

这限制太多了。我想可能我的方法是错误的。有谁知道如何获得label selectors服务?

kubernetes kubernetes-python-client

3
推荐指数
1
解决办法
6435
查看次数

GCP 中的 Terraform“name” 与“self_link”

在 GCP 中,当使用 Terraform 时,我发现我可以使用name属性以及self_link. 所以,我想知道是否在某些情况下我必须使用其中任何一个。

例如:

resource "google_compute_ssl_policy" "custom_ssl_policy" {
  name            = "my-ssl-policy"
  profile         = "MODERN"
  min_tls_version = "TLS_1_1"
}
Run Code Online (Sandbox Code Playgroud)

这个对象,那么可以被称为:

ssl_policy = google_compute_ssl_policy.custom_ssl_policy.name
Run Code Online (Sandbox Code Playgroud)

ssl_policy = google_compute_ssl_policy.custom_ssl_policy.self_link
Run Code Online (Sandbox Code Playgroud)

我知道object.name返回 Terraform 对象名称,并object.self_link返回 GCP 资源的 URI。

我尝试过使用多个对象,并且它适用于这两个属性,所以我想知道这是否微不足道,或者在某些情况下我应该使用其中之一。

google-cloud-platform terraform terraform-provider-gcp

3
推荐指数
1
解决办法
6475
查看次数

Istio 添加和删除标头,但不覆盖

VirtualServices我正在尝试使用 Istio添加、覆盖和删除标头。向请求添加标头并从响应中删除标头效果很好,但不会覆盖请求中的标头。

因此,根据 Istio 文档,标头操作如下:

在此输入图像描述

这是我的VirtualService

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: server-vs
spec:
  hosts:
  - server.istio.svc.cluster.local
  http:
  - headers:
      request:
        set:
          test: "true"
        add:
          added: "header"
    route:
    - destination:
        host: server.istio.svc.cluster.local
        subset: apache
      weight: 90
    - destination:
        host: server.istio.svc.cluster.local
        subset: nginx
      headers:
        response:
          remove:
          - foo
      weight: 10
Run Code Online (Sandbox Code Playgroud)

重点关注set标题,这是我的理解。Istio 将使用 key 来识别标头test,并将用 覆盖该值true。因此,如果我使用-H "test: hello"参数来卷曲我的服务,我应该在我的请求中看到test: true

现在,我已在后端 pod 中安装了 tcpdump,并且可以看到added: header. 我还可以看到它foo: bar …

istio

2
推荐指数
1
解决办法
4851
查看次数

从 kubernetes 拉取本地仓库 docker 镜像

尝试在本地环境中使用 Pod 安装示例容器应用程序,我使用的是 docker 桌面附带的 kubernates 集群。

我正在使用 bellow 命令和 YML 文件 kubectl create -f test_image_pull.yml 创建 Pod

apiVersion: v1
kind: Pod
metadata:
# value must be lower case
  name: sample-python-web-app
spec:
  containers:
    - name: sample-hello-world
      image: local/sample:latest
      imagePullPolicy: Always
      command: ["echo", "SUCCESS"]

Run Code Online (Sandbox Code Playgroud)

docker 文件用于构建映像,如果您使用 docker run 运行,则此容器运行没有任何问题

# Use official runtime python
FROM python:2.7-slim

# set work directory to app

WORKDIR /app
# Copy current directory
COPY . /app

# install needed packages
RUN pip install --trusted-host pypi.python.org -r …
Run Code Online (Sandbox Code Playgroud)

kubernetes

1
推荐指数
1
解决办法
4175
查看次数