每个kubernetes容器的唯一外部IP

时间:2019-03-02 23:39:13

标签: kubernetes rate-limiting

我需要扩展我的应用程序,以便它不会因为传递它经常使用的站点的请求速率限制而被禁止(每个IP每分钟最多允许X个请求)。
我本打算使用kubernetes并在多个工作程序之间拆分请求,但是我看到所有的pod都具有相同的外部IP。 那我该怎么办?

4 个答案:

答案 0 :(得分:4)

我使用kubernetes DaemonSet将pod附加到每个节点,而不是通过更改部署进行扩展,而是通过添加新节点进行扩展。

答案 1 :(得分:0)

如果您在云中运行,则可以使用公共IP地址创建工作节点。然后,您的Pod将使用节点的公共IP地址。然后,您可以使用多个副本或DaemonSet以某种方式在各个节点之间分布pod。

答案 2 :(得分:0)

不要担心一次获得一个外部IP的麻烦,因为如果您有3个工作人员和一个主设备,如下所示

#include <iostream>
#include <map>
#include <sstream>
#include <algorithm>    // copy, ...
#include <utility>      // pair, ...    
#include <fstream>
#include <iterator>
using namespace std;


typedef map<size_t, string> directory;
typedef pair<size_t, string> dir_kv_pair;

struct kv_dir : public dir_kv_pair {
                        kv_dir(void) = default;
                        kv_dir(directory::value_type kv):       // type conversion helper
                         dir_kv_pair{kv} {}                     // pair <-> kv_dir
    friend ostream &    operator<<(ostream & os, const kv_dir &kv)
                         { return os << kv.first << " " << kv.second << endl; }
    friend istream &    operator>>(istream & is, kv_dir& kv) {
                         if((is >> kv.second).eof()) return is;
                         kv.first = stol(kv.second);
                         return is >> kv.second;
                        }
};


int main()
{ 
 string fname = "dir.txt";

 {  // write into file
  directory dir;

  // filling the container
  dir[123] = "Michael";
  dir[412] = "Voker";
  dir[512] = "Karl";
  dir[143] = "Riki";

  // writing to file:
  ofstream fout{fname};
  copy(dir.begin(), dir.end(), ostream_iterator<kv_dir> {fout});
 }

 // reading from file:
 directory dir{ istream_iterator<kv_dir>{ ifstream{fname} >> skipws }, 
                istream_iterator<kv_dir>{} };

 // finding by ID
 size_t id = 512;
 cout << "Pupil id [" << id << "]: " << (dir.count(id) == 1? dir[id]: "not found") << endl;
}

例如,如果您在30000端口上公开nginx,则kubernetes会在每次点头时都打开该端口,您可以通过以下方式访问它:

Pupil id [512]: Karl
bash $
bash $ cat dir.txt 
123 Michael
143 Riki
412 Voker
512 Karl
bash $ 

如果您希望每个工作人员都拥有一个Pod,则可以使用DaemonSet或对所需节点使用标签

答案 3 :(得分:0)

这可能与您的Kubernetes实施无关,而与您的网络设置有关。这取决于您所引用的“外部IP”的来源:是您的ISP提供给您的吗?如果您用谷歌搜索“我的IP是什么”,它是否与您正在谈论的单个IP相匹配?如果是这样,则您需要与ISP协商其他的外部IP。

值得一提的是@JamesJJ是正确的。使用其他IP“诱骗” API允许更多连接很可能会违反该站点的TOS,并可能导致您的访问被终止。