0

我想访问外部服务/API

喜欢调用维基百科,所以我需要端口 80 http://en.wikipedia.org/w/api.php?action=opensearch&search=bee&limit=1&format=json

我的应用程序位于容器内的 pod 中,我暴露了端口 8000 并将其绑定到服务类型 loadbalncer 的 300 中。

还访问托管在 kubernetes 之外的外部数据库,如 mysql,所以我需要端口 3306,如何做到这一点。

这些都是部署和服务文件

https://github.com/hadyrashwan/request-wiki/blob/feature/open-internal-80/wiki-request-deployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: request-wiki-deployment
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: request-wiki
    spec:
      containers:
      - name: request-wiki
        image: hadyrashwan/request-wiki:0.0.4
        imagePullPolicy: Always
        ports:
        - containerPort: 8000
        - containerPort: 80

https://github.com/hadyrashwan/request-wiki/blob/feature/open-internal-80/wiki-request-service.yaml

apiVersion: v1
kind: Service
metadata:
  labels:
    name: request-wiki
  name:  request-wiki-service
spec:
  selector:
    app: request-wiki
  ports:
#  - name: app
  - port: 3000
    protocol: TCP
    targetPort: 8000
#  - name: app
#    protocol: TCP
#    targetPort: 80
  type: LoadBalancer

仍然没有使用配置/秘密或 tls

我在 GCP 上使用带有 2 个主机的 Kubernetes 环境的 Rancher,另一个在 AWS 上

4

2 回答 2

1

默认情况下,您的 pod 将使用它们所在节点的 docker 网桥进行出口连接。

尝试从您将用于部署 pod 的节点测试连接,如果您可以从节点连接,那么您的 pod 也应该能够做到。这样,您将能够轻松跟踪与出口连接相关的任何问题(检查防火墙规则、正确配置的接口等)。

您在 yaml 中配置的这些端口选项仅用于入口流量。

于 2017-03-29T10:27:54.040 回答
-1

如果我没有错,那么您想从 kubernetes 外部访问您的 kube 服务。您可以使用服务类型 NodePort

类型节点端口

master 将从标志配置的范围(默认值:30000-32767)中分配一个端口,并且每个节点都会将该端口(每个节点上的相同端口号)代理到您的服务中。该端口将在您的服务的 spec.ports[*].nodePort 字段中报告。如果您将类型字段设置为“NodePort”,Kubernetes

你可以像这样定义kube服务

{
    "kind": "Service",
    "apiVersion": "v1",
    "metadata": {
        "name": "my-service"
    },
    "spec": {
        "selector": {
            "app": "MyApp"
        },
        "ports": [
            {
                "protocol": "TCP",
                "port": 80,
                "targetPort": 9376,
                "nodePort": 30061
            }
        ],
        "type": "LoadBalancer"
    },
    }
}

或者你也可以使用 kubectl

kubectl expose rc example-rc --type=NodePort --port=9000 --target-port=8080 --node-port=32001

以上也应该适用于部署

所以最后如果你想获得你的服务然后点击anynode:nodeport

于 2017-03-28T14:42:48.080 回答